Merge "Add LOG_TAGs to drm hal default modules"
diff --git a/audio/2.0/default/Stream.h b/audio/2.0/default/Stream.h
index 0bbd803..73afe05 100644
--- a/audio/2.0/default/Stream.h
+++ b/audio/2.0/default/Stream.h
@@ -127,6 +127,7 @@
IStream::createMmapBuffer_cb _hidl_cb) {
Result retval(Result::NOT_SUPPORTED);
MmapBufferInfo info;
+ native_handle_t* hidlHandle = nullptr;
if (mStream->create_mmap_buffer != NULL) {
struct audio_mmap_buffer_info halInfo;
@@ -134,7 +135,7 @@
"create_mmap_buffer",
mStream->create_mmap_buffer(mStream, minSizeFrames, &halInfo));
if (retval == Result::OK) {
- native_handle_t* hidlHandle = native_handle_create(1, 0);
+ hidlHandle = native_handle_create(1, 0);
hidlHandle->data[0] = halInfo.shared_memory_fd;
info.sharedMemory = hidl_memory("audio_buffer", hidlHandle,
frameSize *halInfo.buffer_size_frames);
@@ -143,6 +144,10 @@
}
}
_hidl_cb(retval, info);
+ if (hidlHandle != nullptr) {
+ native_handle_close(hidlHandle);
+ native_handle_delete(hidlHandle);
+ }
return Void();
}
diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp
index de7bf13..ad18986 100644
--- a/audio/2.0/default/StreamIn.cpp
+++ b/audio/2.0/default/StreamIn.cpp
@@ -275,7 +275,7 @@
if (mDataMQ) {
ALOGE("the client attempts to call prepareForReading twice");
_hidl_cb(Result::INVALID_STATE,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
std::unique_ptr<DataMQ> tempDataMQ(
@@ -285,7 +285,7 @@
ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
// TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -293,7 +293,7 @@
if (status != OK || !mEfGroup) {
ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
@@ -309,7 +309,7 @@
if (status != OK) {
ALOGW("failed to start reader thread: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
diff --git a/audio/2.0/default/StreamOut.cpp b/audio/2.0/default/StreamOut.cpp
index ea6221e..1948b68 100644
--- a/audio/2.0/default/StreamOut.cpp
+++ b/audio/2.0/default/StreamOut.cpp
@@ -259,7 +259,7 @@
if (mDataMQ) {
ALOGE("the client attempts to call prepareForWriting twice");
_hidl_cb(Result::INVALID_STATE,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
std::unique_ptr<DataMQ> tempDataMQ(
@@ -269,7 +269,7 @@
ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
// TODO: Remove event flag management once blocking MQ is implemented. b/33815422
@@ -277,7 +277,7 @@
if (status != OK || !mEfGroup) {
ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
@@ -293,7 +293,7 @@
if (status != OK) {
ALOGW("failed to start writer thread: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
diff --git a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
index eb28e46..516cd00 100644
--- a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
+++ b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
@@ -25,6 +25,8 @@
#include <hardware/fingerprint.h>
#include "BiometricsFingerprint.h"
+#include <inttypes.h>
+
namespace android {
namespace hardware {
namespace biometrics {
@@ -245,12 +247,12 @@
if (auth_token != nullptr && auth_token_length > 0) {
// TODO: cache service?
sp<IServiceManager> sm = android::defaultServiceManager();
- sp<IBinder> binder = sm->getService(String16("android.security.keystore"));
+ sp<::android::IBinder> binder = sm->getService(String16("android.security.keystore"));
sp<IKeystoreService> service = interface_cast<IKeystoreService>(binder);
if (service != nullptr) {
- status_t ret = service->addAuthToken(auth_token, auth_token_length);
- if (ret != ResponseCode::NO_ERROR) {
- ALOGE("Falure sending auth token to KeyStore: %d", ret);
+ auto ret = service->addAuthToken(auth_token, auth_token_length);
+ if (!ret.isOk()) {
+ ALOGE("Failure sending auth token to KeyStore: %" PRId32, int32_t(ret));
}
} else {
ALOGE("Unable to communicate with KeyStore");
diff --git a/bluetooth/1.0/vts/Android.mk b/bluetooth/1.0/vts/Android.mk
new file mode 100644
index 0000000..85e0c38
--- /dev/null
+++ b/bluetooth/1.0/vts/Android.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(LOCAL_PATH)/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
diff --git a/bluetooth/1.0/vts/BluetoothHci.vts b/bluetooth/1.0/vts/BluetoothHci.vts
new file mode 100644
index 0000000..1112371
--- /dev/null
+++ b/bluetooth/1.0/vts/BluetoothHci.vts
@@ -0,0 +1,61 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IBluetoothHci"
+
+package: "android.hardware.bluetooth"
+
+import: "android.hardware.bluetooth@1.0::IBluetoothHciCallbacks"
+import: "android.hardware.bluetooth@1.0::types"
+
+interface: {
+ api: {
+ name: "initialize"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::bluetooth::V1_0::Status"
+ }
+ arg: {
+ type: TYPE_HIDL_INTERFACE
+ predefined_type: "IBluetoothHciCallbacks"
+ is_callback: false
+ }
+ }
+
+ api: {
+ name: "sendHciCommand"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "sendAclData"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "sendScoData"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "close"
+ }
+
+}
diff --git a/bluetooth/1.0/vts/BluetoothHciCallbacks.vts b/bluetooth/1.0/vts/BluetoothHciCallbacks.vts
new file mode 100644
index 0000000..f2df5b4
--- /dev/null
+++ b/bluetooth/1.0/vts/BluetoothHciCallbacks.vts
@@ -0,0 +1,43 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IBluetoothHciCallbacks"
+
+package: "android.hardware.bluetooth"
+
+import: "android.hardware.bluetooth@1.0::types"
+
+interface: {
+ api: {
+ name: "hciEventReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "aclDataReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "scoDataReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+}
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
new file mode 100644
index 0000000..f9e3276
--- /dev/null
+++ b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-subdir-makefiles)
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk
new file mode 100644
index 0000000..98bb686
--- /dev/null
+++ b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := HalBluetoothHidlTargetBasicTest
+VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target
+include test/vts/tools/build/Android.host_config.mk
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml
new file mode 100644
index 0000000..54fb89b
--- /dev/null
+++ b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Bluetooth HIDL HAL's basic target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="HalBluetoothHidlTargetBasicTest" />
+ <option name="binary-test-sources" value="
+ _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="test-timeout" value="1m" />
+ </test>
+</configuration>
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk
new file mode 100644
index 0000000..81a2db9
--- /dev/null
+++ b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/Android.mk
@@ -0,0 +1,23 @@
+#
+## Copyright (C) 2016 The Android Open Source Project
+#
+## Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# # You may obtain a copy of the License at
+# #
+# # http://www.apache.org/licenses/LICENSE-2.0
+# #
+# # Unless required by applicable law or agreed to in writing, software
+# # distributed under the License is distributed on an "AS IS" BASIS,
+# # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# # See the License for the specific language governing permissions and
+# # limitations under the License.
+# #
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := BluetoothHidlTargetProfilingTest
+VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target_profiling
+include test/vts/tools/build/Android.host_config.mk
diff --git a/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml
new file mode 100644
index 0000000..8052b3c
--- /dev/null
+++ b/bluetooth/1.0/vts/functional/vts/testcases/hal/bluetooth/hidl/target_profiling/AndroidTest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Bluetooth HIDL HAL's target-side profiling test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="BluetoothHidlTargetProfilingTest" />
+ <option name="binary-test-sources" value="
+ _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="test-timeout" value="1m" />
+ <option name="enable-profiling" value="true" />
+ </test>
+</configuration>
diff --git a/bluetooth/1.0/vts/types.vts b/bluetooth/1.0/vts/types.vts
new file mode 100644
index 0000000..59eb3d4
--- /dev/null
+++ b/bluetooth/1.0/vts/types.vts
@@ -0,0 +1,32 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "types"
+
+package: "android.hardware.bluetooth"
+
+
+attribute: {
+ name: "::android::hardware::bluetooth::V1_0::Status"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "int32_t"
+
+ enumerator: "SUCCESS"
+ scalar_value: {
+ int32_t: 0
+ }
+ enumerator: "TRANSPORT_ERROR"
+ scalar_value: {
+ int32_t: 1
+ }
+ enumerator: "INITIALIZATION_ERROR"
+ scalar_value: {
+ int32_t: 2
+ }
+ enumerator: "UNKNOWN"
+ scalar_value: {
+ int32_t: 3
+ }
+ }
+}
+
diff --git a/boot/1.0/default/BootControl.cpp b/boot/1.0/default/BootControl.cpp
index 828da16..9a90076 100644
--- a/boot/1.0/default/BootControl.cpp
+++ b/boot/1.0/default/BootControl.cpp
@@ -93,14 +93,14 @@
}
-IBootControl* HIDL_FETCH_IBootControl(const char* hal) {
+IBootControl* HIDL_FETCH_IBootControl(const char* /* hal */) {
int ret = 0;
boot_control_module_t* module = NULL;
hw_module_t **hwm = reinterpret_cast<hw_module_t**>(&module);
- ret = hw_get_module(hal, const_cast<const hw_module_t**>(hwm));
+ ret = hw_get_module(BOOT_CONTROL_HARDWARE_MODULE_ID, const_cast<const hw_module_t**>(hwm));
if (ret)
{
- ALOGE("hw_get_module %s failed: %d", hal, ret);
+ ALOGE("hw_get_module %s failed: %d", BOOT_CONTROL_HARDWARE_MODULE_ID, ret);
return nullptr;
}
module->init(module);
diff --git a/boot/1.0/default/service.cpp b/boot/1.0/default/service.cpp
index 0dc56bf..f3996ef 100644
--- a/boot/1.0/default/service.cpp
+++ b/boot/1.0/default/service.cpp
@@ -22,5 +22,5 @@
using android::hardware::defaultPassthroughServiceImplementation;
int main (int /* argc */, char * /* argv */ []) {
- return defaultPassthroughServiceImplementation<IBootControl>("bootctrl");
+ return defaultPassthroughServiceImplementation<IBootControl>();
}
diff --git a/boot/1.0/vts/functional/boot_hidl_hal_test.cpp b/boot/1.0/vts/functional/boot_hidl_hal_test.cpp
index 3413a93..36142df 100644
--- a/boot/1.0/vts/functional/boot_hidl_hal_test.cpp
+++ b/boot/1.0/vts/functional/boot_hidl_hal_test.cpp
@@ -35,7 +35,7 @@
class BootHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- boot = IBootControl::getService("bootctrl");
+ boot = IBootControl::getService();
ASSERT_NE(boot, nullptr);
}
diff --git a/camera/device/3.2/default/Android.bp b/camera/device/3.2/default/Android.bp
index 9820220..40d4253 100644
--- a/camera/device/3.2/default/Android.bp
+++ b/camera/device/3.2/default/Android.bp
@@ -20,3 +20,27 @@
],
export_include_dirs: ["."]
}
+
+cc_library_shared {
+ name: "android.hardware.camera.device@3.2-impl-binderized",
+ srcs: ["CameraDevice.cpp",
+ "CameraDeviceSession.cpp",
+ "convert.cpp"],
+ cppflags: ["-DBINDERIZED"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libcutils",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "liblog",
+ "libhardware",
+ "libcamera_metadata"
+ ],
+ static_libs: [
+ "android.hardware.camera.common@1.0-helper"
+ ],
+ export_include_dirs: ["."]
+}
diff --git a/camera/provider/2.4/default/Android.bp b/camera/provider/2.4/default/Android.bp
index f28c9cd..ee40ce5 100644
--- a/camera/provider/2.4/default/Android.bp
+++ b/camera/provider/2.4/default/Android.bp
@@ -21,3 +21,29 @@
"android.hardware.camera.common@1.0-helper"
]
}
+
+cc_binary {
+ name: "android.hardware.camera.provider@2.4-service",
+ relative_install_path: "hw",
+ srcs: ["service.cpp", "CameraProvider.cpp"],
+ compile_multilib: "32",
+ init_rc: ["android.hardware.camera.provider@2.4-service.rc"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "liblog",
+ "libhwbinder",
+ "libutils",
+ "libhardware",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.camera.common@1.0",
+ "libcutils",
+ "android.hardware.camera.device@3.2-impl-binderized",
+ "libcamera_metadata"
+ ],
+ static_libs: [
+ "android.hardware.camera.common@1.0-helper"
+ ]
+}
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index 9617d8d..1a34aa6 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -17,8 +17,6 @@
#define LOG_TAG "CamProvider@2.4-impl"
#include <android/log.h>
-#include <regex>
-
#include "CameraProvider.h"
#include "CameraDevice.h"
#include <string.h>
diff --git a/camera/provider/2.4/default/CameraProvider.h b/camera/provider/2.4/default/CameraProvider.h
index 8497ff3..2a43e2f 100644
--- a/camera/provider/2.4/default/CameraProvider.h
+++ b/camera/provider/2.4/default/CameraProvider.h
@@ -17,6 +17,7 @@
#ifndef ANDROID_HARDWARE_CAMERA_PROVIDER_V2_4_CAMERAPROVIDER_H
#define ANDROID_HARDWARE_CAMERA_PROVIDER_V2_4_CAMERAPROVIDER_H
+#include <regex>
#include "hardware/camera_common.h"
#include "utils/Mutex.h"
#include "utils/SortedVector.h"
diff --git a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
new file mode 100644
index 0000000..31f0810
--- /dev/null
+++ b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
@@ -0,0 +1,6 @@
+service camera-provider-2-4 /system/bin/hw/android.hardware.camera.provider@2.4-service
+ class hal
+ user cameraserver
+ group audio camera input drmrpc
+ ioprio rt 4
+ writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
\ No newline at end of file
diff --git a/camera/provider/2.4/default/service.cpp b/camera/provider/2.4/default/service.cpp
new file mode 100644
index 0000000..2723dee
--- /dev/null
+++ b/camera/provider/2.4/default/service.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.camera.provider@2.4-service"
+
+#include <android/hardware/camera/provider/2.4/ICameraProvider.h>
+#include <CameraProvider.h>
+
+#include <hidl/HidlTransportSupport.h>
+#include <utils/StrongPointer.h>
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::sp;
+using android::hardware::camera::provider::V2_4::ICameraProvider;
+using android::hardware::camera::provider::V2_4::implementation::HIDL_FETCH_ICameraProvider;
+
+int main()
+{
+ const char instance[] = "legacy/0";
+
+ ALOGI("Camera provider Service is starting.");
+
+ configureRpcThreadpool(1, true /* callerWillJoin */);
+ // TODO (b/34510650): check the passthrough/binderized dev key
+ sp<ICameraProvider> service = HIDL_FETCH_ICameraProvider(instance);
+ if (service == nullptr) {
+ ALOGI("Camera provider getService returned NULL");
+ return -1;
+ }
+
+ LOG_FATAL_IF(service->isRemote(), "Camera provider service is REMOTE!");
+
+ service->registerAsService(instance);
+ joinRpcThreadpool();
+
+ return 0;
+}
\ No newline at end of file
diff --git a/contexthub/1.0/vts/Android.mk b/contexthub/1.0/vts/Android.mk
new file mode 100644
index 0000000..266884b
--- /dev/null
+++ b/contexthub/1.0/vts/Android.mk
@@ -0,0 +1,21 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+contexthub-vts-path := $(LOCAL_PATH)
+
+include $(contexthub-vts-path)/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk
diff --git a/contexthub/1.0/vts/Contexthub.vts b/contexthub/1.0/vts/Contexthub.vts
new file mode 100644
index 0000000..b4e42f5
--- /dev/null
+++ b/contexthub/1.0/vts/Contexthub.vts
@@ -0,0 +1,147 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IContexthub"
+
+package: "android.hardware.contexthub"
+
+import: "android.hardware.contexthub@1.0::IContexthubCallback"
+import: "android.hardware.contexthub@1.0::types"
+
+interface: {
+ api: {
+ name: "getHubs"
+ return_type_hidl: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::ContextHub"
+ }
+ }
+ }
+
+ api: {
+ name: "registerCallback"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_HIDL_CALLBACK
+ predefined_type: "IContexthubCallback"
+ is_callback: true
+ }
+ }
+
+ api: {
+ name: "sendMessageToHub"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::ContextHubMsg"
+ }
+ }
+
+ api: {
+ name: "loadNanoApp"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::NanoAppBinary"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+ api: {
+ name: "unloadNanoApp"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+ api: {
+ name: "enableNanoApp"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+ api: {
+ name: "disableNanoApp"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+ api: {
+ name: "queryApps"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::Result"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+}
diff --git a/contexthub/1.0/vts/ContexthubCallback.vts b/contexthub/1.0/vts/ContexthubCallback.vts
new file mode 100644
index 0000000..c3784e8
--- /dev/null
+++ b/contexthub/1.0/vts/ContexthubCallback.vts
@@ -0,0 +1,61 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IContexthubCallback"
+
+package: "android.hardware.contexthub"
+
+import: "android.hardware.contexthub@1.0::types"
+
+interface: {
+ api: {
+ name: "handleClientMsg"
+ arg: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::ContextHubMsg"
+ }
+ }
+
+ api: {
+ name: "handleTxnResult"
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ arg: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::TransactionResult"
+ }
+ }
+
+ api: {
+ name: "handleHubEvent"
+ arg: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::AsyncEventType"
+ }
+ }
+
+ api: {
+ name: "handleAppAbort"
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ }
+
+ api: {
+ name: "handleAppsInfo"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::HubAppInfo"
+ }
+ }
+ }
+
+}
diff --git a/contexthub/1.0/vts/functional/Android.bp b/contexthub/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..e78898e
--- /dev/null
+++ b/contexthub/1.0/vts/functional/Android.bp
@@ -0,0 +1,38 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_test {
+ name: "contexthub_hidl_hal_test",
+ gtest: true,
+ srcs: ["contexthub_hidl_hal_test.cpp"],
+ shared_libs: [
+ "liblog",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.contexthub@1.0",
+ ],
+ static_libs: ["libgtest"],
+ cflags: [
+ "--coverage",
+ "-O0",
+ "-g",
+ ],
+ ldflags: [
+ "--coverage",
+ ],
+}
+
diff --git a/contexthub/1.0/vts/functional/contexthub_hidl_hal_test.cpp b/contexthub/1.0/vts/functional/contexthub_hidl_hal_test.cpp
new file mode 100644
index 0000000..e4dea4f
--- /dev/null
+++ b/contexthub/1.0/vts/functional/contexthub_hidl_hal_test.cpp
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "contexthub_hidl_hal_test"
+
+#include <android-base/logging.h>
+#include <android/hardware/contexthub/1.0/IContexthub.h>
+#include <android/hardware/contexthub/1.0/IContexthubCallback.h>
+#include <android/hardware/contexthub/1.0/types.h>
+#include <android/log.h>
+#include <gtest/gtest.h>
+
+#include <cinttypes>
+#include <future>
+#include <utility>
+
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::contexthub::V1_0::AsyncEventType;
+using ::android::hardware::contexthub::V1_0::ContextHub;
+using ::android::hardware::contexthub::V1_0::ContextHubMsg;
+using ::android::hardware::contexthub::V1_0::HubAppInfo;
+using ::android::hardware::contexthub::V1_0::IContexthub;
+using ::android::hardware::contexthub::V1_0::IContexthubCallback;
+using ::android::hardware::contexthub::V1_0::NanoAppBinary;
+using ::android::hardware::contexthub::V1_0::Result;
+using ::android::hardware::contexthub::V1_0::TransactionResult;
+using ::android::sp;
+
+#define CONTEXTHUB_SERVICE_NAME "contexthub"
+
+#define ASSERT_OK(result) ASSERT_EQ(result, Result::OK)
+#define EXPECT_OK(result) EXPECT_EQ(result, Result::OK)
+
+namespace {
+
+// App ID with vendor "GoogT" (Google Testing), app identifier 0x555555. This
+// app ID is reserved and must never appear in the list of loaded apps.
+constexpr uint64_t kNonExistentAppId = 0x476f6f6754555555;
+
+// Helper that does explicit conversion of an enum class to its underlying/base
+// type. Useful for stream output of enum values.
+template<typename EnumType>
+constexpr typename std::underlying_type<EnumType>::type asBaseType(
+ EnumType value) {
+ return static_cast<typename std::underlying_type<EnumType>::type>(value);
+}
+
+// Synchronously queries IContexthub::getHubs() and returns the result
+hidl_vec<ContextHub> getHubsSync(sp<IContexthub> hubApi) {
+ hidl_vec<ContextHub> hubList;
+ std::promise<void> barrier;
+
+ hubApi->getHubs([&hubList, &barrier](const hidl_vec<ContextHub>& hubs) {
+ hubList = hubs;
+ barrier.set_value();
+ });
+ barrier.get_future().wait_for(std::chrono::seconds(1));
+
+ return hubList;
+}
+
+// Gets a list of valid hub IDs in the system
+std::vector<uint32_t> getHubIds() {
+ static std::vector<uint32_t> hubIds;
+
+ if (hubIds.size() == 0) {
+ sp<IContexthub> hubApi = IContexthub::getService(CONTEXTHUB_SERVICE_NAME);
+
+ if (hubApi != nullptr) {
+ for (ContextHub hub : getHubsSync(hubApi)) {
+ hubIds.push_back(hub.hubId);
+ }
+ }
+ }
+
+ ALOGD("Running tests against all %zu reported hubs", hubIds.size());
+ return hubIds;
+}
+
+// Base test fixture that initializes the HAL and makes the context hub API
+// handle available
+class ContexthubHidlTestBase : public ::testing::Test {
+ public:
+ virtual void SetUp() override {
+ hubApi = IContexthub::getService(CONTEXTHUB_SERVICE_NAME);
+ ASSERT_NE(hubApi, nullptr);
+
+ // getHubs() must be called at least once for proper initialization of the
+ // HAL implementation
+ getHubsSync(hubApi);
+ }
+
+ virtual void TearDown() override {}
+
+ sp<IContexthub> hubApi;
+};
+
+// Test fixture parameterized by hub ID
+class ContexthubHidlTest : public ContexthubHidlTestBase,
+ public ::testing::WithParamInterface<uint32_t> {
+ public:
+ uint32_t getHubId() {
+ return GetParam();
+ }
+
+ Result registerCallback(sp<IContexthubCallback> cb) {
+ Result result = hubApi->registerCallback(getHubId(), cb);
+ ALOGD("Registered callback, result %" PRIu32, result);
+ return result;
+ }
+};
+
+// Base callback implementation that just logs all callbacks by default
+class ContexthubCallbackBase : public IContexthubCallback {
+ public:
+ virtual Return<void> handleClientMsg(const ContextHubMsg& /*msg*/) override {
+ ALOGD("Got client message callback");
+ return Void();
+ }
+
+ virtual Return<void> handleTxnResult(
+ uint32_t txnId, TransactionResult result) override {
+ ALOGD("Got transaction result callback for txnId %" PRIu32 " with result %"
+ PRId32, txnId, result);
+ return Void();
+ }
+
+ virtual Return<void> handleHubEvent(AsyncEventType evt) override {
+ ALOGD("Got hub event callback for event type %" PRIu32, evt);
+ return Void();
+ }
+
+ virtual Return<void> handleAppAbort(uint64_t appId, uint32_t abortCode)
+ override {
+ ALOGD("Got app abort notification for appId 0x%" PRIx64 " with abort code "
+ "0x%" PRIx32, appId, abortCode);
+ return Void();
+ }
+
+ virtual Return<void> handleAppsInfo(const hidl_vec<HubAppInfo>& /*appInfo*/)
+ override {
+ ALOGD("Got app info callback");
+ return Void();
+ }
+};
+
+// Wait for a callback to occur (signaled by the given future) up to the
+// provided timeout. If the future is invalid or the callback does not come
+// within the given time, returns false.
+template<class ReturnType>
+bool waitForCallback(
+ std::future<ReturnType> future,
+ ReturnType *result,
+ std::chrono::milliseconds timeout = std::chrono::seconds(5)) {
+ auto expiration = std::chrono::system_clock::now() + timeout;
+
+ EXPECT_NE(result, nullptr);
+ EXPECT_TRUE(future.valid());
+ if (result != nullptr && future.valid()) {
+ std::future_status status = future.wait_until(expiration);
+ EXPECT_NE(status, std::future_status::timeout)
+ << "Timed out waiting for callback";
+
+ if (status == std::future_status::ready) {
+ *result = future.get();
+ return true;
+ }
+ }
+
+ return false;
+}
+
+// Ensures that the metadata reported in getHubs() is sane
+TEST_F(ContexthubHidlTestBase, TestGetHubs) {
+ hidl_vec<ContextHub> hubs = getHubsSync(hubApi);
+ ALOGD("System reports %zu hubs", hubs.size());
+
+ for (ContextHub hub : hubs) {
+ ALOGD("Checking hub ID %" PRIu32, hub.hubId);
+
+ EXPECT_FALSE(hub.name.empty());
+ EXPECT_FALSE(hub.vendor.empty());
+ EXPECT_FALSE(hub.toolchain.empty());
+ EXPECT_GT(hub.peakMips, 0);
+ EXPECT_GE(hub.stoppedPowerDrawMw, 0);
+ EXPECT_GE(hub.sleepPowerDrawMw, 0);
+ EXPECT_GT(hub.peakPowerDrawMw, 0);
+
+ // Minimum 128 byte MTU as required by CHRE API v1.0
+ EXPECT_GE(hub.maxSupportedMsgLen, UINT32_C(128));
+ }
+}
+
+TEST_P(ContexthubHidlTest, TestRegisterCallback) {
+ ALOGD("TestRegisterCallback called, hubId %" PRIu32, getHubId());
+ ASSERT_OK(registerCallback(new ContexthubCallbackBase()));
+}
+
+TEST_P(ContexthubHidlTest, TestRegisterNullCallback) {
+ ALOGD("TestRegisterNullCallback called, hubId %" PRIu32, getHubId());
+ ASSERT_OK(registerCallback(nullptr));
+}
+
+// Helper callback that puts the async appInfo callback data into a promise
+class QueryAppsCallback : public ContexthubCallbackBase {
+ public:
+ virtual Return<void> handleAppsInfo(const hidl_vec<HubAppInfo>& appInfo)
+ override {
+ ALOGD("Got app info callback with %zu apps", appInfo.size());
+ promise.set_value(appInfo);
+ return Void();
+ }
+
+ std::promise<hidl_vec<HubAppInfo>> promise;
+};
+
+// Calls queryApps() and checks the returned metadata
+TEST_P(ContexthubHidlTest, TestQueryApps) {
+ ALOGD("TestQueryApps called, hubId %u", getHubId());
+ sp<QueryAppsCallback> cb = new QueryAppsCallback();
+ ASSERT_OK(registerCallback(cb));
+
+ Result result = hubApi->queryApps(getHubId());
+ ASSERT_OK(result);
+
+ ALOGD("Waiting for app info callback");
+ hidl_vec<HubAppInfo> appList;
+ ASSERT_TRUE(waitForCallback(cb->promise.get_future(), &appList));
+ for (const HubAppInfo &appInfo : appList) {
+ EXPECT_NE(appInfo.appId, UINT64_C(0));
+ EXPECT_NE(appInfo.appId, kNonExistentAppId);
+ }
+}
+
+// Helper callback that puts the TransactionResult for the expectedTxnId into a
+// promise
+class TxnResultCallback : public ContexthubCallbackBase {
+ public:
+ virtual Return<void> handleTxnResult(
+ uint32_t txnId, TransactionResult result) override {
+ ALOGD("Got transaction result callback for txnId %" PRIu32 " (expecting %"
+ PRIu32 ") with result %" PRId32, txnId, expectedTxnId, result);
+ if (txnId == expectedTxnId) {
+ promise.set_value(result);
+ }
+ return Void();
+ }
+
+ uint32_t expectedTxnId = 0;
+ std::promise<TransactionResult> promise;
+};
+
+// Parameterized fixture that sets the callback to TxnResultCallback
+class ContexthubTxnTest : public ContexthubHidlTest {
+ public:
+ virtual void SetUp() override {
+ ContexthubHidlTest::SetUp();
+ ASSERT_OK(registerCallback(cb));
+ }
+
+ sp<TxnResultCallback> cb = new TxnResultCallback();
+};
+
+
+// Checks cases where the hub implementation is expected to return an error, but
+// that error can be returned either synchronously or in the asynchronous
+// transaction callback. Returns an AssertionResult that can be used in
+// ASSERT/EXPECT_TRUE. Allows checking the sync result against 1 additional
+// allowed error code apart from OK and TRANSACTION_FAILED, which are always
+// allowed.
+::testing::AssertionResult checkFailureSyncOrAsync(
+ Result result, Result allowedSyncResult,
+ std::future<TransactionResult>&& future) {
+ if (result == Result::OK) {
+ // No error reported synchronously - this is OK, but then we should get an
+ // async callback with a failure status
+ TransactionResult asyncResult;
+ if (!waitForCallback(std::forward<std::future<TransactionResult>>(future),
+ &asyncResult)) {
+ return ::testing::AssertionFailure()
+ << "Got successful sync result, then failed to receive async cb";
+ } else if (asyncResult == TransactionResult::SUCCESS) {
+ return ::testing::AssertionFailure()
+ << "Got successful sync result, then unexpected successful async "
+ "result";
+ }
+ } else if (result != allowedSyncResult &&
+ result != Result::TRANSACTION_FAILED) {
+ return ::testing::AssertionFailure() << "Got sync result "
+ << asBaseType(result) << ", expected TRANSACTION_FAILED or "
+ << asBaseType(allowedSyncResult);
+ }
+
+ return ::testing::AssertionSuccess();
+}
+
+TEST_P(ContexthubTxnTest, TestSendMessageToNonExistentNanoApp) {
+ ContextHubMsg msg;
+ msg.appName = kNonExistentAppId;
+ msg.msgType = 1;
+ msg.msg.resize(4);
+ std::fill(msg.msg.begin(), msg.msg.end(), 0);
+
+ ALOGD("Sending message to non-existent nanoapp");
+ Result result = hubApi->sendMessageToHub(getHubId(), msg);
+ if (result != Result::OK &&
+ result != Result::BAD_PARAMS &&
+ result != Result::TRANSACTION_FAILED) {
+ FAIL() << "Got result " << asBaseType(result) << ", expected OK, BAD_PARAMS"
+ << ", or TRANSACTION_FAILED";
+ }
+}
+
+TEST_P(ContexthubTxnTest, TestLoadEmptyNanoApp) {
+ cb->expectedTxnId = 0123;
+ NanoAppBinary emptyApp;
+
+ emptyApp.appId = kNonExistentAppId;
+ emptyApp.appVersion = 1;
+ emptyApp.flags = 0;
+ emptyApp.targetChreApiMajorVersion = 1;
+ emptyApp.targetChreApiMinorVersion = 0;
+
+ ALOGD("Loading empty nanoapp");
+ Result result = hubApi->loadNanoApp(getHubId(), emptyApp, cb->expectedTxnId);
+ EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+ cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestUnloadNonexistentNanoApp) {
+ cb->expectedTxnId = 1234;
+
+ ALOGD("Unloading nonexistent nanoapp");
+ Result result = hubApi->unloadNanoApp(getHubId(), kNonExistentAppId,
+ cb->expectedTxnId);
+ EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+ cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestEnableNonexistentNanoApp) {
+ cb->expectedTxnId = 2345;
+
+ ALOGD("Enabling nonexistent nanoapp");
+ Result result = hubApi->enableNanoApp(getHubId(), kNonExistentAppId,
+ cb->expectedTxnId);
+ EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+ cb->promise.get_future()));
+}
+
+TEST_P(ContexthubTxnTest, TestDisableNonexistentNanoApp) {
+ cb->expectedTxnId = 3456;
+
+ ALOGD("Disabling nonexistent nanoapp");
+ Result result = hubApi->disableNanoApp(getHubId(), kNonExistentAppId,
+ cb->expectedTxnId);
+ EXPECT_TRUE(checkFailureSyncOrAsync(result, Result::BAD_PARAMS,
+ cb->promise.get_future()));
+}
+
+// Parameterize all SingleContexthubTest tests against each valid hub ID
+INSTANTIATE_TEST_CASE_P(HubIdSpecificTests, ContexthubHidlTest,
+ ::testing::ValuesIn(getHubIds()));
+INSTANTIATE_TEST_CASE_P(HubIdSpecificTests, ContexthubTxnTest,
+ ::testing::ValuesIn(getHubIds()));
+
+} // anonymous namespace
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+
diff --git a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk
new file mode 100644
index 0000000..a46a0e6
--- /dev/null
+++ b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := ContexthubHidlTargetTest
+VTS_CONFIG_SRC_DIR := testcases/hal/contexthub/hidl/target
+include test/vts/tools/build/Android.host_config.mk
diff --git a/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/AndroidTest.xml b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/AndroidTest.xml
new file mode 100644
index 0000000..a314d1b
--- /dev/null
+++ b/contexthub/1.0/vts/functional/vts/testcases/hal/contexthub/hidl/target/AndroidTest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Context Hub HIDL HAL's target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="ContexthubHidlTargetTest" />
+ <option name="binary-test-sources" value="
+ _32bit::DATA/nativetest/contexthub_hidl_hal_test/contexthub_hidl_hal_test,
+ _64bit::DATA/nativetest64/contexthub_hidl_hal_test/contexthub_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="binary-test-disable-framework" value="true" />
+ <option name="test-timeout" value="10m" />
+ </test>
+</configuration>
+
diff --git a/contexthub/1.0/vts/types.vts b/contexthub/1.0/vts/types.vts
new file mode 100644
index 0000000..12576b1
--- /dev/null
+++ b/contexthub/1.0/vts/types.vts
@@ -0,0 +1,475 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "types"
+
+package: "android.hardware.contexthub"
+
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::Result"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "OK"
+ scalar_value: {
+ uint32_t: 0
+ }
+ enumerator: "UNKNOWN_FAILURE"
+ scalar_value: {
+ uint32_t: 1
+ }
+ enumerator: "BAD_PARAMS"
+ scalar_value: {
+ uint32_t: 2
+ }
+ enumerator: "NOT_INIT"
+ scalar_value: {
+ uint32_t: 3
+ }
+ enumerator: "TRANSACTION_FAILED"
+ scalar_value: {
+ uint32_t: 4
+ }
+ enumerator: "TRANSACTION_PENDING"
+ scalar_value: {
+ uint32_t: 5
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "SIGNED"
+ scalar_value: {
+ uint32_t: 1
+ }
+ enumerator: "ENCRYPTED"
+ scalar_value: {
+ uint32_t: 2
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::NanoAppBinary"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "appId"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "appVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "flags"
+ type: TYPE_MASK
+ predefined_type: "::android::hardware::contexthub::V1_0::NanoAppFlags"
+ }
+ struct_value: {
+ name: "targetChreApiMajorVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ struct_value: {
+ name: "targetChreApiMinorVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ struct_value: {
+ name: "customBinary"
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::SensorType"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "RESERVED"
+ scalar_value: {
+ uint32_t: 0
+ }
+ enumerator: "ACCELEROMETER"
+ scalar_value: {
+ uint32_t: 1
+ }
+ enumerator: "GYROSCOPE"
+ scalar_value: {
+ uint32_t: 2
+ }
+ enumerator: "MAGNETOMETER"
+ scalar_value: {
+ uint32_t: 3
+ }
+ enumerator: "BAROMETER"
+ scalar_value: {
+ uint32_t: 4
+ }
+ enumerator: "PROXIMITY_SENSOR"
+ scalar_value: {
+ uint32_t: 5
+ }
+ enumerator: "AMBIENT_LIGHT_SENSOR"
+ scalar_value: {
+ uint32_t: 6
+ }
+ enumerator: "STATIONARY_DETECT"
+ scalar_value: {
+ uint32_t: 7
+ }
+ enumerator: "INSTANT_MOTION_DETECT"
+ scalar_value: {
+ uint32_t: 8
+ }
+ enumerator: "GPS"
+ scalar_value: {
+ uint32_t: 256
+ }
+ enumerator: "WIFI"
+ scalar_value: {
+ uint32_t: 512
+ }
+ enumerator: "AUDIO"
+ scalar_value: {
+ uint32_t: 768
+ }
+ enumerator: "CAMERA"
+ scalar_value: {
+ uint32_t: 1024
+ }
+ enumerator: "BLE"
+ scalar_value: {
+ uint32_t: 1280
+ }
+ enumerator: "WWAN"
+ scalar_value: {
+ uint32_t: 1536
+ }
+ enumerator: "PRIVATE_SENSOR_BASE"
+ scalar_value: {
+ uint32_t: 65536
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "sensorType"
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::SensorType"
+ }
+ struct_value: {
+ name: "type"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "name"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "vendor"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "version"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "fifoReservedCount"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "fifoMaxCount"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "minDelayMs"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "maxDelayMs"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "peakPowerMw"
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::ContextHub"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "name"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "vendor"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "toolchain"
+ type: TYPE_STRING
+ }
+ struct_value: {
+ name: "platformVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "toolchainVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "hubId"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "peakMips"
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+ struct_value: {
+ name: "stoppedPowerDrawMw"
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+ struct_value: {
+ name: "sleepPowerDrawMw"
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+ struct_value: {
+ name: "peakPowerDrawMw"
+ type: TYPE_SCALAR
+ scalar_type: "float_t"
+ }
+ struct_value: {
+ name: "connectedSensors"
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::PhysicalSensor"
+ }
+ }
+ struct_value: {
+ name: "maxSupportedMsgLen"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "chrePlatformId"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "chreApiMajorVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ struct_value: {
+ name: "chreApiMinorVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ struct_value: {
+ name: "chrePatchVersion"
+ type: TYPE_SCALAR
+ scalar_type: "uint16_t"
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::HostEndPoint"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint16_t"
+
+ enumerator: "BROADCAST"
+ scalar_value: {
+ uint16_t: 65535
+ }
+ enumerator: "UNSPECIFIED"
+ scalar_value: {
+ uint16_t: 65534
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::ContextHubMsg"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "appName"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "hostEndPoint"
+ type: TYPE_SCALAR
+ scalar_type: "uint16_t"
+ }
+ struct_value: {
+ name: "msgType"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "msg"
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::HubMemoryType"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "MAIN"
+ scalar_value: {
+ uint32_t: 0
+ }
+ enumerator: "SECONDARY"
+ scalar_value: {
+ uint32_t: 1
+ }
+ enumerator: "TCM"
+ scalar_value: {
+ uint32_t: 2
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "READ"
+ scalar_value: {
+ uint32_t: 1
+ }
+ enumerator: "WRITE"
+ scalar_value: {
+ uint32_t: 2
+ }
+ enumerator: "EXEC"
+ scalar_value: {
+ uint32_t: 4
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::MemRange"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "totalBytes"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "freeBytes"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "type"
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryType"
+ }
+ struct_value: {
+ name: "flags"
+ type: TYPE_MASK
+ predefined_type: "::android::hardware::contexthub::V1_0::HubMemoryFlag"
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::AsyncEventType"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "uint32_t"
+
+ enumerator: "RESTARTED"
+ scalar_value: {
+ uint32_t: 1
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::TransactionResult"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "int32_t"
+
+ enumerator: "SUCCESS"
+ scalar_value: {
+ int32_t: 0
+ }
+ enumerator: "FAILURE"
+ scalar_value: {
+ int32_t: 1
+ }
+ }
+}
+
+attribute: {
+ name: "::android::hardware::contexthub::V1_0::HubAppInfo"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "appId"
+ type: TYPE_SCALAR
+ scalar_type: "uint64_t"
+ }
+ struct_value: {
+ name: "version"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "memUsage"
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::contexthub::V1_0::MemRange"
+ }
+ }
+ struct_value: {
+ name: "enabled"
+ type: TYPE_SCALAR
+ scalar_type: "bool_t"
+ }
+}
+
diff --git a/contexthub/Android.bp b/contexthub/Android.bp
index ba90f2c..ed19a37 100644
--- a/contexthub/Android.bp
+++ b/contexthub/Android.bp
@@ -2,4 +2,5 @@
subdirs = [
"1.0",
"1.0/default",
+ "1.0/vts/functional",
]
diff --git a/gnss/1.0/IAGnss.hal b/gnss/1.0/IAGnss.hal
index 2cce519..b8f5746 100644
--- a/gnss/1.0/IAGnss.hal
+++ b/gnss/1.0/IAGnss.hal
@@ -22,6 +22,7 @@
* Extended interface for AGNSS support.
*/
interface IAGnss {
+ @export(name="", value_prefix="APN_IP_")
enum ApnIpType : uint8_t {
INVALID = 0,
IPV4 = 1,
diff --git a/gnss/1.0/IAGnssCallback.hal b/gnss/1.0/IAGnssCallback.hal
index 1984725..fe2e101 100644
--- a/gnss/1.0/IAGnssCallback.hal
+++ b/gnss/1.0/IAGnssCallback.hal
@@ -19,11 +19,13 @@
/** Callback structure for the AGNSS interface. */
interface IAGnssCallback {
/** AGNSS type **/
+ @export(name="", value_prefix="AGPS_")
enum AGnssType : uint8_t {
TYPE_SUPL = 1,
TYPE_C2K = 2
};
+ @export(name="", value_prefix="GNSS_")
enum AGnssStatusValue : uint8_t {
/** GNSS requests data connection for AGNSS. */
REQUEST_AGNSS_DATA_CONN = 1,
@@ -40,6 +42,7 @@
/*
* Represents the status of AGNSS augmented to support IPv4.
*/
+ @export(name="", value_prefix="GPS_")
struct AGnssStatusIpV4 {
AGnssType type;
AGnssStatusValue status;
diff --git a/gnss/1.0/IAGnssRil.hal b/gnss/1.0/IAGnssRil.hal
index 499b874..6292273 100644
--- a/gnss/1.0/IAGnssRil.hal
+++ b/gnss/1.0/IAGnssRil.hal
@@ -25,12 +25,14 @@
* location, unique subscriber ID, phone number string and network availability changes.
*/
interface IAGnssRil {
+ @export(name="", value_prefix="AGPS_SETID_TYPE_")
enum SetIDType : uint8_t {
NONE = 0,
IMSI = 1,
MSISDM = 2
};
+ @export(name="", value_prefix="AGPS_RIL_NETWORK_TYPE_")
enum NetworkType : uint8_t {
MOBILE = 0,
WIFI = 1,
@@ -41,6 +43,7 @@
WIMAX = 6,
};
+ @export(name="", value_prefix="AGPS_REF_LOCATION_TYPE_")
enum AGnssRefLocationType : uint8_t {
GSM_CELLID = 1,
UMTS_CELLID = 2,
diff --git a/gnss/1.0/IAGnssRilCallback.hal b/gnss/1.0/IAGnssRilCallback.hal
index ba29bd0..2d64e54 100644
--- a/gnss/1.0/IAGnssRilCallback.hal
+++ b/gnss/1.0/IAGnssRilCallback.hal
@@ -22,6 +22,7 @@
*/
interface IAGnssRilCallback {
/* Kinds of SET ID that can be requested */
+ @export(name="", value_prefix="AGPS_RIL_REQUEST_SETID_")
enum ID : uint32_t {
IMSI = 1 << 0L,
MSISDN = 1 << 1L,
diff --git a/gnss/1.0/IGnss.hal b/gnss/1.0/IGnss.hal
index 24a5371..5cde79e 100644
--- a/gnss/1.0/IGnss.hal
+++ b/gnss/1.0/IGnss.hal
@@ -28,9 +28,10 @@
import IGnssNi;
import IGnssXtra;
-/* Represents the standard GNSS interface. */
+/* Represents the standard GNSS (Global Navigation Satellite System) interface. */
interface IGnss {
/* Requested operational mode for GNSS operation. */
+ @export(name="", value_prefix="GPS_POSITION_MODE_")
enum GnssPositionMode : uint8_t {
/** Mode for running GNSS standalone (no assistance). */
STANDALONE = 0,
@@ -44,6 +45,7 @@
};
/* Requested recurrence mode for GNSS operation. */
+ @export(name="", value_prefix="GPS_POSITION_")
enum GnssPositionRecurrence : uint32_t {
/** Receive GNSS fixes on a recurring basis at a specified period. */
RECURRENCE_PERIODIC = 0,
@@ -55,6 +57,7 @@
* Flags used to specify which aiding data to delete when calling
* deleteAidingData().
*/
+ @export(name="", value_prefix="GPS_")
enum GnssAidingData : uint16_t {
DELETE_EPHEMERIS = 0x0001,
DELETE_ALMANAC = 0x0002,
diff --git a/gnss/1.0/IGnssBatching.hal b/gnss/1.0/IGnssBatching.hal
index 4f0695d..4d5affa 100644
--- a/gnss/1.0/IGnssBatching.hal
+++ b/gnss/1.0/IGnssBatching.hal
@@ -42,6 +42,7 @@
/*
* Enum which holds the bit masks for batching control.
*/
+ @export(name="", value_prefix="FLP_BATCH_")
enum Flag : uint8_t {
/*
* If this flag is set, the hardware implementation
diff --git a/gnss/1.0/IGnssCallback.hal b/gnss/1.0/IGnssCallback.hal
index eb66d78..0c3b9f0 100644
--- a/gnss/1.0/IGnssCallback.hal
+++ b/gnss/1.0/IGnssCallback.hal
@@ -23,6 +23,7 @@
*/
interface IGnssCallback {
/* Flags for the gnssSetCapabilities callback. */
+ @export(name="", value_prefix="GPS_CAPABILITY_")
enum Capabilities : uint32_t {
/*
* GNSS HAL schedules fixes for RECURRENCE_PERIODIC mode.
@@ -47,6 +48,7 @@
};
/* GNSS status event values. */
+ @export(name="", value_prefix="GPS_STATUS_")
enum GnssStatusValue : uint8_t {
/** GNSS status unknown. */
NONE = 0,
@@ -63,6 +65,7 @@
/*
* Flags that indicate information about the satellite
*/
+ @export(name="", value_prefix="GNSS_SV_FLAGS_")
enum GnssSvFlags : uint8_t {
NONE = 0,
HAS_EPHEMERIS_DATA = 1 << 0,
@@ -111,9 +114,16 @@
/*
* Carrier frequency of the signal tracked, for example it can be the
- * GPS L1 = 1.57542e9 Hz, or L2, L5, varying GLO channels, etc. If
- * the field is not set, it is the primary common use frequency,
- * e.g. L1 for GPS.
+ * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 =
+ * 1176.45 MHz, varying GLO channels, etc. If the field is not set, it
+ * is the primary common use central frequency, e.g. L1 = 1575.45 MHz
+ * for GPS.
+ *
+ * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same
+ * time, two GnssSvInfo structs must be reported for this same
+ * satellite, in one of the structs, all the values related
+ * to L1 must be filled, and in the other all of the values related to
+ * L5 must be filled.
*
* If the data is available, gnssClockFlags must contain
* HAS_CARRIER_FREQUENCY.
diff --git a/gnss/1.0/IGnssGeofenceCallback.hal b/gnss/1.0/IGnssGeofenceCallback.hal
index 5c70c5e..722317e 100644
--- a/gnss/1.0/IGnssGeofenceCallback.hal
+++ b/gnss/1.0/IGnssGeofenceCallback.hal
@@ -91,17 +91,20 @@
*/
interface IGnssGeofenceCallback {
+ @export(name="", value_prefix="GPS_GEOFENCE_")
enum GeofenceTransition : int32_t {
ENTERED = (1 << 0L),
EXITED = (1 << 1L),
UNCERTAIN = (1 << 2L),
};
+ @export(name="", value_prefix="GPS_GEOFENCE_")
enum GeofenceAvailability : int32_t {
UNAVAILABLE = (1 << 0L),
AVAILABLE = (1 << 1L),
};
+ @export(name="", value_prefix="GPS_GEOFENCE_")
enum GeofenceStatus : int32_t {
OPERATION_SUCCESS = 0,
ERROR_TOO_MANY_GEOFENCES = -100,
diff --git a/gnss/1.0/IGnssMeasurement.hal b/gnss/1.0/IGnssMeasurement.hal
index 5174273..8329442 100644
--- a/gnss/1.0/IGnssMeasurement.hal
+++ b/gnss/1.0/IGnssMeasurement.hal
@@ -22,6 +22,7 @@
* Extended interface for GNSS Measurements support.
*/
interface IGnssMeasurement {
+ @export(name="", value_prefix="GPS_MEASUREMENT_")
enum GnssMeasurementStatus : int32_t {
SUCCESS = 0,
ERROR_ALREADY_INIT = -100,
diff --git a/gnss/1.0/IGnssMeasurementCallback.hal b/gnss/1.0/IGnssMeasurementCallback.hal
index de640ae..5789621 100644
--- a/gnss/1.0/IGnssMeasurementCallback.hal
+++ b/gnss/1.0/IGnssMeasurementCallback.hal
@@ -21,6 +21,7 @@
/*
* Flags to indicate what fields in GnssClock are valid.
*/
+ @export(name="", value_prefix="GNSS_CLOCK_")
enum GnssClockFlags : uint16_t {
/** A valid 'leap second' is stored in the data structure. */
HAS_LEAP_SECOND = 1 << 0,
@@ -41,6 +42,7 @@
/*
* Flags to indicate what fields in GnssMeasurement are valid.
*/
+ @export(name="", value_prefix="GNSS_MEASUREMENT_")
enum GnssMeasurementFlags : uint32_t {
/** A valid 'snr' is stored in the data structure. */
HAS_SNR = 1 << 0,
@@ -60,6 +62,7 @@
* Enumeration of available values for the GNSS Measurement's multipath
* indicator.
*/
+ @export(name="", value_prefix="GNSS_MULTIPATH_")
enum GnssMultipathIndicator : uint8_t {
/** The indicator is not available or unknown. */
INDICATOR_UNKNOWN = 0,
@@ -82,6 +85,7 @@
* If GNSS is still searching for a satellite, the corresponding state must be
* set to STATE_UNKNOWN(0).
*/
+ @export(name="", value_prefix="GNSS_MEASUREMENT_")
enum GnssMeasurementState : uint32_t {
STATE_UNKNOWN = 0,
STATE_CODE_LOCK = 1 << 0,
@@ -105,6 +109,7 @@
/*
* Flags indicating the Accumulated Delta Range's states.
*/
+ @export(name="", value_prefix="GNSS_")
enum GnssAccumulatedDeltaRangeState : uint16_t {
ADR_STATE_UNKNOWN = 0,
ADR_STATE_VALID = 1 << 0,
@@ -480,9 +485,16 @@
/*
* Carrier frequency of the signal tracked, for example it can be the
- * GPS L1 = 1.57542e9 Hz, or L2, L5, varying GLO channels, etc. If the
- * field is not set, it is the primary common use frequency,
- * e.g. L1 for GPS.
+ * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 =
+ * 1176.45 MHz, varying GLO channels, etc. If the field is not set, it
+ * is the primary common use central frequency, e.g. L1 = 1575.45 MHz
+ * for GPS.
+ *
+ * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same
+ * time, two raw measurement structs must be reported for this same
+ * satellite, in one of the measurement structs, all the values related
+ * to L1 must be filled, and in the other all of the values related to
+ * L5 must be filled.
*
* If the data is available, gnssClockFlags must contain
* HAS_CARRIER_FREQUENCY.
@@ -552,12 +564,12 @@
/*
* Automatic gain control (AGC) level. AGC acts as a variable gain
- * amplifier adjusting the power of the incoming signal to minimize the
- * quantization losses. The AGC level may be used to indicate potential
- * interference. When AGC is at a nominal level, this value
- * must be set as 0. Higher gain (and/or lower input power) must be
- * output as a positive number. Hence in cases of strong jamming, in the
- * band of this signal, this value must go more negative.
+ * amplifier adjusting the power of the incoming signal. The AGC level
+ * may be used to indicate potential interference. When AGC is at a
+ * nominal level, this value must be set as 0. Higher gain (and/or lower
+ * input power) must be output as a positive number. Hence in cases of
+ * strong jamming, in the band of this signal, this value must go more
+ * negative.
*
* Note: Different hardware designs (e.g. antenna, pre-amplification, or
* other RF HW components) may also affect the typical output of of this
diff --git a/gnss/1.0/IGnssNavigationMessage.hal b/gnss/1.0/IGnssNavigationMessage.hal
index 11f2096..ddd9169 100644
--- a/gnss/1.0/IGnssNavigationMessage.hal
+++ b/gnss/1.0/IGnssNavigationMessage.hal
@@ -22,6 +22,7 @@
* Extended interface for GNSS navigation message reporting support.
*/
interface IGnssNavigationMessage {
+ @export(name="", value_prefix="GPS_NAVIGATION_MESSAGE_")
enum GnssNavigationMessageStatus : int32_t {
SUCCESS = 0,
ERROR_ALREADY_INIT = -100,
diff --git a/gnss/1.0/IGnssNavigationMessageCallback.hal b/gnss/1.0/IGnssNavigationMessageCallback.hal
index 0cffa67..2e6b853 100644
--- a/gnss/1.0/IGnssNavigationMessageCallback.hal
+++ b/gnss/1.0/IGnssNavigationMessageCallback.hal
@@ -25,6 +25,7 @@
* For convenience, first byte is the GnssConstellationType on which that signal
* is typically transmitted.
*/
+ @export(name="", value_prefix="GNSS_NAVIGATION_MESSAGE_TYPE_")
enum GnssNavigationMessageType : int16_t {
UNKNOWN = 0,
/** GNSS L1 C/A message contained in the structure. */
@@ -56,6 +57,7 @@
* No need to send any navigation message that contains words with parity error
* and cannot be corrected.
*/
+ @export(name="navigation_message_status", value_prefix="NAV_MESSAGE_STATUS_")
enum NavigationMessageStatus : uint16_t {
PARITY_PASSED = (1 << 0),
PARITY_REBUILT = (1 << 1),
diff --git a/gnss/1.0/IGnssNiCallback.hal b/gnss/1.0/IGnssNiCallback.hal
index a7abad9..c5fb223 100644
--- a/gnss/1.0/IGnssNiCallback.hal
+++ b/gnss/1.0/IGnssNiCallback.hal
@@ -21,6 +21,7 @@
/*
* GnssNiType constants
*/
+ @export(name="", value_prefix="GPS_NI_TYPE_")
enum GnssNiType : uint8_t {
VOICE = 1,
UMTS_SUPL = 2,
@@ -30,6 +31,7 @@
/*
* GnssNiNotifyFlags constants
*/
+ @export(name="", value_prefix="GPS_NI_")
enum GnssNiNotifyFlags : uint32_t {
/** NI requires notification */
NEED_NOTIFY = 0x0001,
@@ -43,6 +45,7 @@
* GNSS NI responses, used to define the response in
* NI structures
*/
+ @export(name="", value_prefix="GPS_NI_")
enum GnssUserResponseType : uint8_t {
RESPONSE_ACCEPT = 1,
RESPONSE_DENY = 2,
@@ -52,6 +55,7 @@
/*
* NI data encoding scheme
*/
+ @export(name="", value_prefix="GPS_")
enum GnssNiEncodingType : int32_t {
ENC_NONE = 0,
ENC_SUPL_GSM_DEFAULT = 1,
diff --git a/gnss/1.0/types.hal b/gnss/1.0/types.hal
index 2721d44..d5e0e9b 100644
--- a/gnss/1.0/types.hal
+++ b/gnss/1.0/types.hal
@@ -16,6 +16,7 @@
package android.hardware.gnss@1.0;
+@export(name="", value_prefix="GNSS_MAX_")
enum GnssMax : uint32_t {
/** Maximum number of SVs for gnssSvStatusCb(). */
SVS_COUNT = 64,
@@ -27,6 +28,8 @@
/*
* Constellation type of GnssSvInfo
*/
+
+@export(name="", value_prefix="GNSS_CONSTELLATION_")
enum GnssConstellationType : uint8_t {
UNKNOWN = 0,
GPS = 1,
@@ -38,6 +41,7 @@
};
/** Bit mask to indicate which values are valid in a GnssLocation object. */
+@export(name="", value_prefix="GPS_LOCATION_")
enum GnssLocationFlags : uint16_t {
/** GnssLocation has valid latitude and longitude. */
HAS_LAT_LONG = 0x0001,
diff --git a/graphics/common/1.0/types.hal b/graphics/common/1.0/types.hal
index ebdba77..6fddfaf 100644
--- a/graphics/common/1.0/types.hal
+++ b/graphics/common/1.0/types.hal
@@ -1264,7 +1264,7 @@
* red 0.680 0.320
* white (D65) 0.3127 0.3290
*
- * Gamma: 2.2
+ * Gamma: 2.6
*/
DCI_P3 = 6,
@@ -1309,7 +1309,27 @@
*
* Gamma: 2.2
*/
- ADOBE_RGB = 8
+ ADOBE_RGB = 8,
+
+ /*
+ * DISPLAY_P3 is a color space that uses the DCI_P3 primaries,
+ * the D65 white point and the SRGB transfer functions.
+ * Rendering Intent: Colorimetric
+ * Primaries:
+ * x y
+ * green 0.265 0.690
+ * blue 0.150 0.060
+ * red 0.680 0.320
+ * white (D65) 0.3127 0.3290
+ *
+ * PC/Internet (sRGB) Gamma Correction (GC):
+ *
+ * if Vlinear ≤ 0.0031308
+ * Vnonlinear = 12.92 * Vlinear
+ * else
+ * Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
+ */
+ DISPLAY_P3 = 9
};
/*
diff --git a/graphics/composer/2.1/default/HwcClient.cpp b/graphics/composer/2.1/default/HwcClient.cpp
index 54dfd89..edd161a 100644
--- a/graphics/composer/2.1/default/HwcClient.cpp
+++ b/graphics/composer/2.1/default/HwcClient.cpp
@@ -514,7 +514,7 @@
if (outDescriptor) {
hidl_cb(Error::NONE, *outDescriptor);
} else {
- hidl_cb(Error::NO_RESOURCES, MQDescriptorSync<uint32_t>());
+ hidl_cb(Error::NO_RESOURCES, CommandQueueType::Descriptor());
}
return Void();
@@ -651,7 +651,7 @@
bool HwcClient::CommandReader::parseSelectDisplay(uint16_t length)
{
- if (length != CommandWriter::kSelectDisplayLength) {
+ if (length != CommandWriterBase::kSelectDisplayLength) {
return false;
}
@@ -663,7 +663,7 @@
bool HwcClient::CommandReader::parseSelectLayer(uint16_t length)
{
- if (length != CommandWriter::kSelectLayerLength) {
+ if (length != CommandWriterBase::kSelectLayerLength) {
return false;
}
@@ -674,7 +674,7 @@
bool HwcClient::CommandReader::parseSetColorTransform(uint16_t length)
{
- if (length != CommandWriter::kSetColorTransformLength) {
+ if (length != CommandWriterBase::kSetColorTransformLength) {
return false;
}
@@ -722,7 +722,7 @@
bool HwcClient::CommandReader::parseSetOutputBuffer(uint16_t length)
{
- if (length != CommandWriter::kSetOutputBufferLength) {
+ if (length != CommandWriterBase::kSetOutputBufferLength) {
return false;
}
@@ -746,7 +746,7 @@
bool HwcClient::CommandReader::parseValidateDisplay(uint16_t length)
{
- if (length != CommandWriter::kValidateDisplayLength) {
+ if (length != CommandWriterBase::kValidateDisplayLength) {
return false;
}
@@ -773,7 +773,7 @@
bool HwcClient::CommandReader::parseAcceptDisplayChanges(uint16_t length)
{
- if (length != CommandWriter::kAcceptDisplayChangesLength) {
+ if (length != CommandWriterBase::kAcceptDisplayChangesLength) {
return false;
}
@@ -787,7 +787,7 @@
bool HwcClient::CommandReader::parsePresentDisplay(uint16_t length)
{
- if (length != CommandWriter::kPresentDisplayLength) {
+ if (length != CommandWriterBase::kPresentDisplayLength) {
return false;
}
@@ -807,7 +807,7 @@
bool HwcClient::CommandReader::parseSetLayerCursorPosition(uint16_t length)
{
- if (length != CommandWriter::kSetLayerCursorPositionLength) {
+ if (length != CommandWriterBase::kSetLayerCursorPositionLength) {
return false;
}
@@ -822,7 +822,7 @@
bool HwcClient::CommandReader::parseSetLayerBuffer(uint16_t length)
{
- if (length != CommandWriter::kSetLayerBufferLength) {
+ if (length != CommandWriterBase::kSetLayerBufferLength) {
return false;
}
@@ -862,7 +862,7 @@
bool HwcClient::CommandReader::parseSetLayerBlendMode(uint16_t length)
{
- if (length != CommandWriter::kSetLayerBlendModeLength) {
+ if (length != CommandWriterBase::kSetLayerBlendModeLength) {
return false;
}
@@ -876,7 +876,7 @@
bool HwcClient::CommandReader::parseSetLayerColor(uint16_t length)
{
- if (length != CommandWriter::kSetLayerColorLength) {
+ if (length != CommandWriterBase::kSetLayerColorLength) {
return false;
}
@@ -890,7 +890,7 @@
bool HwcClient::CommandReader::parseSetLayerCompositionType(uint16_t length)
{
- if (length != CommandWriter::kSetLayerCompositionTypeLength) {
+ if (length != CommandWriterBase::kSetLayerCompositionTypeLength) {
return false;
}
@@ -904,7 +904,7 @@
bool HwcClient::CommandReader::parseSetLayerDataspace(uint16_t length)
{
- if (length != CommandWriter::kSetLayerDataspaceLength) {
+ if (length != CommandWriterBase::kSetLayerDataspaceLength) {
return false;
}
@@ -918,7 +918,7 @@
bool HwcClient::CommandReader::parseSetLayerDisplayFrame(uint16_t length)
{
- if (length != CommandWriter::kSetLayerDisplayFrameLength) {
+ if (length != CommandWriterBase::kSetLayerDisplayFrameLength) {
return false;
}
@@ -932,7 +932,7 @@
bool HwcClient::CommandReader::parseSetLayerPlaneAlpha(uint16_t length)
{
- if (length != CommandWriter::kSetLayerPlaneAlphaLength) {
+ if (length != CommandWriterBase::kSetLayerPlaneAlphaLength) {
return false;
}
@@ -946,7 +946,7 @@
bool HwcClient::CommandReader::parseSetLayerSidebandStream(uint16_t length)
{
- if (length != CommandWriter::kSetLayerSidebandStreamLength) {
+ if (length != CommandWriterBase::kSetLayerSidebandStreamLength) {
return false;
}
@@ -965,7 +965,7 @@
bool HwcClient::CommandReader::parseSetLayerSourceCrop(uint16_t length)
{
- if (length != CommandWriter::kSetLayerSourceCropLength) {
+ if (length != CommandWriterBase::kSetLayerSourceCropLength) {
return false;
}
@@ -979,7 +979,7 @@
bool HwcClient::CommandReader::parseSetLayerTransform(uint16_t length)
{
- if (length != CommandWriter::kSetLayerTransformLength) {
+ if (length != CommandWriterBase::kSetLayerTransformLength) {
return false;
}
@@ -1009,7 +1009,7 @@
bool HwcClient::CommandReader::parseSetLayerZOrder(uint16_t length)
{
- if (length != CommandWriter::kSetLayerZOrderLength) {
+ if (length != CommandWriterBase::kSetLayerZOrderLength) {
return false;
}
diff --git a/graphics/composer/2.1/default/HwcClient.h b/graphics/composer/2.1/default/HwcClient.h
index c719774..35a0450 100644
--- a/graphics/composer/2.1/default/HwcClient.h
+++ b/graphics/composer/2.1/default/HwcClient.h
@@ -171,7 +171,7 @@
HwcClient& mClient;
HwcHal& mHal;
- CommandWriter& mWriter;
+ CommandWriterBase& mWriter;
Display mDisplay;
Layer mLayer;
@@ -184,7 +184,7 @@
64 * 1024 / sizeof(uint32_t) - 16;
std::mutex mCommandMutex;
CommandReader mReader;
- CommandWriter mWriter;
+ CommandWriterBase mWriter;
sp<IComposerCallback> mCallback;
diff --git a/graphics/composer/2.1/default/IComposerCommandBuffer.h b/graphics/composer/2.1/default/IComposerCommandBuffer.h
index 65e7799..fb78ef8 100644
--- a/graphics/composer/2.1/default/IComposerCommandBuffer.h
+++ b/graphics/composer/2.1/default/IComposerCommandBuffer.h
@@ -52,16 +52,16 @@
// This class helps build a command queue. Note that all sizes/lengths are in
// units of uint32_t's.
-class CommandWriter {
+class CommandWriterBase {
public:
- CommandWriter(uint32_t initialMaxSize)
+ CommandWriterBase(uint32_t initialMaxSize)
: mDataMaxSize(initialMaxSize)
{
mData = std::make_unique<uint32_t[]>(mDataMaxSize);
reset();
}
- ~CommandWriter()
+ virtual ~CommandWriterBase()
{
reset();
}
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index 3a8fceb..fb9f070 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -54,3 +54,106 @@
"android.hidl.base@1.0",
],
}
+
+genrule {
+ name: "android.hardware.ir.vts.driver@1.0_genc++",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "types.hal",
+ "IConsumerIr.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/types.vts.cpp",
+ "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir.vts.driver@1.0_genc++_headers",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "types.hal",
+ "IConsumerIr.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/types.vts.h",
+ "android/hardware/ir/1.0/ConsumerIr.vts.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.ir.vts.driver@1.0",
+ generated_sources: ["android.hardware.ir.vts.driver@1.0_genc++"],
+ generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
+ export_generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libvts_common",
+ "libvts_datatype",
+ "libvts_measurement",
+ "libvts_multidevice_proto",
+ "libcamera_metadata",
+ "libprotobuf-cpp-full",
+ "android.hidl.base@1.0",
+ "android.hardware.ir@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hidl.base@1.0",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "IConsumerIr.hal",
+ "types.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
+ "android/hardware/ir/1.0/types.vts.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "IConsumerIr.hal",
+ "types.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/ConsumerIr.vts.h",
+ "android/hardware/ir/1.0/types.vts.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler",
+ generated_sources: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++"],
+ generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
+ export_generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
+ shared_libs: [
+ "libbase",
+ "libhidlbase",
+ "libhidltransport",
+ "libvts_profiling",
+ "libvts_multidevice_proto",
+ "libprotobuf-cpp-full",
+ "android.hidl.base@1.0",
+ "android.hardware.ir@1.0",
+ ],
+}
diff --git a/ir/1.0/vts/Android.mk b/ir/1.0/vts/Android.mk
new file mode 100644
index 0000000..90c50c8
--- /dev/null
+++ b/ir/1.0/vts/Android.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(LOCAL_PATH)/functional/vts/testcases/hal/ir/hidl/target/Android.mk
diff --git a/ir/1.0/vts/ConsumerIr.vts b/ir/1.0/vts/ConsumerIr.vts
new file mode 100644
index 0000000..bebc6cf
--- /dev/null
+++ b/ir/1.0/vts/ConsumerIr.vts
@@ -0,0 +1,44 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IConsumerIr"
+
+package: "android.hardware.ir"
+
+import: "android.hardware.ir@1.0::types"
+
+interface: {
+ api: {
+ name: "transmit"
+ return_type_hidl: {
+ type: TYPE_SCALAR
+ scalar_type: "bool_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "int32_t"
+ }
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "int32_t"
+ }
+ }
+ }
+
+ api: {
+ name: "getCarrierFreqs"
+ return_type_hidl: {
+ type: TYPE_SCALAR
+ scalar_type: "bool_t"
+ }
+ return_type_hidl: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
+ }
+ }
+ }
+
+}
diff --git a/ir/1.0/vts/functional/Android.bp b/ir/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..c5265de
--- /dev/null
+++ b/ir/1.0/vts/functional/Android.bp
@@ -0,0 +1,40 @@
+//
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_test {
+ name: "ir_hidl_hal_test",
+ gtest: true,
+ srcs: ["ir_hidl_hal_test.cpp"],
+ shared_libs: [
+ "libbase",
+ "liblog",
+ "libcutils",
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hardware.ir@1.0",
+ ],
+ static_libs: ["libgtest"],
+ cflags: [
+ "--coverage",
+ "-O0",
+ "-g",
+ ],
+ ldflags: [
+ "--coverage"
+ ]
+}
diff --git a/ir/1.0/vts/functional/ir_hidl_hal_test.cpp b/ir/1.0/vts/functional/ir_hidl_hal_test.cpp
new file mode 100644
index 0000000..08c7974
--- /dev/null
+++ b/ir/1.0/vts/functional/ir_hidl_hal_test.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ir_hidl_hal_test"
+
+#include <android-base/logging.h>
+
+#include <android/hardware/ir/1.0/IConsumerIr.h>
+#include <android/hardware/ir/1.0/types.h>
+
+#include <gtest/gtest.h>
+#include <algorithm>
+
+using ::android::hardware::ir::V1_0::IConsumerIr;
+using ::android::hardware::ir::V1_0::ConsumerIrFreqRange;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::sp;
+
+// The main test class for IR HIDL HAL.
+class ConsumerIrHidlTest : public ::testing::Test {
+ public:
+ virtual void SetUp() override {
+ ir = IConsumerIr::getService();
+ ASSERT_NE(ir, nullptr);
+ }
+
+ virtual void TearDown() override {}
+
+ sp<IConsumerIr> ir;
+};
+
+// Test transmit() for the min and max frequency of every available range
+TEST_F(ConsumerIrHidlTest, TransmitTest) {
+ int32_t freqs;
+ bool success;
+ hidl_vec<ConsumerIrFreqRange> ranges;
+ auto cb = [&](bool s, hidl_vec<ConsumerIrFreqRange> v) {
+ ranges = v;
+ success = s;
+ };
+ Return<void> ret = ir->getCarrierFreqs(cb);
+ ASSERT_TRUE(ret.isOk());
+ ASSERT_TRUE(success);
+
+ if (ranges.size() > 0) {
+ uint32_t len = 16;
+ hidl_vec<int32_t> vec;
+ vec.resize(len);
+ std::fill(vec.begin(), vec.end(), 1);
+ for (auto range = ranges.begin(); range != ranges.end(); range++) {
+ EXPECT_TRUE(ir->transmit(range->min, vec));
+ EXPECT_TRUE(ir->transmit(range->max, vec));
+ }
+ }
+}
+
+// Test transmit() when called with invalid frequencies
+TEST_F(ConsumerIrHidlTest, BadFreqTest) {
+ uint32_t len = 16;
+ hidl_vec<int32_t> vec;
+ vec.resize(len);
+ std::fill(vec.begin(), vec.end(), 1);
+ EXPECT_FALSE(ir->transmit(-1, vec));
+ EXPECT_FALSE(ir->transmit(0, vec));
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ LOG(INFO) << "Test result = " << status;
+ return status;
+}
diff --git a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk
new file mode 100644
index 0000000..a69fd08
--- /dev/null
+++ b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := HalIrHidlTargetTest
+VTS_CONFIG_SRC_DIR := testcases/hal/ir/hidl/target
+include test/vts/tools/build/Android.host_config.mk
diff --git a/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml
new file mode 100644
index 0000000..bf3d236
--- /dev/null
+++ b/ir/1.0/vts/functional/vts/testcases/hal/ir/hidl/target/AndroidTest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS IR HIDL HAL's target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="HalIrHidlTargetTest"/>
+ <option name="binary-test-sources" value="
+ _32bit::DATA/nativetest/ir_hidl_hal_test/ir_hidl_hal_test,
+ _64bit::DATA/nativetest64/ir_hidl_hal_test/ir_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="hal_hidl_gtest" />
+ <option name="precondition-hwbinder-service" value="android.hardware.ir" />
+ <option name="test-timeout" value="1m" />
+ </test>
+</configuration>
diff --git a/ir/1.0/vts/types.vts b/ir/1.0/vts/types.vts
new file mode 100644
index 0000000..d308b1f
--- /dev/null
+++ b/ir/1.0/vts/types.vts
@@ -0,0 +1,21 @@
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "types"
+
+package: "android.hardware.ir"
+
+
+attribute: {
+ name: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "min"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "max"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+}
\ No newline at end of file
diff --git a/ir/Android.bp b/ir/Android.bp
index ba90f2c..ed19a37 100644
--- a/ir/Android.bp
+++ b/ir/Android.bp
@@ -2,4 +2,5 @@
subdirs = [
"1.0",
"1.0/default",
+ "1.0/vts/functional",
]
diff --git a/ir/Android.mk b/ir/Android.mk
new file mode 100644
index 0000000..f9e3276
--- /dev/null
+++ b/ir/Android.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-subdir-makefiles)
diff --git a/keymaster/3.0/IKeymasterDevice.hal b/keymaster/3.0/IKeymasterDevice.hal
index 19669c8..50a41ec 100644
--- a/keymaster/3.0/IKeymasterDevice.hal
+++ b/keymaster/3.0/IKeymasterDevice.hal
@@ -209,6 +209,21 @@
deleteAllKeys() generates(ErrorCode error);
/**
+ * Destroys knowledge of the device's ids. This prevents all device id attestation in the
+ * future. The destruction must be permanent so that not even a factory reset will restore the
+ * device ids.
+ *
+ * Device id attestation may be provided only if this method is fully implemented, allowing the
+ * user to permanently disable device id attestation. If this cannot be guaranteed, the device
+ * must never attest any device ids.
+ *
+ * This is a NOP if device id attestation is not supported.
+ *
+ * @return error See the ErrorCode enum.
+ */
+ destroyAttestationIds() generates(ErrorCode error);
+
+ /**
* Begins a cryptographic operation using the specified key. If all is well, begin() will return
* ErrorCode::OK and create an operation handle which must be passed to subsequent calls to
* update(), finish() or abort().
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index 1208b8d..563ff84 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -516,6 +516,24 @@
hidl_vec<hidl_vec<uint8_t>> resultCertChain;
+ for (size_t i = 0; i < attestParams.size(); ++i) {
+ switch (attestParams[i].tag) {
+ case Tag::ATTESTATION_ID_BRAND:
+ case Tag::ATTESTATION_ID_DEVICE:
+ case Tag::ATTESTATION_ID_PRODUCT:
+ case Tag::ATTESTATION_ID_SERIAL:
+ case Tag::ATTESTATION_ID_IMEI:
+ case Tag::ATTESTATION_ID_MEID:
+ // Device id attestation may only be supported if the device is able to permanently
+ // destroy its knowledge of the ids. This device is unable to do this, so it must
+ // never perform any device id attestation.
+ _hidl_cb(ErrorCode::CANNOT_ATTEST_IDS, resultCertChain);
+ return Void();
+ default:
+ break;
+ }
+ }
+
keymaster_cert_chain_t cert_chain{nullptr, 0};
auto kmKeyToAttest = hidlVec2KmKeyBlob(keyToAttest);
@@ -569,9 +587,16 @@
}
Return<ErrorCode> KeymasterDevice::deleteAllKeys() {
+ if (keymaster_device_->delete_all_keys == nullptr) {
+ return ErrorCode::UNIMPLEMENTED;
+ }
return legacy_enum_conversion(keymaster_device_->delete_all_keys(keymaster_device_));
}
+Return<ErrorCode> KeymasterDevice::destroyAttestationIds() {
+ return ErrorCode::UNIMPLEMENTED;
+}
+
Return<void> KeymasterDevice::begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) {
diff --git a/keymaster/3.0/default/KeymasterDevice.h b/keymaster/3.0/default/KeymasterDevice.h
index 23767ef..382f45f 100644
--- a/keymaster/3.0/default/KeymasterDevice.h
+++ b/keymaster/3.0/default/KeymasterDevice.h
@@ -71,6 +71,7 @@
upgradeKey_cb _hidl_cb) override;
Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
Return<ErrorCode> deleteAllKeys() override;
+ Return<ErrorCode> destroyAttestationIds() override;
Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) override;
Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
diff --git a/keymaster/3.0/types.hal b/keymaster/3.0/types.hal
index e99e9c8..9f29b6a 100644
--- a/keymaster/3.0/types.hal
+++ b/keymaster/3.0/types.hal
@@ -123,6 +123,19 @@
ATTESTATION_APPLICATION_ID = TagType:BYTES | 709, /* Used to identify the set of possible
* applications of which one has initiated a
* key attestation */
+ ATTESTATION_ID_BRAND = TagType:BYTES | 710, /* Used to provide the device's brand name to be
+ included in attestation */
+ ATTESTATION_ID_DEVICE = TagType:BYTES | 711, /* Used to provide the device's device name to be
+ included in attestation */
+ ATTESTATION_ID_PRODUCT = TagType:BYTES | 712, /* Used to provide the device's product name to be
+ included in attestation */
+ ATTESTATION_ID_SERIAL = TagType:BYTES | 713, /* Used to provide the device's serial number to be
+ included in attestation */
+ ATTESTATION_ID_IMEI = TagType:BYTES | 714, /* Used to provide the device's IMEI to be included
+ in attestation */
+ ATTESTATION_ID_MEID = TagType:BYTES | 715, /* Used to provide the device's MEID to be included
+ in attestation */
+
/* Tags used only to provide data to or receive data from operations */
ASSOCIATED_DATA = TagType:BYTES | 1000, /* Used to provide associated data for AEAD modes. */
@@ -241,6 +254,7 @@
SIGN = 2, /* Usable with RSA, EC and HMAC keys. */
VERIFY = 3, /* Usable with RSA, EC and HMAC keys. */
DERIVE_KEY = 4, /* Usable with EC keys. */
+ WRAP_KEY = 5, /* Usable with wrapping keys. */
};
/**
@@ -311,6 +325,7 @@
ATTESTATION_CHALLENGE_MISSING = -63,
KEYMASTER_NOT_CONFIGURED = -64,
ATTESTATION_APPLICATION_ID_MISSING = -65,
+ CANNOT_ATTEST_IDS = -66,
UNIMPLEMENTED = -100,
VERSION_MISMATCH = -101,
diff --git a/light/2.0/default/service.cpp b/light/2.0/default/service.cpp
index b3848e9..70ae565 100644
--- a/light/2.0/default/service.cpp
+++ b/light/2.0/default/service.cpp
@@ -23,5 +23,5 @@
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
- return defaultPassthroughServiceImplementation<ILight>("light");
+ return defaultPassthroughServiceImplementation<ILight>();
}
diff --git a/light/2.0/vts/functional/light_hidl_hal_test.cpp b/light/2.0/vts/functional/light_hidl_hal_test.cpp
index 9b9f543..71a8b4e 100644
--- a/light/2.0/vts/functional/light_hidl_hal_test.cpp
+++ b/light/2.0/vts/functional/light_hidl_hal_test.cpp
@@ -34,15 +34,13 @@
using ::android::hardware::Void;
using ::android::sp;
-#define LIGHT_SERVICE_NAME "light"
-
#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
class LightHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- light = ILight::getService(LIGHT_SERVICE_NAME);
+ light = ILight::getService();
ASSERT_NE(light, nullptr);
LOG(INFO) << "Test is remote " << light->isRemote();
diff --git a/memtrack/1.0/default/Memtrack.cpp b/memtrack/1.0/default/Memtrack.cpp
index 5c1a5c4..cc2d341 100644
--- a/memtrack/1.0/default/Memtrack.cpp
+++ b/memtrack/1.0/default/Memtrack.cpp
@@ -29,7 +29,7 @@
namespace V1_0 {
namespace implementation {
-Memtrack::Memtrack(memtrack_module_t *module) : mModule(module) {
+Memtrack::Memtrack(const memtrack_module_t *module) : mModule(module) {
if (mModule)
mModule->init(mModule);
}
@@ -74,25 +74,25 @@
IMemtrack* HIDL_FETCH_IMemtrack(const char* name) {
- int ret = 0;
- const hw_module_t* hw_module = NULL;
- memtrack_module_t *memtrack_module = NULL;
+ const hw_module_t* hw_module = nullptr;
+ const memtrack_module_t* memtrack_module = nullptr;
+ int err = hw_get_module(name, &hw_module);
+ if (err) {
+ ALOGE ("hw_get_module %s failed: %d", name, err);
+ return nullptr;
+ }
- ret = hw_get_module(name, &hw_module);
- if (ret == 0 && hw_module->methods->open > 0)
- {
- ret = hw_module->methods->open(hw_module, name,
- reinterpret_cast<hw_device_t**>(&memtrack_module));
- if (ret == 0)
- return new Memtrack(memtrack_module);
- else {
+ if (!hw_module->methods || !hw_module->methods->open) {
+ memtrack_module = reinterpret_cast<const memtrack_module_t*>(hw_module);
+ } else {
+ err = hw_module->methods->open(hw_module, name,
+ reinterpret_cast<hw_device_t**>(const_cast<memtrack_module_t**>(&memtrack_module)));
+ if (err) {
ALOGE("Passthrough failed to load legacy HAL.");
+ return nullptr;
}
}
- else {
- ALOGE ("hw_get_module %s failed: %d", name, ret);
- }
- return nullptr;
+ return new Memtrack(memtrack_module);
}
} // namespace implementation
diff --git a/memtrack/1.0/default/Memtrack.h b/memtrack/1.0/default/Memtrack.h
index a3c55e4..0adba76 100644
--- a/memtrack/1.0/default/Memtrack.h
+++ b/memtrack/1.0/default/Memtrack.h
@@ -38,12 +38,12 @@
using ::android::sp;
struct Memtrack : public IMemtrack {
- Memtrack(memtrack_module_t* module);
+ Memtrack(const memtrack_module_t* module);
~Memtrack();
Return<void> getMemory(int32_t pid, MemtrackType type, getMemory_cb _hidl_cb) override;
private:
- memtrack_module_t* mModule;
+ const memtrack_module_t* mModule;
};
extern "C" IMemtrack* HIDL_FETCH_IMemtrack(const char* name);
diff --git a/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp b/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
index 521f17f..a50d88f 100644
--- a/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
+++ b/nfc/1.0/vts/functional/nfc_hidl_hal_test.cpp
@@ -53,13 +53,11 @@
#define VERSION 0x11
#define TIMEOUT_PERIOD 5
-static bool passthrough = true;
-
// The main test class for NFC HIDL HAL.
class NfcHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- nfc_ = INfc::getService(passthrough);
+ nfc_ = INfc::getService();
ASSERT_NE(nfc_, nullptr);
nfc_cb_ = new NfcClientCallback(*this);
@@ -336,12 +334,6 @@
::testing::AddGlobalTestEnvironment(new NfcHidlEnvironment);
::testing::InitGoogleTest(&argc, argv);
- for (int i = 0; i < argc; i++) {
- if (strstr(argv[i], "passthrough=false") != nullptr) {
- passthrough = false;
- break;
- }
- }
std::system("svc nfc disable"); /* Turn off NFC */
sleep(5);
diff --git a/power/1.0/default/Power.cpp b/power/1.0/default/Power.cpp
index 656a2ae..2ddac0a 100644
--- a/power/1.0/default/Power.cpp
+++ b/power/1.0/default/Power.cpp
@@ -40,14 +40,14 @@
// Methods from ::android::hardware::power::V1_0::IPower follow.
Return<void> Power::setInteractive(bool interactive) {
- if (mModule->setInteractive > 0)
+ if (mModule->setInteractive)
mModule->setInteractive(mModule, interactive ? 1 : 0);
return Void();
}
Return<void> Power::powerHint(PowerHint hint, int32_t data) {
int32_t param = data;
- if (mModule->powerHint > 0) {
+ if (mModule->powerHint) {
if (data)
mModule->powerHint(mModule, static_cast<power_hint_t>(hint), ¶m);
else
@@ -57,7 +57,7 @@
}
Return<void> Power::setFeature(Feature feature, bool activate) {
- if (mModule->setFeature > 0)
+ if (mModule->setFeature)
mModule->setFeature(mModule, static_cast<feature_t>(feature),
activate ? 1 : 0);
return Void();
@@ -79,7 +79,7 @@
}
number_platform_modes = mModule->get_number_of_platform_modes(mModule);
- if (number_platform_modes > 0)
+ if (number_platform_modes)
{
if (SIZE_MAX / sizeof(size_t) <= number_platform_modes) // overflow
goto done;
@@ -144,24 +144,24 @@
return Void();
}
-IPower* HIDL_FETCH_IPower(const char* name) {
+IPower* HIDL_FETCH_IPower(const char* /* name */) {
int ret = 0;
const hw_module_t* hw_module = NULL;
power_module_t *power_module;
- ret = hw_get_module(name, &hw_module);
- if (ret == 0 && hw_module->methods->open > 0) {
- ret = hw_module->methods->open(hw_module, name,
+ ret = hw_get_module(POWER_HARDWARE_MODULE_ID, &hw_module);
+ if (ret == 0 && hw_module->methods->open) {
+ ret = hw_module->methods->open(hw_module, POWER_HARDWARE_MODULE_ID,
reinterpret_cast<hw_device_t**>(&power_module));
if (ret == 0) {
return new Power(power_module);
}
else {
- ALOGE("Passthrough failed to load legacy HAL.");
+ ALOGE("Passthrough failed to load legacy power HAL.");
return nullptr;
}
}
else {
- ALOGE ("hw_get_module %s failed: %d", name, ret);
+ ALOGE ("hw_get_module %s failed: %d", POWER_HARDWARE_MODULE_ID, ret);
return nullptr;
}
}
diff --git a/power/1.0/default/service.cpp b/power/1.0/default/service.cpp
index f77ff5b..e8618b8 100644
--- a/power/1.0/default/service.cpp
+++ b/power/1.0/default/service.cpp
@@ -23,5 +23,5 @@
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
- return defaultPassthroughServiceImplementation<IPower>("power");
+ return defaultPassthroughServiceImplementation<IPower>();
}
diff --git a/power/1.0/vts/functional/power_hidl_hal_test.cpp b/power/1.0/vts/functional/power_hidl_hal_test.cpp
index 36bdb0a..3f0ef56 100644
--- a/power/1.0/vts/functional/power_hidl_hal_test.cpp
+++ b/power/1.0/vts/functional/power_hidl_hal_test.cpp
@@ -35,7 +35,7 @@
class PowerHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- power = IPower::getService("power");
+ power = IPower::getService();
ASSERT_NE(power, nullptr);
}
diff --git a/radio/1.0/types.hal b/radio/1.0/types.hal
index 941a59e..593dc92 100644
--- a/radio/1.0/types.hal
+++ b/radio/1.0/types.hal
@@ -109,8 +109,8 @@
INVALID_SMSC_ADDRESS = 58, // SMSC address specified is invalid
NO_SUCH_ENTRY = 59, // No such entry present to perform the request
NETWORK_NOT_READY = 60, // Network is not ready to perform the request
- NOT_PROVISIONED = 61, // Device doesnot have this value provisioned
- NO_SUBSCRIPTION = 62, // Device doesnot have subscription
+ NOT_PROVISIONED = 61, // Device does not have this value provisioned
+ NO_SUBSCRIPTION = 62, // Device does not have subscription
NO_NETWORK_FOUND = 63, // Network cannot be found
DEVICE_IN_USE = 64, // Operation cannot be performed because the device
// is currently in use
@@ -223,7 +223,7 @@
RUIM_CORPORATE,
RUIM_SERVICE_PROVIDER,
RUIM_RUIM,
- RUIM_NETWORK1_PUK, // The corresponding perso lock is blocked
+ RUIM_NETWORK1_PUK, // The corresponding perso lock is blocked
RUIM_NETWORK2_PUK,
RUIM_HRPD_PUK,
RUIM_CORPORATE_PUK,
@@ -232,7 +232,7 @@
};
enum RadioState : int32_t {
- OFF = 0, // Radio explictly powered off (eg CFUN=0)
+ OFF = 0, // Radio explicitly powered off (eg CFUN=0)
UNAVAILABLE = 1, // Radio unavailable (eg, resetting or not booted)
ON = 10, // Radio is ON
};
@@ -242,17 +242,17 @@
CONNECT_FAILURE,
MSG_SIZE_TOO_LARGE,
MSG_SIZE_TOO_SMALL,
- CONNECT_OK_CALL_ONGOING
+ CONNECT_OK_CALL_ONGOING,
};
enum SapDisconnectType : int32_t {
GRACEFUL,
- IMMEDIATE
+ IMMEDIATE,
};
enum SapApduType : int32_t {
APDU,
- APDU7816
+ APDU7816,
};
enum SapResultCode : int32_t {
@@ -263,7 +263,7 @@
CARD_REMOVED,
CARD_ALREADY_POWERED_ON,
DATA_NOT_AVAILABLE,
- NOT_SUPPORTED
+ NOT_SUPPORTED,
};
enum SapStatus : int32_t {
@@ -272,21 +272,21 @@
CARD_NOT_ACCESSIBLE,
CARD_REMOVED,
CARD_INSERTED,
- RECOVERED
+ RECOVERED,
};
enum SapTransferProtocol : int32_t {
T0,
- T1
+ T1,
};
enum CallState : int32_t {
ACTIVE,
HOLDING,
- DIALING, // MO call only
- ALERTING, // MO call only
- INCOMING, // MT call only
- WAITING, // MT call only
+ DIALING, // MO call only
+ ALERTING, // MO call only
+ INCOMING, // MT call only
+ WAITING, // MT call only
};
/*
@@ -311,7 +311,7 @@
USP, // User specified protocol
OSIHLP, // OSI higher layer protocol
X244, // X.244
- RMCF, // Reserved for system mangement convergence function
+ RMCF, // Reserved for system management convergence function
IA5C, // IA5 characters
};
@@ -323,9 +323,9 @@
};
enum Clir : int32_t {
- DEFAULT, // "use subscription default value"
- INVOCATION, // restrict CLI presentation
- SUPPRESSION, // allow CLI presentation
+ DEFAULT, // "use subscription default value"
+ INVOCATION, // restrict CLI presentation
+ SUPPRESSION, // allow CLI presentation
};
enum LastCallFailCause : int32_t {
@@ -519,7 +519,7 @@
// emergency calls are enabled.
REG_DENIED_EM, // Same as REG_DENIED but indicates that
// emergency calls are enabled.
- UNKNOWN_EM // Same as UNKNOWN but indicates that
+ UNKNOWN_EM, // Same as UNKNOWN but indicates that
// emergency calls are enabled.
};
@@ -539,8 +539,8 @@
EVDO_B = 12,
EHRPD = 13,
LTE = 14,
- HSPAP = 15, // HSPA+
- GSM = 16, // Only supports voice
+ HSPAP = 15, // HSPA+
+ GSM = 16, // Only supports voice
TD_SCDMA = 17,
IWLAN = 18,
LTE_CA = 19,
@@ -557,7 +557,7 @@
};
enum SmsAcknowledgeFailCause : int32_t {
- MEMORY_CAPAPCITY_EXCEEDED = 0xD3,
+ MEMORY_CAPACITY_EXCEEDED = 0xD3,
UNSPECIFIED_ERROR = 0XFF,
};
@@ -572,7 +572,7 @@
enum ClipStatus : int32_t {
CLIP_PROVISIONED, // CLIP provisioned
CLIP_UNPROVISIONED, // CLIP not provisioned
- UNKOWN, // unknown, e.g. no network etc
+ UNKNOWN, // unknown, e.g. no network etc
};
enum SmsWriteArgsStatus : int32_t {
@@ -659,63 +659,63 @@
enum NvItem : int32_t {
// CDMA radio and account information (items 1-10)
- CDMA_MEID = 1, // CDMA MEID (hex)
- CDMA_MIN = 2, // CDMA MIN (MSID)
- CDMA_MDN = 3, // CDMA MDN
- CDMA_ACCOLC = 4, // CDMA access overload control
+ CDMA_MEID = 1, // CDMA MEID (hex)
+ CDMA_MIN = 2, // CDMA MIN (MSID)
+ CDMA_MDN = 3, // CDMA MDN
+ CDMA_ACCOLC = 4, // CDMA access overload control
// Carrier device provisioning (items 11-30)
- DEVICE_MSL = 11, // device MSL
- RTN_RECONDITIONED_STATUS = 12, // RTN reconditioned status
- RTN_ACTIVATION_DATE = 13, // RTN activation date
- RTN_LIFE_TIMER = 14, // RTN life timer
- RTN_LIFE_CALLS = 15, // RTN life calls
- RTN_LIFE_DATA_TX = 16, // RTN life data TX
- RTN_LIFE_DATA_RX = 17, // RTN life data RX
- OMADM_HFA_LEVEL = 18, // HFA in progress
+ DEVICE_MSL = 11, // device MSL
+ RTN_RECONDITIONED_STATUS = 12, // RTN reconditioned status
+ RTN_ACTIVATION_DATE = 13, // RTN activation date
+ RTN_LIFE_TIMER = 14, // RTN life timer
+ RTN_LIFE_CALLS = 15, // RTN life calls
+ RTN_LIFE_DATA_TX = 16, // RTN life data TX
+ RTN_LIFE_DATA_RX = 17, // RTN life data RX
+ OMADM_HFA_LEVEL = 18, // HFA in progress
// Mobile IP profile information (items 31-50)
- MIP_PROFILE_NAI = 31, // NAI realm
- MIP_PROFILE_HOME_ADDRESS = 32, // MIP home address
- MIP_PROFILE_AAA_AUTH = 33, // AAA auth
- MIP_PROFILE_HA_AUTH = 34, // HA auth
- MIP_PROFILE_PRI_HA_ADDR = 35, // primary HA address
- MIP_PROFILE_SEC_HA_ADDR = 36, // secondary HA address
- MIP_PROFILE_REV_TUN_PREF = 37, // reverse TUN preference
- MIP_PROFILE_HA_SPI = 38, // HA SPI
- MIP_PROFILE_AAA_SPI = 39, // AAA SPI
- MIP_PROFILE_MN_HA_SS = 40, // HA shared secret
- MIP_PROFILE_MN_AAA_SS = 41, // AAA shared secret
+ MIP_PROFILE_NAI = 31, // NAI realm
+ MIP_PROFILE_HOME_ADDRESS = 32, // MIP home address
+ MIP_PROFILE_AAA_AUTH = 33, // AAA auth
+ MIP_PROFILE_HA_AUTH = 34, // HA auth
+ MIP_PROFILE_PRI_HA_ADDR = 35, // primary HA address
+ MIP_PROFILE_SEC_HA_ADDR = 36, // secondary HA address
+ MIP_PROFILE_REV_TUN_PREF = 37, // reverse TUN preference
+ MIP_PROFILE_HA_SPI = 38, // HA SPI
+ MIP_PROFILE_AAA_SPI = 39, // AAA SPI
+ MIP_PROFILE_MN_HA_SS = 40, // HA shared secret
+ MIP_PROFILE_MN_AAA_SS = 41, // AAA shared secret
// CDMA network and band config (items 51-70)
- CDMA_PRL_VERSION = 51, // CDMA PRL version
- CDMA_BC10 = 52, // CDMA band class 10
- CDMA_BC14 = 53, // CDMA band class 14
- CDMA_SO68 = 54, // CDMA SO68
- CDMA_SO73_COP0 = 55, // CDMA SO73 COP0
- CDMA_SO73_COP1TO7 = 56, // CDMA SO73 COP1-7
- CDMA_1X_ADVANCED_ENABLED = 57, // CDMA 1X Advanced enabled
- CDMA_EHRPD_ENABLED = 58, // CDMA eHRPD enabled
- CDMA_EHRPD_FORCED = 59, // CDMA eHRPD forced
+ CDMA_PRL_VERSION = 51, // CDMA PRL version
+ CDMA_BC10 = 52, // CDMA band class 10
+ CDMA_BC14 = 53, // CDMA band class 14
+ CDMA_SO68 = 54, // CDMA SO68
+ CDMA_SO73_COP0 = 55, // CDMA SO73 COP0
+ CDMA_SO73_COP1TO7 = 56, // CDMA SO73 COP1-7
+ CDMA_1X_ADVANCED_ENABLED = 57, // CDMA 1X Advanced enabled
+ CDMA_EHRPD_ENABLED = 58, // CDMA eHRPD enabled
+ CDMA_EHRPD_FORCED = 59, // CDMA eHRPD forced
// LTE network and band config (items 71-90)
- LTE_BAND_ENABLE_25 = 71, // LTE band 25 enable
- LTE_BAND_ENABLE_26 = 72, // LTE band 26 enable
- LTE_BAND_ENABLE_41 = 73, // LTE band 41 enable
+ LTE_BAND_ENABLE_25 = 71, // LTE band 25 enable
+ LTE_BAND_ENABLE_26 = 72, // LTE band 26 enable
+ LTE_BAND_ENABLE_41 = 73, // LTE band 41 enable
- LTE_SCAN_PRIORITY_25 = 74, // LTE band 25 scan priority
- LTE_SCAN_PRIORITY_26 = 75, // LTE band 26 scan priority
- LTE_SCAN_PRIORITY_41 = 76, // LTE band 41 scan priority
+ LTE_SCAN_PRIORITY_25 = 74, // LTE band 25 scan priority
+ LTE_SCAN_PRIORITY_26 = 75, // LTE band 26 scan priority
+ LTE_SCAN_PRIORITY_41 = 76, // LTE band 41 scan priority
- LTE_HIDDEN_BAND_PRIORITY_25 = 77, // LTE hidden band 25 priority
- LTE_HIDDEN_BAND_PRIORITY_26 = 78, // LTE hidden band 26 priority
- LTE_HIDDEN_BAND_PRIORITY_41 = 79, // LTE hidden band 41 priority
+ LTE_HIDDEN_BAND_PRIORITY_25 = 77, // LTE hidden band 25 priority
+ LTE_HIDDEN_BAND_PRIORITY_26 = 78, // LTE hidden band 26 priority
+ LTE_HIDDEN_BAND_PRIORITY_41 = 79, // LTE hidden band 41 priority
};
enum ResetNvType : int32_t {
- RELOAD, // reload all NV items
- ERASE, // erase NV reset (SCRTN)
- FACORY_RESET, // factory reset (RTN)
+ RELOAD, // reload all NV items
+ ERASE, // erase NV reset (SCRTN)
+ FACTORY_RESET, // factory reset (RTN)
};
enum HardwareConfigType : int32_t {
@@ -736,11 +736,11 @@
};
enum CarrierMatchType : int32_t {
- ALL = 0, // Apply to all carriers with the same mcc/mnc
- SPN = 1, // Use SPN and mcc/mnc to identify the carrier
- IMSI_PREFIX = 2, // Use IMSI prefix and mcc/mnc to identify the carrier
- GID1 = 3, // Use GID1 and mcc/mnc to identify the carrier
- GID2 = 4, // Use GID2 and mcc/mnc to identify the carrier
+ ALL = 0, // Apply to all carriers with the same mcc/mnc
+ SPN = 1, // Use SPN and mcc/mnc to identify the carrier
+ IMSI_PREFIX = 2, // Use IMSI prefix and mcc/mnc to identify the carrier
+ GID1 = 3, // Use GID1 and mcc/mnc to identify the carrier
+ GID2 = 4, // Use GID2 and mcc/mnc to identify the carrier
};
struct NeighboringCell {
@@ -804,8 +804,8 @@
};
enum CdmaSmsSubaddressType : int32_t {
- NSAP, // CCITT X.213 or ISO 8348 AD2
- USER_SPECIFIED, // e.g. X.25
+ NSAP, // CCITT X.213 or ISO 8348 AD2
+ USER_SPECIFIED, // e.g. X.25
};
enum CdmaSmsErrorClass : int32_t {
@@ -849,30 +849,30 @@
};
enum RadioCapabilityPhase : int32_t {
- CONFIGURED = 0, // Logical Modem's (LM) initial value
- // and value after FINISH completes
- START = 1, // START is sent before APPLY and indicates that an
- // APPLY is forthcoming with these same parameters
- APPLY = 2, // APPLY is sent after all LM's receive START and returned
- // RadioCapability.status = 0. If any START's fail, hal
- // implementation must not send APPLY.
- UNSOL_RSP = 3, // UNSOL_RSP is sent with unsol radioCapability()
- FINISH = 4 // FINISH is sent after all commands have completed. If an
- // error occurs in any previous command, the
- // RadioAccessesFamily and logicalModemUuid fields must be
- // the prior configuration thus restoring the configuration
- // to the previous value. An error returned by FINISH
- // will generally be ignored or may cause that logical
- // modem to be removed from service.
+ CONFIGURED = 0, // Logical Modem's (LM) initial value
+ // and value after FINISH completes
+ START = 1, // START is sent before APPLY and indicates that an
+ // APPLY is forthcoming with these same parameters
+ APPLY = 2, // APPLY is sent after all LM's receive START and returned
+ // RadioCapability.status = 0. If any START's fail, hal
+ // implementation must not send APPLY.
+ UNSOL_RSP = 3, // UNSOL_RSP is sent with unsolicited radioCapability()
+ FINISH = 4 // FINISH is sent after all commands have completed. If an
+ // error occurs in any previous command, the
+ // RadioAccessesFamily and logicalModemUuid fields must be
+ // the prior configuration thus restoring the
+ // configuration to the previous value. An error returned
+ // by FINISH will generally be ignored or may cause that
+ // logical modem to be removed from service.
};
enum RadioCapabilityStatus : int32_t {
- NONE = 0, // This parameter has no meaning with
- // RadioCapabilityPhase:START, RadioCapabilityPhase:APPLY
- SUCCESS = 1, // Tell modem the action transaction of set radio
- // capability was success with RadioCapabilityPhase:FINISH
- FAIL = 2, // Tell modem the action transaction of set radio
- // capability is fail with RadioCapabilityPhase:FINISH.
+ NONE = 0, // This parameter has no meaning with
+ // RadioCapabilityPhase:START, RadioCapabilityPhase:APPLY
+ SUCCESS = 1, // Tell modem the action transaction of set radio
+ // capability was success with RadioCapabilityPhase:FINISH
+ FAIL = 2, // Tell modem the action transaction of set radio
+ // capability is fail with RadioCapabilityPhase:FINISH.
};
enum RadioAccessFamily : int32_t {
@@ -898,19 +898,19 @@
};
enum UssdModeType : int32_t {
- NOTIFY, // USSD-Notify
- REQUEST, // USSD-Request
- NW_RELEASE, // Session terminated by network
- LOCAL_CLIENT, // other local client (eg, SIM Toolkit) has responded
- NOT_SUPPORTED, // Operation not supported
- NW_TIMEOUT, // Network timeout
+ NOTIFY, // USSD-Notify
+ REQUEST, // USSD-Request
+ NW_RELEASE, // Session terminated by network
+ LOCAL_CLIENT, // other local client (eg, SIM Toolkit) has responded
+ NOT_SUPPORTED, // Operation not supported
+ NW_TIMEOUT, // Network timeout
};
enum SimRefreshType : int32_t {
- SIM_FILE_UPDATE = 0, // A file on SIM has been updated.
- SIM_INIT = 1, // SIM initialized. All files should be re-read.
- SIM_RESET = 2 // SIM reset. SIM power required, SIM may be locked a
- // nd all files must be re-read.
+ SIM_FILE_UPDATE = 0, // A file on SIM has been updated.
+ SIM_INIT = 1, // SIM initialized. All files should be re-read.
+ SIM_RESET = 2 // SIM reset. SIM power required, SIM may be locked a
+ // nd all files must be re-read.
};
enum SrvccState :int32_t {
@@ -938,15 +938,15 @@
};
enum PhoneRestrictedState : int32_t {
- NONE = 0x00, // No restriction at all including voice/SMS/USSD/SS/AV64
- // and packet data
- CS_EMERGENCY = 0x01, // Block emergency call due to restriction. But allow all
- // normal voice/SMS/USSD/SS/AV64.
- CS_NORMAL = 0x02, // Block all normal voice/SMS/USSD/SS/AV64 due to
- // restriction. Only Emergency call allowed.
- CS_ALL = 0x04, // Block all voice/SMS/USSD/SS/AV64 including emergency
- // call due to restriction.
- PS_ALL = 0x10 // Block packet data access due to restriction.
+ NONE = 0x00, // No restriction at all including voice/SMS/USSD/SS/AV64
+ // and packet data
+ CS_EMERGENCY = 0x01, // Block emergency call due to restriction. But allow all
+ // normal voice/SMS/USSD/SS/AV64.
+ CS_NORMAL = 0x02, // Block all normal voice/SMS/USSD/SS/AV64 due to
+ // restriction. Only Emergency call allowed.
+ CS_ALL = 0x04, // Block all voice/SMS/USSD/SS/AV64 including emergency
+ // call due to restriction.
+ PS_ALL = 0x10 // Block packet data access due to restriction.
};
enum CdmaCallWaitingNumberPresentation : int32_t {
@@ -1199,7 +1199,7 @@
};
struct TdScdmaSignalStrength {
- uint32_t rscp; // The Received Signal Code Power in dBm multipled by -1.
+ uint32_t rscp; // The Received Signal Code Power in dBm multiplied by -1.
// Range : 25 to 120
// INT_MAX: 0x7FFFFFFF denotes invalid value.
// Reference: 3GPP TS 25.123, section 9.1.1.1
@@ -1228,7 +1228,7 @@
int32_t suggestedRetryTime; // If status != 0, this fields indicates the suggested
// retry back-off timer value RIL wants to override the
// one pre-configured in FW.
- // The unit is miliseconds.
+ // The unit is milliseconds.
// The value < 0 means no value is suggested.
// The value 0 means retry must be done ASAP.
// The value of INT_MAX(0x7fffffff) means no retry.
@@ -1266,7 +1266,7 @@
int32_t command; // one of the commands listed for TS 27.007 +CRSM
int32_t fileId; // EF id
string path; // "pathid" from TS 27.007 +CRSM command.
- // Path is in hex asciii format eg "7f205f70"
+ // Path is in hex ascii format eg "7f205f70"
// Path must always be provided.
int32_t p1; // Values of p1, p2 and p3 defined as per 3GPP TS 51.011
int32_t p2;
@@ -1385,7 +1385,7 @@
int32_t reasonDataDenied; // if registration state is 3 (Registration
// denied) this is an enumerated reason why
// registration was denied. See 3GPP TS 24.008,
- // Annex G.6 "Additonal cause codes for GMM".
+ // Annex G.6 "Additional cause codes for GMM".
// 7 == GPRS services not allowed
// 8 == GPRS services and non-GPRS services not allowed
// 9 == MS identity cannot be derived by the network
@@ -1415,7 +1415,7 @@
int32_t serviceClass; // From 27.007 +CCFC/+CLCK "class"
// See table for Android mapping from
// MMI service code
- // 0 means user doesnt input class
+ // 0 means user doesn't input class
int32_t toa; // "type" from TS 27.007 7.11
string number; // "number" from TS 27.007 7.11.
int32_t timeSeconds;
@@ -1439,27 +1439,27 @@
};
struct CdmaSmsAddress {
- CdmaSmsDigitMode digitMode; // CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
- // For 4-bit type, only "digits" field defined below in
- // this struct is used.
- CdmaSmsNumberMode numberMode; // Used only when digitMode is 8-bit
- CdmaSmsNumberType numberType; // Used only when digitMode is 8-bit.
- // To specify an international address, use the following:
- // digitMode = CdmaSmsDigitMode:EIGHT_BIT:
- // numberMode = CdmaSmsNumberMode:NOT_DATA_NETWORK
- // numberType = CdmaSmsNumberType:INTERNATIONAL_OR_DATA_IP
- // numberPlan = CdmaSmsNumberPlan:TELEPHONY
- // numberOfDigits = number of digits
- // digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
- CdmaSmsNumberPlan numberPlan; // Used only when digitMode is 8-bit
- vec<uint8_t> digits; // Each byte in this array represents a 4 bit or 8-bit digit
- // of address data
+ CdmaSmsDigitMode digitMode; // CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
+ // For 4-bit type, only "digits" field defined below in
+ // this struct is used.
+ CdmaSmsNumberMode numberMode; // Used only when digitMode is 8-bit
+ CdmaSmsNumberType numberType; // Used only when digitMode is 8-bit.
+ // To specify an international address, use the following:
+ // digitMode = CdmaSmsDigitMode:EIGHT_BIT:
+ // numberMode = CdmaSmsNumberMode:NOT_DATA_NETWORK
+ // numberType = CdmaSmsNumberType:INTERNATIONAL_OR_DATA_IP
+ // numberPlan = CdmaSmsNumberPlan:TELEPHONY
+ // numberOfDigits = number of digits
+ // digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
+ CdmaSmsNumberPlan numberPlan; // Used only when digitMode is 8-bit
+ vec<uint8_t> digits; // Each byte in this array represents a 4 bit or 8-bit
+ // digit of address data
};
struct CdmaSmsSubaddress {
CdmaSmsSubaddressType subaddressType;
- bool odd; // true means the last byte's lower 4 bits must be ignored
- vec<uint8_t> digits; // Each byte respresents an 8-bit digit of subaddress data
+ bool odd; // true means the last byte's lower 4 bits must be ignored
+ vec<uint8_t> digits; // Each byte represents an 8-bit digit of subaddress data
};
struct CdmaSmsMessage {
@@ -1468,29 +1468,29 @@
int32_t serviceCategory;
CdmaSmsAddress address;
CdmaSmsSubaddress subAddress;
- vec<uint8_t> bearerData; // 3GPP2 C.S0015-B, v2.0,
+ vec<uint8_t> bearerData; // 3GPP2 C.S0015-B, v2.0,
};
struct CdmaSmsAck {
CdmaSmsErrorClass errorClass;
- int32_t smsCauseCode; // As defined in N.S00005, 6.5.2.125.
- // Currently, only 35 (resource shortage) and
- // 39 (other terminal problem) are reported.
+ int32_t smsCauseCode; // As defined in N.S00005, 6.5.2.125.
+ // Currently, only 35 (resource shortage) and
+ // 39 (other terminal problem) are reported.
};
struct CdmaBroadcastSmsConfigInfo {
- int32_t serviceCategory; // serviceCategory defines a Broadcast message identifier
- // whose value is 0x0000 - 0xFFFF as defined in
- // C.R1001G 9.3.1 and 9.3.2.
- int32_t language; // language code of Broadcast Message
- // whose value is 0x00 - 0x07 as defined in C.R1001G 9.2.
- bool selected; // selected false means message types specified in
- // serviceCategory are not accepted, while true means
- // accepted.
+ int32_t serviceCategory; // serviceCategory defines a Broadcast message identifier
+ // whose value is 0x0000 - 0xFFFF as defined in
+ // C.R1001G 9.3.1 and 9.3.2.
+ int32_t language; // language code of Broadcast Message
+ // whose value is 0x00 - 0x07 as defined in C.R1001G 9.2.
+ bool selected; // selected false means message types specified in
+ // serviceCategory are not accepted, while true means
+ // accepted.
};
struct CdmaSmsWriteArgs {
- CdmaSmsWriteArgsStatus status; // Status of message. See TS 27.005 3.1
+ CdmaSmsWriteArgsStatus status; // Status of message. See TS 27.005 3.1
CdmaSmsMessage message;
};
@@ -1520,68 +1520,68 @@
};
struct CellIdentityGsm {
- string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
- string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
- // unknown
- int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
- int32_t cid; // 16-bit GSM Cell Identity described in
- // TS 27.007, 0..65535, INT_MAX if unknown
- int32_t arfcn; // 16-bit GSM Absolute RF channel number, INT_MAX if
- // unknown
- uint8_t bsic; // 6-bit Base Station Identity Code, 0xFF if unknown
+ string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+ string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+ // unknown
+ int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
+ int32_t cid; // 16-bit GSM Cell Identity described in
+ // TS 27.007, 0..65535, INT_MAX if unknown
+ int32_t arfcn; // 16-bit GSM Absolute RF channel number, INT_MAX if
+ // unknown
+ uint8_t bsic; // 6-bit Base Station Identity Code, 0xFF if unknown
};
struct CellIdentityWcdma {
- string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
- string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX
- // if unknown
- int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
- int32_t cid; // 28-bit UMTS Cell Identity described in
- // TS 25.331, 0..268435455, INT_MAX if unknown
- int32_t psc; // 9-bit UMTS Primary Scrambling Code described in
- // TS 25.331, 0..511, INT_MAX if unknown
- int32_t uarfcn; // 16-bit UMTS Absolute RF Channel Number, INT_MAX if
- // unknown
+ string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+ string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX
+ // if unknown
+ int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if unknown
+ int32_t cid; // 28-bit UMTS Cell Identity described in
+ // TS 25.331, 0..268435455, INT_MAX if unknown
+ int32_t psc; // 9-bit UMTS Primary Scrambling Code described in
+ // TS 25.331, 0..511, INT_MAX if unknown
+ int32_t uarfcn; // 16-bit UMTS Absolute RF Channel Number, INT_MAX if
+ // unknown
};
struct CellIdentityCdma {
- int32_t networkId; // Network Id 0..65535, INT_MAX if unknown
- int32_t systemId; // CDMA System Id 0..32767, INT_MAX if unknown
- int32_t basestationId; // Base Station Id 0..65535, INT_MAX if unknown
- int32_t longitude; // Longitude is a decimal number as specified in
- // 3GPP2 C.S0005-A v6.0. It is represented in units of
- // 0.25 seconds and ranges from -2592000 to 2592000,
- // both values inclusive (corresponding to a range of -180
- // to +180 degrees). INT_MAX if unknown
- int32_t latitude; // Latitude is a decimal number as specified in
- // 3GPP2 C.S0005-A v6.0. It is represented in units of
- // 0.25 seconds and ranges from -1296000 to 1296000,
- // both values inclusive (corresponding to a range of -90
- // to +90 degrees). INT_MAX if unknown
+ int32_t networkId; // Network Id 0..65535, INT_MAX if unknown
+ int32_t systemId; // CDMA System Id 0..32767, INT_MAX if unknown
+ int32_t baseStationId; // Base Station Id 0..65535, INT_MAX if unknown
+ int32_t longitude; // Longitude is a decimal number as specified in
+ // 3GPP2 C.S0005-A v6.0. It is represented in units of
+ // 0.25 seconds and ranges from -2592000 to 2592000,
+ // both values inclusive (corresponding to a range of -180
+ // to +180 degrees). INT_MAX if unknown
+ int32_t latitude; // Latitude is a decimal number as specified in
+ // 3GPP2 C.S0005-A v6.0. It is represented in units of
+ // 0.25 seconds and ranges from -1296000 to 1296000,
+ // both values inclusive (corresponding to a range of -90
+ // to +90 degrees). INT_MAX if unknown
};
struct CellIdentityLte {
- string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
- string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
- // unknown
- int32_t ci; // 28-bit Cell Identity described in TS TS 27.007, INT_MAX
- // if unknown
- int32_t pci; // physical cell id 0..503, INT_MAX if unknown
- int32_t tac; // 16-bit tracking area code, INT_MAX if unknown
- int32_t earfcn; // 18-bit LTE Absolute RC Channel Number, INT_MAX if
- // unknown
+ string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+ string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+ // unknown
+ int32_t ci; // 28-bit Cell Identity described in TS TS 27.007, INT_MAX
+ // if unknown
+ int32_t pci; // physical cell id 0..503, INT_MAX if unknown
+ int32_t tac; // 16-bit tracking area code, INT_MAX if unknown
+ int32_t earfcn; // 18-bit LTE Absolute RC Channel Number, INT_MAX if
+ // unknown
};
struct CellIdentityTdscdma {
- string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
- string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
- // unknown
- int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if
- // unknown
- int32_t cid; // 28-bit UMTS Cell Identity described in
- // TS 25.331, 0..268435455, INT_MAX if unknown
- int32_t cpid; // 8-bit Cell Parameters ID described in
- // TS 25.331, 0..127, INT_MAX if unknown
+ string mcc; // 3-digit Mobile Country Code, 0..999, INT_MAX if unknown
+ string mnc; // 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if
+ // unknown
+ int32_t lac; // 16-bit Location Area Code, 0..65535, INT_MAX if
+ // unknown
+ int32_t cid; // 28-bit UMTS Cell Identity described in
+ // TS 25.331, 0..268435455, INT_MAX if unknown
+ int32_t cpid; // 8-bit Cell Parameters ID described in
+ // TS 25.331, 0..127, INT_MAX if unknown
};
struct CellInfoGsm {
@@ -1611,56 +1611,57 @@
};
struct CellInfo {
- CellInfoType cellInfoType; // cell type for selecting from union CellInfo
- bool registered; // true if this cell is registered false if not registered
- TimeStampType timeStampType; // type of time stamp represented by timeStamp
- uint64_t timeStamp; // Time in nanos as returned by ril_nano_time
+ CellInfoType cellInfoType; // cell type for selecting from union CellInfo
+ bool registered; // true if this cell is registered false if not registered
+ TimeStampType timeStampType; // type of time stamp represented by timeStamp
+ uint64_t timeStamp; // Time in nanos as returned by ril_nano_time
// Only one of the below vectors must be of size 1 based on the CellInfoType and others must be
// of size 0
- vec<CellInfoGsm> gsm; // Valid only if type = gsm and size = 1 else must be empty
- vec<CellInfoCdma> cdma; // Valid only if type = cdma and size = 1 else must be
- // empty
- vec<CellInfoLte> lte; // Valid only if type = lte and size = 1 else must be
- // empty
- vec<CellInfoWcdma> wcdma; // Valid only if type = wcdma and size = 1 else must be
- // empty
- vec<CellInfoTdscdma> tdscdma; // Valid only if type = tdscdma and size = 1 else must be
- // empty
+ vec<CellInfoGsm> gsm; // Valid only if type = gsm and size = 1 else must be
+ // empty
+ vec<CellInfoCdma> cdma; // Valid only if type = cdma and size = 1 else must be
+ // empty
+ vec<CellInfoLte> lte; // Valid only if type = lte and size = 1 else must be
+ // empty
+ vec<CellInfoWcdma> wcdma; // Valid only if type = wcdma and size = 1 else must be
+ // empty
+ vec<CellInfoTdscdma> tdscdma; // Valid only if type = tdscdma and size = 1 else must be
+ // empty
};
struct GsmSmsMessage {
- string smscPdu; // SMSC address in GSM BCD format prefixed by a length
- // byte (as expected by TS 27.005) or empty string for
- // default SMSC
- string pdu; // SMS in PDU format as an ASCII hex string less the
- // SMSC address. TP-Layer-Length is be "strlen(pdu)/2
+ string smscPdu; // SMSC address in GSM BCD format prefixed by a length
+ // byte (as expected by TS 27.005) or empty string for
+ // default SMSC
+ string pdu; // SMS in PDU format as an ASCII hex string less the
+ // SMSC address. TP-Layer-Length is be "strlen(pdu)/2
};
struct ImsSmsMessage {
RadioTechnologyFamily tech;
- bool retry; // false == not retry, true == retry */
- int32_t messageRef; // Valid field if retry is set to true.
- // Contains messageRef from SendSmsResult stuct
- // corresponding to failed MO SMS.
+ bool retry; // false == not retry, true == retry */
+ int32_t messageRef; // Valid field if retry is set to true.
+ // Contains messageRef from SendSmsResult struct
+ // corresponding to failed MO SMS.
// Only one of the below vectors must be of size 1 based on the RadioTechnologyFamily and others
// must be of size 0
- vec<CdmaSmsMessage> cdmaMessage; // Valid field if tech is 3GPP2 and size = 1 else must be
- // empty
- vec<GsmSmsMessage> gsmMessage; // Valid field if tech is 3GPP and size = 1 else must be
- // empty
+ vec<CdmaSmsMessage> cdmaMessage; // Valid field if tech is 3GPP2 and size = 1 else must be
+ // empty
+ vec<GsmSmsMessage> gsmMessage; // Valid field if tech is 3GPP and size = 1 else must be
+ // empty
};
struct SimApdu {
- int32_t sessionId; // "sessionid" from TS 27.007 +CGLA command. Must be
- // ignored for +CSIM command.
+ int32_t sessionId; // "sessionid" from TS 27.007 +CGLA command. Must be
+ // ignored for +CSIM command.
// Following fields are used to derive the APDU ("command" and "length"
// values in TS 27.007 +CSIM and +CGLA commands).
int32_t cla;
int32_t instruction;
int32_t p1;
int32_t p2;
- int32_t p3; // A negative P3 implies a 4 byte APDU.
- string data; // In hex string format ([a-fA-F0-9]*).
+ int32_t p3; // A negative P3 implies a 4 byte APDU.
+ string data; // In hex string format ([a-fA-F0-9]*).
};
struct NvWriteItem {
@@ -1670,160 +1671,159 @@
struct SelectUiccSub {
int32_t slot;
- int32_t appIndex; // array subscriptor from
- // applications[RadioConst:CARD_MAX_APPS] in
- // getIccCardStatus()
+ int32_t appIndex; // array subscriptor from
+ // applications[RadioConst:CARD_MAX_APPS] in
+ // getIccCardStatus()
SubscriptionType subType;
UiccSubActStatus actStatus;
};
struct HardwareConfigModem {
int32_t rilModel;
- uint32_t rat; // bitset - ref. RadioTechnology.
+ uint32_t rat; // bitset - ref. RadioTechnology.
int32_t maxVoice;
int32_t maxData;
int32_t maxStandby;
};
struct HardwareConfigSim {
- string modemUuid; // RadioConst:MAX_UUID_LENGTH is max length of the
- // string
+ string modemUuid; // RadioConst:MAX_UUID_LENGTH is max length of the string
};
struct HardwareConfig {
HardwareConfigType type;
- string uuid; // RadioConst:MAX_UUID_LENGTH is max length of the
- // string
+ string uuid; // RadioConst:MAX_UUID_LENGTH is max length of the string
HardwareConfigState state;
+
// Only one of the below vectors must have size = 1 based on the HardwareConfigType and other
// must have size = 0.
- vec<HardwareConfigModem> modem; // Valid only if type is Modem and size = 1 else must be
- // empty
- vec<HardwareConfigSim> sim; // Valid only if type is SIM or else emptyand size = 1
- // else must be empty
+ vec<HardwareConfigModem> modem; // Valid only if type is Modem and size = 1 else must be
+ // empty
+ vec<HardwareConfigSim> sim; // Valid only if type is SIM or else empty and size = 1
+ // else must be empty
};
struct DataProfileInfo {
- int32_t profileId; // id of the data profile
- string apn; // The APN to connect to
- string protocol; // One of the PDP_type values in TS 27.007 section 10.1.1.
- // For example, "IP", "IPV6", "IPV4V6", or "PPP".
+ int32_t profileId; // id of the data profile
+ string apn; // The APN to connect to
+ string protocol; // One of the PDP_type values in TS 27.007 section 10.1.1.
+ // For example, "IP", "IPV6", "IPV4V6", or "PPP".
ApnAuthType authType;
- string user; // The username for APN, or empty string
- string password; // The password for APN, or empty string
+ string user; // The username for APN, or empty string
+ string password; // The password for APN, or empty string
DataProfileInfoType type;
- int32_t maxConnsTime; // The period in seconds to limit the maximum connections
- int32_t maxConns; // The maximum connections during maxConnsTime
- int32_t waitTime; // The required wait time in seconds after a successful UE
- // initiated disconnect of a given PDN connection before
- // the device can send a new PDN connection request for
- // that given PDN
- bool enabled; // True to enable the profile, false to disable
+ int32_t maxConnsTime; // The period in seconds to limit the maximum connections
+ int32_t maxConns; // The maximum connections during maxConnsTime
+ int32_t waitTime; // The required wait time in seconds after a successful UE
+ // initiated disconnect of a given PDN connection before
+ // the device can send a new PDN connection request for
+ // that given PDN
+ bool enabled; // True to enable the profile, false to disable
};
struct RadioCapability {
- int32_t session; // Unique session value defined by framework returned in
- // all "responses/unsol"
+ int32_t session; // Unique session value defined by framework returned in
+ // all "responses/unsol"
RadioCapabilityPhase phase;
- RadioAccessFamily raf;
- string logicalModemUuid; // A UUID typically "com.xxxx.lmX where X is the logical
- // modem. RadioConst:MAX_UUID_LENGTH is the max
- // length
+ bitfield<RadioAccessFamily> raf; // 32-bit bitmap of RadioAccessFamily
+ string logicalModemUuid; // A UUID typically "com.xxxx.lmX where X is the logical
+ // modem. RadioConst:MAX_UUID_LENGTH is the max
+ // length
RadioCapabilityStatus status;
};
struct LceStatusInfo {
LceStatus lceStatus;
- uint8_t actualIntervalMs; // actual LCE reporting interval,
- // meaningful only if LceStatus = ACTIVE.
+ uint8_t actualIntervalMs; // actual LCE reporting interval,
+ // meaningful only if LceStatus = ACTIVE.
};
struct LceDataInfo {
- uint32_t lastHopCapacityKbps; // last-hop cellular capacity: kilobits/second.
- uint8_t confidenceLevel; // capacity estimate confidence: 0-100
- bool lceSuspended; // LCE report going to be suspended? (e.g., radio
- // moves to inactive state or network type change)
- // true = suspended;
- // false = not suspended.
+ uint32_t lastHopCapacityKbps; // last-hop cellular capacity: kilobits/second.
+ uint8_t confidenceLevel; // capacity estimate confidence: 0-100
+ bool lceSuspended; // LCE report going to be suspended? (e.g., radio
+ // moves to inactive state or network type change)
+ // true = suspended;
+ // false = not suspended.
};
struct ActivityStatsInfo {
- uint32_t sleepModeTimeMs; // total time (in ms) when modem is in a low power or
- // sleep state
- uint32_t idleModeTimeMs; // total time (in ms) when modem is awake but neither
- // the transmitter nor receiver are active/awake
+ uint32_t sleepModeTimeMs; // total time (in ms) when modem is in a low power or
+ // sleep state
+ uint32_t idleModeTimeMs; // total time (in ms) when modem is awake but neither
+ // the transmitter nor receiver are active/awake
uint32_t[RadioConst:NUM_TX_POWER_LEVELS] txmModetimeMs;
- // Each index represent total time (in ms) during which
- // the transmitter is active/awake for a particular
- // power range as shown below.
- // index 0 = tx_power < 0dBm
- // index 1 = 0dBm < tx_power < 5dBm
- // index 2 = 5dBm < tx_power < 15dBm
- // index 3 = 15dBm < tx_power < 20dBm
- // index 4 = tx_power > 20dBm
- uint32_t rxModeTimeMs; // total time (in ms) for which receiver is
- // active/awake and the transmitter is inactive
+ // Each index represent total time (in ms) during which
+ // the transmitter is active/awake for a particular
+ // power range as shown below.
+ // index 0 = tx_power < 0dBm
+ // index 1 = 0dBm < tx_power < 5dBm
+ // index 2 = 5dBm < tx_power < 15dBm
+ // index 3 = 15dBm < tx_power < 20dBm
+ // index 4 = tx_power > 20dBm
+ uint32_t rxModeTimeMs; // total time (in ms) for which receiver is
+ // active/awake and the transmitter is inactive
};
struct Carrier {
string mcc;
string mnc;
- CarrierMatchType matchType; // Specify match type for the carrier.
- // If it’s ALL, matchData is empty string;
- // otherwise, matchData is the value for the match type.
+ CarrierMatchType matchType; // Specify match type for the carrier.
+ // If it’s ALL, matchData is empty string;
+ // otherwise, matchData is the value for the match type.
string matchData;
};
struct CarrierRestrictions {
- vec<Carrier> allowedCarriers; // whitelist for allowed carriers
- vec<Carrier> excludedCarriers; // blacklist for explicitly excluded carriers
- // which match allowed_carriers. Eg. allowedCarriers
- // match mcc/mnc, excludedCarriers has same mcc/mnc and
- // gid1 is ABCD. It means except the carrier whose gid1
- // is ABCD, all carriers with the same mcc/mnc are
- // allowed.
+ vec<Carrier> allowedCarriers; // whitelist for allowed carriers
+ vec<Carrier> excludedCarriers; // blacklist for explicitly excluded carriers
+ // which match allowed_carriers. Eg. allowedCarriers
+ // match mcc/mnc, excludedCarriers has same mcc/mnc and
+ // gid1 is ABCD. It means except the carrier whose gid1
+ // is ABCD, all carriers with the same mcc/mnc are
+ // allowed.
};
struct SuppSvcNotification {
- bool isMT; // notification type
- // false = MO intermediate result code
- // true = MT unsolicited result code
- int32_t code; // result code. See 27.007 7.17.
- int32_t index; // CUG index. See 27.007 7.17.
- int32_t type; // "type" from 27.007 7.17 (MT only).
- string number; // "number" from 27.007 7.17
- // (MT only, may be empty string).
+ bool isMT; // notification type
+ // false = MO intermediate result code
+ // true = MT unsolicited result code
+ int32_t code; // result code. See 27.007 7.17.
+ int32_t index; // CUG index. See 27.007 7.17.
+ int32_t type; // "type" from 27.007 7.17 (MT only).
+ string number; // "number" from 27.007 7.17
+ // (MT only, may be empty string).
};
struct SimRefreshResult {
SimRefreshType type;
- int32_t efId; // is the EFID of the updated file if the result is
- // SIM_FILE_UPDATE or 0 for any other result.
- string aid; // is AID(application ID) of the card application
- // See ETSI 102.221 8.1 and 101.220 4
- // For SIM_FILE_UPDATE result it must be set to AID of
- // application in which updated EF resides or it must be
- // empty string if EF is outside of an application.
- // For SIM_INIT result this field is set to AID of
- // application that caused REFRESH
- // For SIM_RESET result it is empty string.
+ int32_t efId; // is the EFID of the updated file if the result is
+ // SIM_FILE_UPDATE or 0 for any other result.
+ string aid; // is AID(application ID) of the card application
+ // See ETSI 102.221 8.1 and 101.220 4
+ // For SIM_FILE_UPDATE result it must be set to AID of
+ // application in which updated EF resides or it must be
+ // empty string if EF is outside of an application.
+ // For SIM_INIT result this field is set to AID of
+ // application that caused REFRESH
+ // For SIM_RESET result it is empty string.
};
/* CDMA Signal Information Record as defined in C.S0005 section 3.7.5.5 */
struct CdmaSignalInfoRecord {
- bool isPresent; // true if signal information record is present
- int8_t signalType; // as defined 3.7.5.5-1
- int8_t alertPitch; // as defined 3.7.5.5-2
- int8_t signal; // as defined 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5
+ bool isPresent; // true if signal information record is present
+ int8_t signalType; // as defined 3.7.5.5-1
+ int8_t alertPitch; // as defined 3.7.5.5-2
+ int8_t signal; // as defined 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5
};
struct CdmaCallWaiting {
- string number; // Remote party number
+ string number; // Remote party number
CdmaCallWaitingNumberPresentation numberPresentation;
- string name; // Remote party name
+ string name; // Remote party name
CdmaSignalInfoRecord signalInfoRecord;
// Number type/Number plan required to support International Call Waiting
- CdmaCallWaitingNumberType numbertype;
+ CdmaCallWaitingNumberType numberType;
CdmaCallWaitingNumberPlan numberPlan;
};
@@ -1837,7 +1837,7 @@
* The display_tag, display_len and chari fields are all 1 byte.
*/
struct CdmaDisplayInfoRecord {
- string alphaBuf; // Max length = RadioConst:CDMA_ALPHA_INFO_BUFFER_LENGTH
+ string alphaBuf; // Max length = RadioConst:CDMA_ALPHA_INFO_BUFFER_LENGTH
};
/*
@@ -1846,7 +1846,7 @@
* Connected Number Info Rec as defined in C.S0005 section 3.7.5.4
*/
struct CdmaNumberInfoRecord {
- string number; // Max length = RADIP_CDMA_NUMBER_INFO_BUFFER_LENGTH
+ string number; // Max length = RADIP_CDMA_NUMBER_INFO_BUFFER_LENGTH
uint8_t numberType;
uint8_t numberPlan;
uint8_t pi;
@@ -1881,56 +1881,56 @@
CdmaInfoRecName name;
// Only one of the below vectors must have size = 1 based on the
// CdmaInfoRecName. All other vectors must have size 0.
- vec<CdmaDisplayInfoRecord> display; // Display and Extended Display Info Rec
- vec<CdmaNumberInfoRecord> number; // Called Party Number, Calling Party Number, Connected
- // number Info Rec
- vec<CdmaSignalInfoRecord> signal; // Signal Info Rec
+ vec<CdmaDisplayInfoRecord> display; // Display and Extended Display Info Rec
+ vec<CdmaNumberInfoRecord> number; // Called Party Number, Calling Party Number, Connected
+ // number Info Rec
+ vec<CdmaSignalInfoRecord> signal; // Signal Info Rec
vec<CdmaRedirectingNumberInfoRecord> redir; // Redirecting Number Info Rec
vec<CdmaLineControlInfoRecord> lineCtrl; // Line Control Info Rec
- vec<CdmaT53ClirInfoRecord> clir; // T53 CLIR Info Rec
+ vec<CdmaT53ClirInfoRecord> clir; // T53 CLIR Info Rec
vec<CdmaT53AudioControlInfoRecord> audioCtrl; // T53 Audio Control Info Rec
};
struct CdmaInformationRecords {
- vec<CdmaInformationRecord> infoRec; // Max length = RadioConst:CDMA_MAX_NUMBER_OF_INFO_RECS
+ vec<CdmaInformationRecord> infoRec; // Max length = RadioConst:CDMA_MAX_NUMBER_OF_INFO_RECS
};
struct CfData {
- vec<CallForwardInfo> cfInfo; // This is the response data
- // for SS request to query call
- // forward status. see getCallForwardStatus()
- // Max size = RadioConst:NUM_SERVICE_CLASSES
+ vec<CallForwardInfo> cfInfo; // This is the response data
+ // for SS request to query call
+ // forward status. see getCallForwardStatus()
+ // Max size = RadioConst:NUM_SERVICE_CLASSES
};
struct SsInfoData {
- vec<int32_t> ssInfo; // This is the response data for all of the SS GET/SET
- // Radio requests. E.g. IRadio.getClir() returns
- // two ints, so first two values of ssInfo[] will be
- // used for response if serviceType is SS_CLIR and
- // requestType is SS_INTERROGATION
- // Max size = RadioConst:SS_INFO_MAX
+ vec<int32_t> ssInfo; // This is the response data for all of the SS GET/SET
+ // Radio requests. E.g. IRadio.getClir() returns
+ // two ints, so first two values of ssInfo[] will be
+ // used for response if serviceType is SS_CLIR and
+ // requestType is SS_INTERROGATION
+ // Max size = RadioConst:SS_INFO_MAX
};
struct StkCcUnsolSsResult {
SsServiceType serviceType;
SsRequestType requestType;
SsTeleserviceType teleserviceType;
- SuppServiceClass serviceClass;
+ bitfield<SuppServiceClass> serviceClass;
RadioError result;
// Only one of the below vectors may contain values and other must be empty
- vec<SsInfoData> ssInfo; // Valid only for all SsserviceType except
- // SsServiceType:CF_* else empty.
- vec<CfData> cfData; // Valid for SsServiceType:CF_* else empty
+ vec<SsInfoData> ssInfo; // Valid only for all SsServiceType except
+ // SsServiceType:CF_* else empty.
+ vec<CfData> cfData; // Valid for SsServiceType:CF_* else empty
};
struct PcoDataInfo {
- int32_t cid; // Context ID, uniquely identifies this call
- string bearerProto; // One of the PDP_type values in TS 27.007 section 10.1.1.
- // For example, "IP", "IPV6", "IPV4V6"
- int32_t pcoId; // The protocol ID for this box. Note that only IDs from
- // FF00H - FFFFH are accepted. If more than one is
- // included from the network, multiple calls must be made
- // to send all of them.
- vec<uint8_t> contents; // Carrier-defined content. It is binary, opaque and
- // loosely defined in LTE Layer 3 spec 24.008
+ int32_t cid; // Context ID, uniquely identifies this call
+ string bearerProto; // One of the PDP_type values in TS 27.007 section 10.1.1.
+ // For example, "IP", "IPV6", "IPV4V6"
+ int32_t pcoId; // The protocol ID for this box. Note that only IDs from
+ // FF00H - FFFFH are accepted. If more than one is
+ // included from the network, multiple calls must be made
+ // to send all of them.
+ vec<uint8_t> contents; // Carrier-defined content. It is binary, opaque and
+ // loosely defined in LTE Layer 3 spec 24.008
};
diff --git a/sensors/1.0/default/service.cpp b/sensors/1.0/default/service.cpp
index 230ead3..5bcfe4b 100644
--- a/sensors/1.0/default/service.cpp
+++ b/sensors/1.0/default/service.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#define LOG_TAG "android.hardware.nfc@1.0-service"
+#define LOG_TAG "android.hardware.sensors@1.0-service"
#include <android/hardware/sensors/1.0/ISensors.h>
#include <hidl/LegacySupport.h>
@@ -23,5 +23,5 @@
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
- return defaultPassthroughServiceImplementation<ISensors>("sensors");
+ return defaultPassthroughServiceImplementation<ISensors>();
}
diff --git a/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp b/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp
index c7600f3..9a71745 100644
--- a/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp
+++ b/sensors/1.0/vts/functional/sensors_hidl_hal_test.cpp
@@ -41,8 +41,6 @@
using ::android::sp;
using namespace ::android::hardware::sensors::V1_0;
-#define SENSORS_SERVICE_NAME "sensors"
-
// Test environment for sensors
class SensorsHidlEnvironment : public ::testing::Environment {
public:
@@ -82,7 +80,7 @@
};
void SensorsHidlEnvironment::SetUp() {
- sensors = ISensors::getService(SENSORS_SERVICE_NAME, false);
+ sensors = ISensors::getService();
ALOGI_IF(sensors, "sensors is not nullptr, %p", sensors.get());
ASSERT_NE(sensors, nullptr);
diff --git a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py
index db210d9..3c7fbbb 100644
--- a/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py
+++ b/sensors/1.0/vts/functional/vts/testcases/hal/sensors/hidl/host/SensorsHidlTest.py
@@ -84,7 +84,7 @@
logging.info("PERMISSION_DENIED: %s", sensors_types.PERMISSION_DENIED)
logging.info("INVALID_OPERATION: %s", sensors_types.INVALID_OPERATION)
asserts.assertEqual(sensors_types.OK, 0);
- asserts.assertEqual(sensors_types.BAD_VALUE, 1);
+ asserts.assertEqual(sensors_types.BAD_VALUE, -22);
logging.info("sensor types:")
logging.info("SENSOR_TYPE_ACCELEROMETER: %s", sensors_types.SENSOR_TYPE_ACCELEROMETER)
diff --git a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml
index ca8ecdb..9339165 100644
--- a/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml
+++ b/soundtrigger/2.0/vts/functional/vts/testcases/hal/soundtrigger/hidl/target/AndroidTest.xml
@@ -25,7 +25,8 @@
_64bit::DATA/nativetest64/soundtrigger_hidl_hal_test/soundtrigger_hidl_hal_test,
"/>
<option name="test-config-path" value="vts/testcases/hal/soundtrigger/hidl/target/HalSoundTriggerHidlTargetBasicTest.config" />
- <option name="binary-test-type" value="gtest" />
+ <option name="binary-test-type" value="hal_hidl_gtest" />
+ <option name="precondition-file-path-prefix" value="*/lib/hw/sound_trigger.primary." />
<option name="test-timeout" value="1m" />
</test>
</configuration>
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk
new file mode 100644
index 0000000..40536a5
--- /dev/null
+++ b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := TvCecHidlProfilingTest
+VTS_CONFIG_SRC_DIR := testcases/hal/tv_cec/hidl/host_profiling
+include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml
new file mode 100644
index 0000000..ffd857e
--- /dev/null
+++ b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/AndroidTest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCec.vts->/data/local/tmp/spec/HdmiCec.vts" />
+ <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/HdmiCecCallback.vts->/data/local/tmp/spec/HdmiCecCallback.vts" />
+ <option name="push" value="spec/hardware/interfaces/tv/cec/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
+ <option name="cleanup" value="true" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
+ </target_preparer>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="TvCecHidlProfilingTest" />
+ <option name="test-case-path" value="vts/testcases/hal/tv_cec/hidl/host/TvCecHidlTest" />
+ <option name="enable-profiling" value="true" />
+ </test>
+</configuration>
\ No newline at end of file
diff --git a/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tv/cec/1.0/vts/functional/vts/testcases/hal/tv_cec/hidl/host_profiling/__init__.py
diff --git a/tv/input/1.0/default/TvInput.cpp b/tv/input/1.0/default/TvInput.cpp
index 6181ffb..4cd1d40 100644
--- a/tv/input/1.0/default/TvInput.cpp
+++ b/tv/input/1.0/default/TvInput.cpp
@@ -196,7 +196,7 @@
return type != TV_STREAM_TYPE_BUFFER_PRODUCER;
}
-ITvInput* HIDL_FETCH_ITvInput(const char* name) {
+ITvInput* HIDL_FETCH_ITvInput(const char* /* name */) {
int ret = 0;
const hw_module_t* hw_module = nullptr;
tv_input_device_t* input_device;
@@ -213,7 +213,8 @@
}
}
else {
- LOG(ERROR) << "hw_get_module " << name << " failed: " << ret;
+ LOG(ERROR) << "hw_get_module " << TV_INPUT_HARDWARE_MODULE_ID
+ << " failed: " << ret;
return nullptr;
}
}
diff --git a/tv/input/1.0/default/service.cpp b/tv/input/1.0/default/service.cpp
index d59c848..d904d0b 100644
--- a/tv/input/1.0/default/service.cpp
+++ b/tv/input/1.0/default/service.cpp
@@ -27,5 +27,5 @@
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
- return defaultPassthroughServiceImplementation<ITvInput>("tv.input");
+ return defaultPassthroughServiceImplementation<ITvInput>();
}
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
index 9b49078..b5becd6 100644
--- a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
+++ b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest.py
@@ -39,7 +39,6 @@
target_version=1.0,
target_package="android.hardware.tv.input",
target_component_name="ITvInput",
- hw_binder_service_name="tv-input-1-0",
bits=64 if self.dut.is64Bit else 32)
self.dut.shell.InvokeTerminal("one")
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk
new file mode 100644
index 0000000..514df20
--- /dev/null
+++ b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := TvInputHidlProfilingTest
+VTS_CONFIG_SRC_DIR := testcases/hal/tv_input/hidl/host_profiling
+include test/vts/tools/build/Android.host_config.mk
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml
new file mode 100644
index 0000000..5b8e6f9
--- /dev/null
+++ b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/AndroidTest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Tv Input HIDL HAL's host-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInput.vts->/data/local/tmp/spec/TvInput.vts" />
+ <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/TvInputCallback.vts->/data/local/tmp/spec/TvInputCallback.vts" />
+ <option name="push" value="spec/hardware/interfaces/tv/input/1.0/vts/types.vts->/data/local/tmp/spec/types.vts" />
+ <option name="cleanup" value="true" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer">
+ </target_preparer>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="TvInputHidlProfilingTest" />
+ <option name="test-case-path" value="vts/testcases/hal/tv_input/hidl/host/TvInputHidlTest" />
+ <option name="enable-profiling" value="true" />
+ </test>
+</configuration>
diff --git a/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tv/input/1.0/vts/functional/vts/testcases/hal/tv_input/hidl/host_profiling/__init__.py
diff --git a/update-base-files.sh b/update-base-files.sh
index e2331f5..1eb6b51 100755
--- a/update-base-files.sh
+++ b/update-base-files.sh
@@ -25,6 +25,9 @@
hidl-gen $options \
-o hardware/libhardware/include/hardware/nfc-base.h \
android.hardware.nfc@1.0
+hidl-gen $options \
+ -o hardware/libhardware/include/hardware/gnss-base.h \
+ android.hardware.gnss@1.0
# system/core
hidl-gen $options \
diff --git a/usb/1.0/Android.bp b/usb/1.0/Android.bp
new file mode 100644
index 0000000..8b84a4a
--- /dev/null
+++ b/usb/1.0/Android.bp
@@ -0,0 +1,64 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+ name: "android.hardware.usb@1.0_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+ srcs: [
+ "types.hal",
+ "IUsb.hal",
+ "IUsbCallback.hal",
+ ],
+ out: [
+ "android/hardware/usb/1.0/types.cpp",
+ "android/hardware/usb/1.0/UsbAll.cpp",
+ "android/hardware/usb/1.0/UsbCallbackAll.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.usb@1.0_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+ srcs: [
+ "types.hal",
+ "IUsb.hal",
+ "IUsbCallback.hal",
+ ],
+ out: [
+ "android/hardware/usb/1.0/types.h",
+ "android/hardware/usb/1.0/IUsb.h",
+ "android/hardware/usb/1.0/IHwUsb.h",
+ "android/hardware/usb/1.0/BnHwUsb.h",
+ "android/hardware/usb/1.0/BpHwUsb.h",
+ "android/hardware/usb/1.0/BsUsb.h",
+ "android/hardware/usb/1.0/IUsbCallback.h",
+ "android/hardware/usb/1.0/IHwUsbCallback.h",
+ "android/hardware/usb/1.0/BnHwUsbCallback.h",
+ "android/hardware/usb/1.0/BpHwUsbCallback.h",
+ "android/hardware/usb/1.0/BsUsbCallback.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.usb@1.0",
+ generated_sources: ["android.hardware.usb@1.0_genc++"],
+ generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
+ export_generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "android.hidl.base@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hidl.base@1.0",
+ ],
+}
diff --git a/usb/1.0/Android.mk b/usb/1.0/Android.mk
new file mode 100644
index 0000000..0eded5b
--- /dev/null
+++ b/usb/1.0/Android.mk
@@ -0,0 +1,427 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+ android.hidl.base@1.0-java \
+
+
+#
+# Build types.hal (PortDataRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortDataRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortDataRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortMode)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortMode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortMode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortPowerRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortPowerRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortPowerRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRoleType)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRoleType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortRoleType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortStatus)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Status)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Status.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.Status
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsb.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsb.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsb.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::IUsb
+
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsbCallback.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsbCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::IUsbCallback
+
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android.hidl.base@1.0-java-static \
+
+
+#
+# Build types.hal (PortDataRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortDataRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortDataRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortMode)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortMode.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortMode
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortPowerRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortPowerRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortPowerRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRole)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRole.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortRole
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortRoleType)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortRoleType.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortRoleType
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (PortStatus)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/PortStatus.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.PortStatus
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build types.hal (Status)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Status.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::types.Status
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsb.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsb.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsb.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::IUsb
+
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IUsbCallback.hal
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/IUsbCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IUsbCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0::IUsbCallback
+
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.usb@1.0-java-constants
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(local-generated-sources-dir)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+#
+GEN := $(intermediates)/android/hardware/usb/V1_0/Constants.java
+$(GEN): $(HIDL)
+$(GEN): $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/IUsb.hal
+$(GEN): $(LOCAL_PATH)/IUsbCallback.hal
+
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava-constants \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.usb@1.0
+
+$(GEN):
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+# Avoid dependency cycle of framework.jar -> this-library -> framework.jar
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES := core-oj
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/usb/1.0/IUsb.hal b/usb/1.0/IUsb.hal
new file mode 100644
index 0000000..965326a
--- /dev/null
+++ b/usb/1.0/IUsb.hal
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.usb@1.0;
+
+import IUsbCallback;
+
+interface IUsb {
+ /*
+ * This function is used to change the port role of a specific port.
+ * For example, when PD_SWAP or PR_SWAP is supported.
+ * This is function is asynchronous. The status of the role switch
+ * will be informed through IUsbCallback object's notifyPortStatusChange
+ * method.
+ *
+ * @param portName name of the port for which the role has to be changed
+ * @param role the new port role.
+ */
+ oneway switchRole(string portName, PortRole role);
+
+ /*
+ * This function is used to register a callback function which is
+ * called by the HAL whenever there is a change in the port state.
+ * i.e. DATA_ROLE, POWER_ROLE or MODE.
+ *
+ * Also the same callback object would be called to inform the caller
+ * of the roleSwitch status.
+ *
+ * @param callback IUsbCallback object used to convey status to the
+ * userspace.
+ */
+ oneway setCallback(IUsbCallback callback);
+
+ /*
+ * This functions is used to request the hal for the current status
+ * status of the Type-C ports. This method is async/oneway. The result of the
+ * query would be sent through the IUsbCallback object's notifyRoleSwitchStatus
+ * to the caller. This api would would let the caller know of the number
+ * of type-c ports that are present and their connection status through the
+ * PortStatus type.
+ */
+ oneway queryPortStatus();
+};
+
diff --git a/usb/1.0/IUsbCallback.hal b/usb/1.0/IUsbCallback.hal
new file mode 100644
index 0000000..b665ba3
--- /dev/null
+++ b/usb/1.0/IUsbCallback.hal
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.usb@1.0;
+
+/*
+ * Callback object used for all the IUsb async methods which expects a result.
+ * Caller is expected to register the callback object using setCallback method
+ * to receive updates on the PortStatus.
+ */
+interface IUsbCallback {
+ /*
+ * Used to convey the current port status to the caller.
+ * Called either when PortState changes due to the port partner (or)
+ * when caller requested for the PortStatus update through queryPortStatus.
+ *
+ * @param currentPortStatus vector object of current status of all the
+ * typeC ports in the device.
+ * @param retval SUCCESS when query was done successfully.
+ * ERROR otherwise.
+ */
+ oneway notifyPortStatusChange(vec<PortStatus> currentPortStatus, Status retval);
+
+ /*
+ * Used to notify the result of the switchRole call to the caller.
+ *
+ * @param portName name of the port for which the roleswap is requested.
+ * @param newRole the new role requested by the caller.
+ * @param retval SUCCESS if the role switch succeeded. FAILURE otherwise.
+ */
+ oneway notifyRoleSwitchStatus(string portName, PortRole newRole, Status retval);
+};
diff --git a/usb/1.0/default/Android.mk b/usb/1.0/default/Android.mk
new file mode 100644
index 0000000..09d7ce7
--- /dev/null
+++ b/usb/1.0/default/Android.mk
@@ -0,0 +1,21 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE := android.hardware.usb@1.0-service
+LOCAL_INIT_RC := android.hardware.usb@1.0-service.rc
+LOCAL_SRC_FILES := \
+ service.cpp \
+ Usb.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libhidlbase \
+ libhidltransport \
+ liblog \
+ libhwbinder \
+ libutils \
+ libhardware \
+ android.hardware.usb@1.0 \
+
+include $(BUILD_EXECUTABLE)
diff --git a/usb/1.0/default/Usb.cpp b/usb/1.0/default/Usb.cpp
new file mode 100644
index 0000000..f46ff66
--- /dev/null
+++ b/usb/1.0/default/Usb.cpp
@@ -0,0 +1,428 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <dirent.h>
+#include <iostream>
+#include <fstream>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <cutils/uevent.h>
+#include <sys/epoll.h>
+#include <utils/Errors.h>
+#include <utils/StrongPointer.h>
+
+#include "Usb.h"
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_0 {
+namespace implementation {
+
+int32_t readFile(std::string filename, std::string& contents) {
+ std::ifstream file(filename);
+
+ if (file.is_open()) {
+ getline(file, contents);
+ file.close();
+ return 0;
+ }
+ return -1;
+}
+
+std::string appendRoleNodeHelper(const std::string portName, PortRoleType type) {
+ std::string node("/sys/class/dual_role_usb/" + portName);
+
+ switch(type) {
+ case PortRoleType::DATA_ROLE:
+ return node + "/data_role";
+ case PortRoleType::POWER_ROLE:
+ return node + "/power_role";
+ default:
+ return node + "/mode";
+ }
+}
+
+std::string convertRoletoString(PortRole role) {
+ if (role.type == PortRoleType::POWER_ROLE) {
+ if (role.role == static_cast<uint32_t> (PortPowerRole::SOURCE))
+ return "source";
+ else if (role.role == static_cast<uint32_t> (PortPowerRole::SINK))
+ return "sink";
+ } else if (role.type == PortRoleType::DATA_ROLE) {
+ if (role.role == static_cast<uint32_t> (PortDataRole::HOST))
+ return "host";
+ if (role.role == static_cast<uint32_t> (PortDataRole::DEVICE))
+ return "device";
+ } else if (role.type == PortRoleType::MODE) {
+ if (role.role == static_cast<uint32_t> (PortMode::UFP))
+ return "ufp";
+ if (role.role == static_cast<uint32_t> (PortMode::DFP))
+ return "dfp";
+ }
+ return "none";
+}
+
+Return<void> Usb::switchRole(const hidl_string& portName,
+ const PortRole& newRole) {
+ std::string filename = appendRoleNodeHelper(std::string(portName.c_str()),
+ newRole.type);
+ std::ofstream file(filename);
+ std::string written;
+
+ ALOGI("filename write: %s role:%d", filename.c_str(), newRole.role);
+
+ if (file.is_open()) {
+ file << convertRoletoString(newRole).c_str();
+ file.close();
+ if (!readFile(filename, written)) {
+ ALOGI("written: %s", written.c_str());
+ if (written == convertRoletoString(newRole)) {
+ ALOGI("Role switch successfull");
+ Return<void> ret =
+ mCallback->notifyRoleSwitchStatus(portName, newRole,
+ Status::SUCCESS);
+ if (!ret.isOk())
+ ALOGE("RoleSwitchStatus error %s",
+ ret.description().c_str());
+ }
+ }
+ }
+
+ Return<void> ret = mCallback->notifyRoleSwitchStatus(portName, newRole, Status::ERROR);
+ if (!ret.isOk())
+ ALOGE("RoleSwitchStatus error %s", ret.description().c_str());
+
+ return Void();
+}
+
+Status getCurrentRoleHelper(std::string portName,
+ PortRoleType type, uint32_t ¤tRole) {
+ std::string filename;
+ std::string roleName;
+
+ if (type == PortRoleType::POWER_ROLE) {
+ filename = "/sys/class/dual_role_usb/" +
+ portName + "/power_role";
+ currentRole = static_cast<uint32_t>(PortPowerRole::NONE);
+ } else if (type == PortRoleType::DATA_ROLE) {
+ filename = "/sys/class/dual_role_usb/" +
+ portName + "/data_role";
+ currentRole = static_cast<uint32_t> (PortDataRole::NONE);
+ } else if (type == PortRoleType::MODE) {
+ filename = "/sys/class/dual_role_usb/" +
+ portName + "/mode";
+ currentRole = static_cast<uint32_t> (PortMode::NONE);
+ }
+
+ if (readFile(filename, roleName)) {
+ ALOGE("getCurrentRole: Failed to open filesystem node");
+ return Status::ERROR;
+ }
+
+ if (roleName == "dfp")
+ currentRole = static_cast<uint32_t> (PortMode::DFP);
+ else if (roleName == "ufp")
+ currentRole = static_cast<uint32_t> (PortMode::UFP);
+ else if (roleName == "source")
+ currentRole = static_cast<uint32_t> (PortPowerRole::SOURCE);
+ else if (roleName == "sink")
+ currentRole = static_cast<uint32_t> (PortPowerRole::SINK);
+ else if (roleName == "host")
+ currentRole = static_cast<uint32_t> (PortDataRole::HOST);
+ else if (roleName == "device")
+ currentRole = static_cast<uint32_t> (PortDataRole::DEVICE);
+ else if (roleName != "none") {
+ /* case for none has already been addressed.
+ * so we check if the role isnt none.
+ */
+ return Status::UNRECOGNIZED_ROLE;
+ }
+ return Status::SUCCESS;
+}
+
+Status getTypeCPortNamesHelper(std::vector<std::string>& names) {
+ DIR *dp;
+
+ dp = opendir("/sys/class/dual_role_usb");
+ if (dp != NULL)
+ {
+rescan:
+ int32_t ports = 0;
+ int32_t current = 0;
+ struct dirent *ep;
+
+ while ((ep = readdir (dp))) {
+ if (ep->d_type == DT_LNK) {
+ ports++;
+ }
+ }
+ names.resize(ports);
+ rewinddir(dp);
+
+ while ((ep = readdir (dp))) {
+ /* Check to see if new ports were added since the first pass. */
+ if (current >= ports) {
+ rewinddir(dp);
+ goto rescan;
+ }
+
+ if (ep->d_type == DT_LNK) {
+ names[current++] = ep->d_name;
+ }
+ }
+
+ closedir (dp);
+ return Status::SUCCESS;
+ }
+
+ ALOGE("Failed to open /sys/class/dual_role_usb");
+ return Status::ERROR;
+}
+
+bool canSwitchRoleHelper(const std::string portName, PortRoleType type) {
+ std::string filename = appendRoleNodeHelper(portName, type);
+ std::ofstream file(filename);
+
+ if (file.is_open()) {
+ file.close();
+ return true;
+ }
+ return false;
+}
+
+Status getPortModeHelper(const std::string portName, PortMode& portMode) {
+ std::string filename = "/sys/class/dual_role_usb/" +
+ std::string(portName.c_str()) + "/supported_modes";
+ std::string modes;
+
+ if (readFile(filename, modes)) {
+ ALOGE("getSupportedRoles: Failed to open filesystem node");
+ return Status::ERROR;
+ }
+
+ if (modes == "ufp dfp")
+ portMode = PortMode::DRP;
+ else if (modes == "ufp")
+ portMode = PortMode::UFP;
+ else if (modes == "dfp")
+ portMode = PortMode::DFP;
+ else
+ return Status::UNRECOGNIZED_ROLE;
+
+ return Status::SUCCESS;
+}
+
+Status getPortStatusHelper (hidl_vec<PortStatus>& currentPortStatus) {
+ std::vector<std::string> names;
+ Status result = getTypeCPortNamesHelper(names);
+
+ if (result == Status::SUCCESS) {
+ currentPortStatus.resize(names.size());
+ for(std::vector<std::string>::size_type i = 0; i != names.size(); i++) {
+ ALOGI("%s", names[i].c_str());
+ currentPortStatus[i].portName = names[i];
+
+ uint32_t currentRole;
+ if (getCurrentRoleHelper(names[i], PortRoleType::POWER_ROLE,
+ currentRole) == Status::SUCCESS) {
+ currentPortStatus[i].currentPowerRole =
+ static_cast<PortPowerRole> (currentRole);
+ } else {
+ ALOGE("Error while retreiving portNames");
+ goto done;
+ }
+
+ if (getCurrentRoleHelper(names[i],
+ PortRoleType::DATA_ROLE, currentRole) == Status::SUCCESS) {
+ currentPortStatus[i].currentDataRole =
+ static_cast<PortDataRole> (currentRole);
+ } else {
+ ALOGE("Error while retreiving current port role");
+ goto done;
+ }
+
+ if (getCurrentRoleHelper(names[i], PortRoleType::MODE,
+ currentRole) == Status::SUCCESS) {
+ currentPortStatus[i].currentMode =
+ static_cast<PortMode> (currentRole);
+ } else {
+ ALOGE("Error while retreiving current data role");
+ goto done;
+ }
+
+ currentPortStatus[i].canChangeMode =
+ canSwitchRoleHelper(names[i], PortRoleType::MODE);
+ currentPortStatus[i].canChangeDataRole =
+ canSwitchRoleHelper(names[i], PortRoleType::DATA_ROLE);
+ currentPortStatus[i].canChangePowerRole =
+ canSwitchRoleHelper(names[i], PortRoleType::POWER_ROLE);
+
+ ALOGI("canChangeMode: %d canChagedata: %d canChangePower:%d",
+ currentPortStatus[i].canChangeMode,
+ currentPortStatus[i].canChangeDataRole,
+ currentPortStatus[i].canChangePowerRole);
+
+ if (getPortModeHelper(names[i], currentPortStatus[i].supportedModes)
+ != Status::SUCCESS) {
+ ALOGE("Error while retrieving port modes");
+ goto done;
+ }
+ }
+ return Status::SUCCESS;
+ }
+done:
+ return Status::ERROR;
+}
+
+Return<void> Usb::queryPortStatus() {
+ hidl_vec<PortStatus> currentPortStatus;
+ Status status;
+
+ status = getPortStatusHelper(currentPortStatus);
+ Return<void> ret = mCallback->notifyPortStatusChange(currentPortStatus,
+ status);
+ if (!ret.isOk())
+ ALOGE("queryPortStatus error %s", ret.description().c_str());
+
+ return Void();
+}
+struct data {
+ int uevent_fd;
+ android::hardware::usb::V1_0::implementation::Usb *usb;
+};
+
+static void uevent_event(uint32_t /*epevents*/, struct data *payload) {
+ char msg[UEVENT_MSG_LEN + 2];
+ char *cp;
+ int n;
+
+ n = uevent_kernel_multicast_recv(payload->uevent_fd, msg, UEVENT_MSG_LEN);
+ if (n <= 0)
+ return;
+ if (n >= UEVENT_MSG_LEN) /* overflow -- discard */
+ return;
+
+ msg[n] = '\0';
+ msg[n + 1] = '\0';
+ cp = msg;
+
+ while (*cp) {
+ if (!strcmp(cp, "SUBSYSTEM=dual_role_usb")) {
+ ALOGE("uevent received %s", cp);
+ if (payload->usb->mCallback != NULL) {
+ hidl_vec<PortStatus> currentPortStatus;
+ Status status = getPortStatusHelper(currentPortStatus);
+ Return<void> ret =
+ payload->usb->mCallback->notifyPortStatusChange(currentPortStatus, status);
+ if (!ret.isOk())
+ ALOGE("error %s", ret.description().c_str());
+ }
+ break;
+ }
+ /* advance to after the next \0 */
+ while (*cp++);
+ }
+}
+
+void* work(void* param) {
+ int epoll_fd, uevent_fd;
+ struct epoll_event ev;
+ int nevents = 0;
+ struct data payload;
+
+ ALOGE("creating thread");
+
+ uevent_fd = uevent_open_socket(64*1024, true);
+
+ if (uevent_fd < 0) {
+ ALOGE("uevent_init: uevent_open_socket failed\n");
+ return NULL;
+ }
+
+ payload.uevent_fd = uevent_fd;
+ payload.usb = (android::hardware::usb::V1_0::implementation::Usb *)param;
+
+ fcntl(uevent_fd, F_SETFL, O_NONBLOCK);
+
+ ev.events = EPOLLIN;
+ ev.data.ptr = (void *)uevent_event;
+
+ epoll_fd = epoll_create(64);
+ if (epoll_fd == -1) {
+ ALOGE("epoll_create failed; errno=%d", errno);
+ goto error;
+ }
+
+ if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, uevent_fd, &ev) == -1) {
+ ALOGE("epoll_ctl failed; errno=%d", errno);
+ goto error;
+ }
+
+ while (1) {
+ struct epoll_event events[64];
+
+ nevents = epoll_wait(epoll_fd, events, 64, -1);
+ if (nevents == -1) {
+ if (errno == EINTR)
+ continue;
+ ALOGE("usb epoll_wait failed; errno=%d", errno);
+ break;
+ }
+
+ for (int n = 0; n < nevents; ++n) {
+ if (events[n].data.ptr)
+ (*(void (*)(int, struct data *payload))events[n].data.ptr)
+ (events[n].events, &payload);
+ }
+ }
+
+error:
+ close(uevent_fd);
+
+ if (epoll_fd >= 0)
+ close(epoll_fd);
+
+ return NULL;
+}
+
+
+Return<void> Usb::setCallback(const sp<IUsbCallback>& callback) {
+
+ if (mCallback != NULL) {
+ ALOGE("Callback already registered");
+ return Void();
+ }
+
+ mCallback = callback;
+ ALOGI("registering callback");
+
+ if (pthread_create(&mPoll, NULL, work, this)) {
+ ALOGE("pthread creation failed %d", errno);
+ mCallback = NULL;
+ return Void();
+ }
+
+ return Void();
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace usb
+} // namespace hardware
+} // namespace android
diff --git a/usb/1.0/default/Usb.h b/usb/1.0/default/Usb.h
new file mode 100644
index 0000000..cf418f4
--- /dev/null
+++ b/usb/1.0/default/Usb.h
@@ -0,0 +1,50 @@
+#ifndef ANDROID_HARDWARE_USB_V1_0_USB_H
+#define ANDROID_HARDWARE_USB_V1_0_USB_H
+
+#include <android/hardware/usb/1.0/IUsb.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <utils/Log.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "android.hardware.usb@1.0-service"
+#define UEVENT_MSG_LEN 2048
+
+namespace android {
+namespace hardware {
+namespace usb {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::usb::V1_0::IUsb;
+using ::android::hardware::usb::V1_0::IUsbCallback;
+using ::android::hardware::usb::V1_0::PortRole;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct Usb : public IUsb {
+ Return<void> switchRole(const hidl_string& portName, const PortRole& role) override;
+ Return<void> setCallback(const sp<IUsbCallback>& callback) override;
+ Return<void> queryPortStatus() override;
+
+ sp<IUsbCallback> mCallback;
+ private:
+ pthread_t mPoll;
+};
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace usb
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_USB_V1_0_USB_H
diff --git a/usb/1.0/default/android.hardware.usb@1.0-service.rc b/usb/1.0/default/android.hardware.usb@1.0-service.rc
new file mode 100644
index 0000000..77dfc93
--- /dev/null
+++ b/usb/1.0/default/android.hardware.usb@1.0-service.rc
@@ -0,0 +1,4 @@
+service usb-hal-1-0 /system/bin/hw/android.hardware.usb@1.0-service
+ class hal
+ user system
+ group system
diff --git a/usb/1.0/default/service.cpp b/usb/1.0/default/service.cpp
new file mode 100644
index 0000000..b4db241
--- /dev/null
+++ b/usb/1.0/default/service.cpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <hidl/HidlTransportSupport.h>
+#include "Usb.h"
+
+using android::sp;
+
+// libhwbinder:
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+
+// Generated HIDL files
+using android::hardware::usb::V1_0::IUsb;
+using android::hardware::usb::V1_0::implementation::Usb;
+
+int main() {
+ const char instance[] = "usb_hal";
+
+ android::sp<IUsb> service = new Usb();
+
+ configureRpcThreadpool(1, true /*callerWillJoin*/);
+ service->registerAsService(instance);
+
+ ALOGI("USB HAL Ready.");
+ joinRpcThreadpool();
+}
diff --git a/usb/1.0/types.hal b/usb/1.0/types.hal
new file mode 100644
index 0000000..17cd8c7
--- /dev/null
+++ b/usb/1.0/types.hal
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.usb@1.0;
+
+
+enum Status : uint32_t {
+ SUCCESS = 0,
+
+ /*
+ * error value when the HAL operation fails for reasons not listed here.
+ */
+ ERROR = 1,
+
+ /*
+ * error value returned when input argument is invalid.
+ */
+ INVALID_ARGUMENT = 2,
+
+ /*
+ * error value returned when role string is unrecognized.
+ */
+ UNRECOGNIZED_ROLE = 3,
+};
+
+/*
+ * Denotes the Port role type.
+ * Passed as an argument for functions used to query or change port roles.
+ */
+enum PortRoleType : uint32_t {
+ /*
+ * Denotes the data role of the port.
+ * The port can either be a "host" or a "device" for data.
+ * This maps to the PortDataRole enum.
+ */
+ DATA_ROLE = 0,
+
+ /*
+ * Denotes the power role of the port.
+ * The port can either be a "source" or "sink" for power.
+ * This maps to PortPowerRole enum.
+ */
+ POWER_ROLE = 1,
+
+ /*
+ * USB ports can be a pure DFP port which can only act
+ * as a host. A UFP port which can only act as a device.
+ * Or a dual role ports which can either can as a host or
+ * a device. This property is used to mention them.
+ */
+ MODE = 2,
+};
+
+@export
+enum PortDataRole : uint32_t {
+ /*
+ * Indicates that the port does not have a data role.
+ * In case of DRP, the current data role of the port is only resolved
+ * when the type-c handshake happens.
+ */
+ NONE = 0,
+
+ /*
+ * Indicates that the port is acting as a host for data.
+ */
+ HOST = 1,
+
+ /*
+ * Indicated that the port is acting as a device for data.
+ */
+ DEVICE = 2,
+
+ NUM_DATA_ROLES = 3,
+};
+
+@export
+enum PortPowerRole : uint32_t {
+ /*
+ * Indicates that the port does not have a power role.
+ * In case of DRP, the current power role of the port is only resolved
+ * when the type-c handshake happens.
+ */
+ NONE = 0,
+
+ /*
+ * Indicates that the port is supplying power to the other port.
+ */
+ SOURCE = 1,
+
+ /*
+ * Indicates that the port is sinking power from the other port.
+ */
+ SINK = 2,
+
+ NUM_POWER_ROLES = 3,
+};
+
+@export
+enum PortMode : uint32_t {
+ /*
+ * Indicates that the port does not have a mode.
+ * In case of DRP, the current mode of the port is only resolved
+ * when the type-c handshake happens.
+ */
+ NONE = 0,
+ /*
+ * Indicates that port can only act as device for data and sink for power.
+ */
+ UFP = 1,
+
+ /*
+ * Indicates the port can only act as host for data and source for power.
+ */
+ DFP = 2,
+
+ /*
+ * Indicates can either act as UFP or DFP at a given point of time.
+ */
+ DRP = 3,
+
+ NUM_MODES = 4,
+};
+
+/*
+ * Used as a container to send port role information.
+ */
+struct PortRole {
+ /*
+ * Indicates the type of Port Role.
+ * Maps to the PortRoleType enum.
+ */
+ PortRoleType type;
+
+ /*
+ * when type is HAL_USB_DATA_ROLE pass values from enum PortDataRole.
+ * when type is HAL_USB_POWER_ROLE pass values from enum PortPowerRole.
+ * when type is HAL_USB_MODE pass values from enum PortMode.
+ */
+ uint32_t role;
+};
+
+/*
+ * Used as the container to report data back to the caller.
+ * Represents the current connection status of a single USB port.
+ */
+struct PortStatus {
+ /*
+ * Name of the port.
+ * Used as the port's id by the caller.
+ */
+ string portName;
+
+ /*
+ * Data role of the port.
+ */
+ PortDataRole currentDataRole;
+
+ /*
+ * Power Role of thte port.
+ */
+ PortPowerRole currentPowerRole;
+
+ /*
+ * Mode in which the port is connected.
+ * Can be UFP or DFP.
+ */
+ PortMode currentMode;
+
+ /*
+ * True indicates that the port's mode can
+ * be changed. False otherwise.
+ */
+ bool canChangeMode;
+
+ /*
+ * True indicates that the port's data role
+ * can be changed. False otherwise.
+ * For example, true if Type-C PD PD_SWAP
+ * is supported.
+ */
+ bool canChangeDataRole;
+
+ /*
+ * True indicates that the port's power role
+ * can be changed. False otherwise.
+ * For example, true if Type-C PD PR_SWAP
+ * is supported.
+ */
+ bool canChangePowerRole;
+
+ /*
+ * Identifies the type of the local port.
+ *
+ * UFP - Indicates that port can only act as device for
+ * data and sink for power.
+ * DFP - Indicates the port can only act as host for data
+ * and source for power.
+ * DRP - Indicates can either act as UFP or DFP at a
+ * given point of time.
+ */
+ PortMode supportedModes;
+};
diff --git a/usb/Android.bp b/usb/Android.bp
new file mode 100644
index 0000000..bbb3e4b
--- /dev/null
+++ b/usb/Android.bp
@@ -0,0 +1,4 @@
+// This is an autogenerated file, do not edit.
+subdirs = [
+ "1.0",
+]
diff --git a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
index dffcfbb..4a20ea5 100644
--- a/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
+++ b/vehicle/2.0/default/tests/VehicleHalManager_test.cpp
@@ -353,7 +353,7 @@
TEST_F(VehicleHalManagerTest, get_NegativeCases) {
// Write-only property must fail.
invokeGet(VehicleProperty::HVAC_SEAT_TEMPERATURE, 0);
- ASSERT_EQ(StatusCode::INVALID_ARG, actualStatusCode);
+ ASSERT_EQ(StatusCode::ACCESS_DENIED, actualStatusCode);
// Unknown property must fail.
invokeGet(VehicleProperty::MIRROR_Z_MOVE, 0);
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
index b4eb484..5d2e6fe 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.cpp
@@ -87,7 +87,7 @@
}
if (!checkReadPermission(*config, getCaller())) {
- _hidl_cb(StatusCode::INVALID_ARG, kEmptyValue);
+ _hidl_cb(StatusCode::ACCESS_DENIED, kEmptyValue);
return Void();
}
@@ -108,7 +108,7 @@
}
if (!checkWritePermission(*config, getCaller())) {
- return StatusCode::INVALID_ARG;
+ return StatusCode::ACCESS_DENIED;
}
handlePropertySetEvent(value);
@@ -122,6 +122,7 @@
const sp<IVehicleCallback> &callback,
const hidl_vec<SubscribeOptions> &options) {
hidl_vec<SubscribeOptions> verifiedOptions(options);
+ auto caller = getCaller();
for (size_t i = 0; i < verifiedOptions.size(); i++) {
SubscribeOptions& ops = verifiedOptions[i];
VehicleProperty prop = ops.propId;
@@ -133,6 +134,10 @@
return StatusCode::INVALID_ARG;
}
+ if (!checkAcl(caller.uid, config->prop, VehiclePropertyAccess::READ)) {
+ return StatusCode::ACCESS_DENIED;
+ }
+
if (!isSubscribable(*config, ops.flags)) {
ALOGE("Failed to subscribe: property 0x%x is not subscribable",
prop);
@@ -304,15 +309,13 @@
return true;
}
-bool checkAcl(const PropertyAclMap& aclMap,
- uid_t callerUid,
- VehicleProperty propertyId,
- VehiclePropertyAccess requiredAccess) {
+bool VehicleHalManager::checkAcl(uid_t callerUid, VehicleProperty propertyId,
+ VehiclePropertyAccess requiredAccess) const {
if (callerUid == AID_SYSTEM && isSystemProperty(propertyId)) {
return true;
}
- auto range = aclMap.equal_range(propertyId);
+ auto range = mPropertyAclMap.equal_range(propertyId);
for (auto it = range.first; it != range.second; ++it) {
auto& acl = it->second;
if (acl.uid == callerUid && (acl.access & requiredAccess)) {
@@ -328,8 +331,7 @@
ALOGW("Property 0%x has no write access", config.prop);
return false;
}
- return checkAcl(mPropertyAclMap, caller.uid, config.prop,
- VehiclePropertyAccess::WRITE);
+ return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::WRITE);
}
bool VehicleHalManager::checkReadPermission(const VehiclePropConfig &config,
@@ -339,8 +341,7 @@
return false;
}
- return checkAcl(mPropertyAclMap, caller.uid, config.prop,
- VehiclePropertyAccess::READ);
+ return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::READ);
}
void VehicleHalManager::handlePropertySetEvent(const VehiclePropValue& value) {
diff --git a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
index 519b09b..6768741 100644
--- a/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
+++ b/vehicle/2.0/default/vehicle_hal_manager/VehicleHalManager.h
@@ -100,6 +100,9 @@
const Caller& callee) const;
bool checkReadPermission(const VehiclePropConfig &config,
const Caller& caller) const;
+ bool checkAcl(uid_t callerUid,
+ VehicleProperty propertyId,
+ VehiclePropertyAccess requiredAccess) const;
static bool isSubscribable(const VehiclePropConfig& config,
SubscribeFlags flags);
diff --git a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
index 5faf78a..cd52abf 100644
--- a/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
+++ b/vehicle/2.0/vts/functional/vts/testcases/hal/vehicle/hidl/host/VehicleHidlTest.py
@@ -20,6 +20,7 @@
from vts.runners.host import asserts
from vts.runners.host import base_test_with_webdb
+from vts.runners.host import const
from vts.runners.host import test_runner
from vts.utils.python.controllers import android_device
from vts.utils.python.profiling import profiling_utils
@@ -35,6 +36,10 @@
self.dut.shell.InvokeTerminal("one")
self.dut.shell.one.Execute("setenforce 0") # SELinux permissive mode
+ results = self.dut.shell.one.Execute("id -u system")
+ system_uid = results[const.STDOUT][0].strip()
+ logging.info("system_uid: %s", system_uid)
+
self.dut.hal.InitHidlHal(
target_type="vehicle",
target_basepaths=self.dut.libPaths,
@@ -45,6 +50,7 @@
bits=64 if self.dut.is64Bit else 32)
self.vehicle = self.dut.hal.vehicle # shortcut
+ self.vehicle.SetCallerUid(system_uid)
self.vtypes = self.dut.hal.vehicle.GetHidlTypeInterface("types")
logging.info("vehicle types: %s", self.vtypes)
diff --git a/vibrator/1.0/default/Vibrator.cpp b/vibrator/1.0/default/Vibrator.cpp
index e86e681..8c82bcd 100644
--- a/vibrator/1.0/default/Vibrator.cpp
+++ b/vibrator/1.0/default/Vibrator.cpp
@@ -50,18 +50,18 @@
return Status::OK;
}
-IVibrator* HIDL_FETCH_IVibrator(const char *hal) {
+IVibrator* HIDL_FETCH_IVibrator(const char * /*hal*/) {
vibrator_device_t *vib_device;
const hw_module_t *hw_module = nullptr;
- int ret = hw_get_module(hal, &hw_module);
+ int ret = hw_get_module(VIBRATOR_HARDWARE_MODULE_ID, &hw_module);
if (ret == 0) {
ret = vibrator_open(hw_module, &vib_device);
if (ret != 0) {
- ALOGE("vibrator_open %s failed: %d", hal, ret);
+ ALOGE("vibrator_open failed: %d", ret);
}
} else {
- ALOGE("hw_get_module %s failed: %d", hal, ret);
+ ALOGE("hw_get_module %s failed: %d", VIBRATOR_HARDWARE_MODULE_ID, ret);
}
if (ret == 0) {
diff --git a/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp b/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp
index ec8db3a..782a763 100644
--- a/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp
+++ b/vibrator/1.0/vts/functional/vibrator_hidl_hal_test.cpp
@@ -28,13 +28,11 @@
using ::android::hardware::Void;
using ::android::sp;
-#define VIBRATOR_SERVICE_NAME "vibrator"
-
// The main test class for VIBRATOR HIDL HAL.
class VibratorHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- vibrator = IVibrator::getService(VIBRATOR_SERVICE_NAME, false);
+ vibrator = IVibrator::getService(false);
ASSERT_NE(vibrator, nullptr);
}
diff --git a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py
index 498ea06..84f2907 100644
--- a/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py
+++ b/vibrator/1.0/vts/functional/vts/testcases/hal/vibrator/hidl/host/VibratorHidlTest.py
@@ -45,7 +45,6 @@
target_version=1.0,
target_package="android.hardware.vibrator",
target_component_name="IVibrator",
- hw_binder_service_name="vibrator",
bits=64 if self.dut.is64Bit else 32)
def tearDownClass(self):
diff --git a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
index aa5a48f..8c7a9b7 100644
--- a/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
+++ b/vr/1.0/vts/functional/vts/testcases/hal/vr/hidl/target/AndroidTest.xml
@@ -25,9 +25,11 @@
_64bit::DATA/nativetest64/vr_hidl_hal_test/vr_hidl_hal_test,
"/>
<option name="binary-test-type" value="hal_hidl_gtest" />
- <option name="hwbinder-service" value="android.hardware.vr" />
+ <!-- Uncomment this and comment 'precondition-feature' to run this test
+ only on devices using binderized VR HALs.
+ <option name="precondition-hwbinder-service" value="android.hardware.vr" /> -->
+ <option name="precondition-feature" value="android.hardware.vr.high_performance" />
<option name="test-timeout" value="1m" />
<option name="test-config-path" value="vts/testcases/hal/vr/hidl/target/VrHidlTargetTest.config" />
</test>
</configuration>
-
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp
index bbb9346..37fcfea 100644
--- a/wifi/1.0/default/hidl_struct_util.cpp
+++ b/wifi/1.0/default/hidl_struct_util.cpp
@@ -887,7 +887,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
legacy_request->publish_id = hidl_request.baseConfigs.sessionId;
legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
@@ -959,7 +959,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
legacy_request->subscribe_id = hidl_request.baseConfigs.sessionId;
legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
@@ -1044,7 +1044,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
legacy_request->publish_subscribe_id = hidl_request.discoverySessionId;
legacy_request->requestor_instance_id = hidl_request.peerId;
@@ -1071,7 +1071,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
// TODO: b/34059183 tracks missing configurations in legacy HAL or uknown defaults
legacy_request->master_pref = hidl_request.masterPref;
@@ -1161,7 +1161,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
legacy_request->vsa.payload_transmit_flag = hidl_request.transmitInNext16dws ? 1 : 0;
legacy_request->vsa.tx_in_discovery_beacon = hidl_request.transmitInDiscoveryBeacon;
@@ -1183,7 +1183,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
legacy_request->requestor_instance_id = hidl_request.peerId;
memcpy(legacy_request->peer_disc_mac_addr, hidl_request.peerDiscMacAddr.data(), 6);
@@ -1215,7 +1215,7 @@
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
legacy_request->rsp_code = hidl_request.acceptRequest ?
legacy_hal::NAN_DP_REQUEST_ACCEPT : legacy_hal::NAN_DP_REQUEST_REJECT;
diff --git a/wifi/1.0/default/service.cpp b/wifi/1.0/default/service.cpp
index 40e8b12..96d5c6f 100644
--- a/wifi/1.0/default/service.cpp
+++ b/wifi/1.0/default/service.cpp
@@ -34,7 +34,7 @@
// Setup hwbinder service
android::sp<android::hardware::wifi::V1_0::IWifi> service =
new android::hardware::wifi::V1_0::implementation::Wifi();
- CHECK_EQ(service->registerAsService("wifi"), android::NO_ERROR)
+ CHECK_EQ(service->registerAsService(), android::NO_ERROR)
<< "Failed to register wifi HAL";
joinRpcThreadpool();
diff --git a/wifi/1.0/vts/Android.mk b/wifi/1.0/vts/Android.mk
new file mode 100644
index 0000000..d347136
--- /dev/null
+++ b/wifi/1.0/vts/Android.mk
@@ -0,0 +1,20 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+# include hidl test makefiles
+include $(LOCAL_PATH)/functional/vts/testcases/hal/wifi/hidl/Android.mk
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/__init__.py b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/__init__.py
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/Android.mk b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/Android.mk
new file mode 100644
index 0000000..f9e3276
--- /dev/null
+++ b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/Android.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-subdir-makefiles)
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/__init__.py
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/Android.mk b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/Android.mk
new file mode 100644
index 0000000..40f154e
--- /dev/null
+++ b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/Android.mk
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := HalWifiHidlTargetTest
+VTS_CONFIG_SRC_DIR := testcases/hal/wifi/hidl/target
+include test/vts/tools/build/Android.host_config.mk
diff --git a/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/AndroidTest.xml b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/AndroidTest.xml
new file mode 100644
index 0000000..1099a5a
--- /dev/null
+++ b/wifi/1.0/vts/functional/vts/testcases/hal/wifi/hidl/target/AndroidTest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS WiFi HIDL HAL's basic target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="HalWifiHidlTargetTest" />
+ <option name="binary-test-sources" value="
+ _32bit::DATA/nativetest/wifi_hidl_test/wifi_hidl_test,
+ _64bit::DATA/nativetest64/wifi_hidl_test/wifi_hidl_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="test-timeout" value="10m" />
+ </test>
+</configuration>
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
index f88b866..050bba3 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
+++ b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
@@ -34,8 +34,6 @@
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
-const char kWifiServiceName[] = "wifi";
-
void stopFramework() {
ASSERT_EQ(std::system("svc wifi disable"), 0);
sleep(5);
@@ -44,7 +42,7 @@
void startFramework() { ASSERT_EQ(std::system("svc wifi enable"), 0); }
sp<IWifi> getWifi() {
- sp<IWifi> wifi = IWifi::getService(kWifiServiceName);
+ sp<IWifi> wifi = IWifi::getService();
return wifi;
}
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
index 3877b97..2f3405d 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
@@ -49,7 +49,7 @@
using ::android::wifi_system::SupplicantManager;
namespace {
-const char kSupplicantServiceName[] = "wpa_supplicant";
+const char kSupplicantServiceName[] = "default";
// Helper function to initialize the driver and firmware to STA mode.
void initilializeDriverAndFirmware() {