From 2ac7393bd8223e3b708fedb6c2b58753c0f7cb35 Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Fri, 10 Sep 2021 13:25:25 -0700 Subject: dynamic_sensor: Add stubbed sensor multi-HAL 2.1 support. Bug: 195964858 Test: Verified the dynamic sensor sub-HAL initializes and non-dynamic sensors can sample. Test: See details in testing done comment in https://googleplex-android-review.git.corp.google.com/15806307 . Change-Id: I59934814cc61c7319731eb840ff2132a8c5ce241 --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp new file mode 100644 index 00000000..df636a3b --- /dev/null +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2021 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 "DynamicSensorsSubHal.h" + +#include +#include + +using ::android::hardware::sensors::V1_0::Result; +template using Return = ::android::hardware::Return; +using ::android::hardware::Void; + +namespace android { +namespace SensorHalExt { + +// ISensors. +Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { + return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? + Result::OK : Result::BAD_VALUE); +} + +Return DynamicSensorsSubHal::activate(int32_t sensor_handle __unused, + bool enabled __unused) { + ALOGE("DynamicSensorsSubHal::activate not supported."); + + return Result::INVALID_OPERATION; +} + +Return DynamicSensorsSubHal::batch( + int32_t sensor_handle __unused, int64_t sampling_period_ns __unused, + int64_t max_report_latency_ns __unused) { + ALOGE("DynamicSensorsSubHal::batch not supported."); + + return Result::INVALID_OPERATION; +} + +Return DynamicSensorsSubHal::flush(int32_t sensor_handle __unused) { + ALOGE("DynamicSensorsSubHal::flush not supported."); + + return Result::INVALID_OPERATION; +} + +Return DynamicSensorsSubHal::registerDirectChannel( + const SharedMemInfo& mem __unused, + registerDirectChannel_cb callback __unused) { + ALOGE("DynamicSensorsSubHal::registerDirectChannel not supported."); + + return Void(); +} + +Return DynamicSensorsSubHal::unregisterDirectChannel( + int32_t channel_handle __unused) { + ALOGE("DynamicSensorsSubHal::unregisterDirectChannel not supported."); + + return Result::INVALID_OPERATION; +} + +Return DynamicSensorsSubHal::configDirectReport( + int32_t sensor_handle __unused, int32_t channel_handle __unused, + RateLevel rate __unused, configDirectReport_cb callback __unused) { + ALOGE("DynamicSensorsSubHal::configDirectReport not supported."); + + return Void(); +} + +Return DynamicSensorsSubHal::getSensorsList_2_1( + getSensorsList_2_1_cb callback __unused) { + ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); + + return Void(); +} + +Return DynamicSensorsSubHal::injectSensorData_2_1( + const Event& event __unused) { + ALOGE("DynamicSensorsSubHal::injectSensorData_2_1 not supported."); + + return Result::INVALID_OPERATION; +} + +Return DynamicSensorsSubHal::debug( + const hidl_handle& handle __unused, + const hidl_vec& args __unused) { + return Void(); +} + +// ISensorsSubHal. +Return DynamicSensorsSubHal::initialize( + const sp& hal_proxy_callback __unused) { + ALOGD("DynamicSensorsSubHal::initialize invoked."); + + return Result::OK; +} + +} // namespace SensorHalExt +} // namespace android + +using ::android::hardware::sensors::V2_1::implementation::ISensorsSubHal; +ISensorsSubHal* sensorsHalGetSubHal_2_1(uint32_t* version) { + static android::SensorHalExt::DynamicSensorsSubHal subHal; + + *version = SUB_HAL_2_1_VERSION; + return &subHal; +} + -- cgit v1.2.3 From 28b58c62b5db41da83366e4b4fe3e0ef9ed32a22 Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Tue, 14 Sep 2021 15:58:22 -0700 Subject: dynamic_sensor: Add sensor manager init to sub-HAL 2.1. Bug: 195964858 Test: Verified dynamic sensor manager is present in sensor list. Test: Test: See details in testing done comment in https://googleplex-android-review.git.corp.google.com/15831086 . Change-Id: Ia34596d79f8a6c6985b35dcae75126e456f6009e --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 39 +++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index df636a3b..2db58842 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -16,16 +16,30 @@ #include "DynamicSensorsSubHal.h" +#include #include #include using ::android::hardware::sensors::V1_0::Result; +using ::android::hardware::sensors::V2_1::SensorInfo; +using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; using ::android::hardware::Void; namespace android { namespace SensorHalExt { +DynamicSensorsSubHal::DynamicSensorsSubHal() { + // initialize dynamic sensor manager + int32_t base = property_get_int32("sensor.dynamic_sensor_hal.handle_base", + kDynamicHandleBase); + int32_t count = property_get_int32("sensor.dynamic_sensor_hal.handle_count", + kMaxDynamicHandleCount); + mDynamicSensorManager.reset( + DynamicSensorManager::createInstance(base, count, + nullptr /* callback */)); +} + // ISensors. Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? @@ -77,9 +91,32 @@ Return DynamicSensorsSubHal::configDirectReport( } Return DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback __unused) { + getSensorsList_2_1_cb callback) { + const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); + std::vector sensors; + ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); + // get the dynamic sensor info + sensors.resize(1); + sensors[0].sensorHandle = sensor_info.handle; + sensors[0].name = sensor_info.name; + sensors[0].vendor = sensor_info.vendor; + sensors[0].version = 1; + sensors[0].type = static_cast(sensor_info.type); + sensors[0].typeAsString = sensor_info.stringType; + sensors[0].maxRange = sensor_info.maxRange; + sensors[0].resolution = sensor_info.resolution; + sensors[0].power = sensor_info.power; + sensors[0].minDelay = sensor_info.minDelay; + sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; + sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; + sensors[0].requiredPermission = sensor_info.requiredPermission; + sensors[0].maxDelay = sensor_info.maxDelay; + sensors[0].flags = sensor_info.flags; + + callback(sensors); + return Void(); } -- cgit v1.2.3 From 3482ca5bf73ca6afd10eb49dfc7cfb49609b3eae Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Thu, 16 Sep 2021 22:58:51 +0000 Subject: Revert "dynamic_sensor: Add sensor manager init to sub-HAL 2.1." This reverts commit 28b58c62b5db41da83366e4b4fe3e0ef9ed32a22. Reason for revert: 200210164 Change-Id: I6be2c972a29ec7943dbdf450ef3e491065b011a6 --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 39 +--------------------- 1 file changed, 1 insertion(+), 38 deletions(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index 2db58842..df636a3b 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -16,30 +16,16 @@ #include "DynamicSensorsSubHal.h" -#include #include #include using ::android::hardware::sensors::V1_0::Result; -using ::android::hardware::sensors::V2_1::SensorInfo; -using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; using ::android::hardware::Void; namespace android { namespace SensorHalExt { -DynamicSensorsSubHal::DynamicSensorsSubHal() { - // initialize dynamic sensor manager - int32_t base = property_get_int32("sensor.dynamic_sensor_hal.handle_base", - kDynamicHandleBase); - int32_t count = property_get_int32("sensor.dynamic_sensor_hal.handle_count", - kMaxDynamicHandleCount); - mDynamicSensorManager.reset( - DynamicSensorManager::createInstance(base, count, - nullptr /* callback */)); -} - // ISensors. Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? @@ -91,32 +77,9 @@ Return DynamicSensorsSubHal::configDirectReport( } Return DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback) { - const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); - std::vector sensors; - + getSensorsList_2_1_cb callback __unused) { ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); - // get the dynamic sensor info - sensors.resize(1); - sensors[0].sensorHandle = sensor_info.handle; - sensors[0].name = sensor_info.name; - sensors[0].vendor = sensor_info.vendor; - sensors[0].version = 1; - sensors[0].type = static_cast(sensor_info.type); - sensors[0].typeAsString = sensor_info.stringType; - sensors[0].maxRange = sensor_info.maxRange; - sensors[0].resolution = sensor_info.resolution; - sensors[0].power = sensor_info.power; - sensors[0].minDelay = sensor_info.minDelay; - sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; - sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; - sensors[0].requiredPermission = sensor_info.requiredPermission; - sensors[0].maxDelay = sensor_info.maxDelay; - sensors[0].flags = sensor_info.flags; - - callback(sensors); - return Void(); } -- cgit v1.2.3 From c7038f8a783edfbcc199402a1e3b870a092fbdc7 Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Mon, 20 Sep 2021 16:54:59 -0700 Subject: dynamic_sensor: Add sensor manager init to sub-HAL 2.1. Bug: 195964858 Test: Verified dynamic sensor manager is present in sensor list and that no SELinux violations occur. Test: See details in testing done comment in https://googleplex-android-review.git.corp.google.com/15874906 . Change-Id: I5d587dc46bdec66c3162bf222d36b285b8d2ca3d --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 35 +++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index df636a3b..9f9a9fef 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -20,12 +20,22 @@ #include using ::android::hardware::sensors::V1_0::Result; +using ::android::hardware::sensors::V2_1::SensorInfo; +using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; using ::android::hardware::Void; namespace android { namespace SensorHalExt { +DynamicSensorsSubHal::DynamicSensorsSubHal() { + // initialize dynamic sensor manager + mDynamicSensorManager.reset( + DynamicSensorManager::createInstance(kDynamicHandleBase, + kMaxDynamicHandleCount, + nullptr /* callback */)); +} + // ISensors. Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? @@ -77,9 +87,32 @@ Return DynamicSensorsSubHal::configDirectReport( } Return DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback __unused) { + getSensorsList_2_1_cb callback) { + const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); + std::vector sensors; + ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); + // get the dynamic sensor info + sensors.resize(1); + sensors[0].sensorHandle = sensor_info.handle; + sensors[0].name = sensor_info.name; + sensors[0].vendor = sensor_info.vendor; + sensors[0].version = 1; + sensors[0].type = static_cast(sensor_info.type); + sensors[0].typeAsString = sensor_info.stringType; + sensors[0].maxRange = sensor_info.maxRange; + sensors[0].resolution = sensor_info.resolution; + sensors[0].power = sensor_info.power; + sensors[0].minDelay = sensor_info.minDelay; + sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; + sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; + sensors[0].requiredPermission = sensor_info.requiredPermission; + sensors[0].maxDelay = sensor_info.maxDelay; + sensors[0].flags = sensor_info.flags; + + callback(sensors); + return Void(); } -- cgit v1.2.3 From 1d509cf815c5e3319ce4303eabe863b6b8dcf3a1 Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Wed, 22 Sep 2021 17:53:58 +0000 Subject: Revert "dynamic_sensor: Add sensor manager init to sub-HAL 2.1." Revert submission 15874906-bug_195964858.2 Reason for revert: b/200815351 Reverted Changes: I76a60f7fb:Allow the sensor HAL to access dynamic sensor prop... I5d587dc46:dynamic_sensor: Add sensor manager init to sub-HAL... Change-Id: I26b95614bb276e5c2a686de78d73ab48767176a3 --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 35 +--------------------- 1 file changed, 1 insertion(+), 34 deletions(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index 9f9a9fef..df636a3b 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -20,22 +20,12 @@ #include using ::android::hardware::sensors::V1_0::Result; -using ::android::hardware::sensors::V2_1::SensorInfo; -using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; using ::android::hardware::Void; namespace android { namespace SensorHalExt { -DynamicSensorsSubHal::DynamicSensorsSubHal() { - // initialize dynamic sensor manager - mDynamicSensorManager.reset( - DynamicSensorManager::createInstance(kDynamicHandleBase, - kMaxDynamicHandleCount, - nullptr /* callback */)); -} - // ISensors. Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? @@ -87,32 +77,9 @@ Return DynamicSensorsSubHal::configDirectReport( } Return DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback) { - const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); - std::vector sensors; - + getSensorsList_2_1_cb callback __unused) { ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); - // get the dynamic sensor info - sensors.resize(1); - sensors[0].sensorHandle = sensor_info.handle; - sensors[0].name = sensor_info.name; - sensors[0].vendor = sensor_info.vendor; - sensors[0].version = 1; - sensors[0].type = static_cast(sensor_info.type); - sensors[0].typeAsString = sensor_info.stringType; - sensors[0].maxRange = sensor_info.maxRange; - sensors[0].resolution = sensor_info.resolution; - sensors[0].power = sensor_info.power; - sensors[0].minDelay = sensor_info.minDelay; - sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; - sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; - sensors[0].requiredPermission = sensor_info.requiredPermission; - sensors[0].maxDelay = sensor_info.maxDelay; - sensors[0].flags = sensor_info.flags; - - callback(sensors); - return Void(); } -- cgit v1.2.3 From 3c7a12d8f1764df734f74b486e57acf1f629dd5e Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Fri, 24 Sep 2021 05:48:24 -0700 Subject: dynamic_sensor: Add sensor manager init to sub-HAL 2.1. Bug: 195964858 Test: Verified dynamic sensor manager is present in sensor list and that no SELinux violations occur on sc-v2-dev and master. $ make -j28 && \ vendor/google/tools/flashall -w -s 14281FDEE000A5 --disable_verity && \ sleep 90 && adb root . . . $ adb shell sensor_test list | grep "sensor_test\|Type\|Dynamic" sensor_test version 74 Type Subtype Name 32 0 Dynamic Sensor Manager $ adb logcat -d | grep avc | grep sensor $ Change-Id: Ib3da287e4f4118ad6b19498248e263f8c1662b3a --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 35 +++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index df636a3b..9f9a9fef 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -20,12 +20,22 @@ #include using ::android::hardware::sensors::V1_0::Result; +using ::android::hardware::sensors::V2_1::SensorInfo; +using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; using ::android::hardware::Void; namespace android { namespace SensorHalExt { +DynamicSensorsSubHal::DynamicSensorsSubHal() { + // initialize dynamic sensor manager + mDynamicSensorManager.reset( + DynamicSensorManager::createInstance(kDynamicHandleBase, + kMaxDynamicHandleCount, + nullptr /* callback */)); +} + // ISensors. Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { return (mode == static_cast(SENSOR_HAL_NORMAL_MODE) ? @@ -77,9 +87,32 @@ Return DynamicSensorsSubHal::configDirectReport( } Return DynamicSensorsSubHal::getSensorsList_2_1( - getSensorsList_2_1_cb callback __unused) { + getSensorsList_2_1_cb callback) { + const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor(); + std::vector sensors; + ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked."); + // get the dynamic sensor info + sensors.resize(1); + sensors[0].sensorHandle = sensor_info.handle; + sensors[0].name = sensor_info.name; + sensors[0].vendor = sensor_info.vendor; + sensors[0].version = 1; + sensors[0].type = static_cast(sensor_info.type); + sensors[0].typeAsString = sensor_info.stringType; + sensors[0].maxRange = sensor_info.maxRange; + sensors[0].resolution = sensor_info.resolution; + sensors[0].power = sensor_info.power; + sensors[0].minDelay = sensor_info.minDelay; + sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount; + sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount; + sensors[0].requiredPermission = sensor_info.requiredPermission; + sensors[0].maxDelay = sensor_info.maxDelay; + sensors[0].flags = sensor_info.flags; + + callback(sensors); + return Void(); } -- cgit v1.2.3 From 7b29add5f73449e3fdcb462f030b7f44c985815e Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Tue, 28 Sep 2021 05:50:43 -0700 Subject: dynamic_sensor: Notify multi-HAL 2.1 of connected sensors. Bug: 195964858 Test: Paired a Sony PS4 controller and verified it is present in sensor list as an accelerometer. It can't be sampled, but the LSM6DSR accelerometer may still be sampled. Change-Id: I182291cebdf84e5f6cd44d16debd6a07c4bc5281 --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 80 +++++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index 9f9a9fef..4f0cc481 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -14,12 +14,19 @@ * limitations under the License. */ +#include "BaseSensorObject.h" #include "DynamicSensorsSubHal.h" +#include #include #include +#include +#include + using ::android::hardware::sensors::V1_0::Result; +using ::android::hardware::sensors::V2_0::implementation::ScopedWakelock; +using ::android::hardware::sensors::V2_1::implementation::convertFromSensorEvent; using ::android::hardware::sensors::V2_1::SensorInfo; using ::android::hardware::sensors::V2_1::SensorType; template using Return = ::android::hardware::Return; @@ -33,7 +40,7 @@ DynamicSensorsSubHal::DynamicSensorsSubHal() { mDynamicSensorManager.reset( DynamicSensorManager::createInstance(kDynamicHandleBase, kMaxDynamicHandleCount, - nullptr /* callback */)); + this /* callback */)); } // ISensors. @@ -131,12 +138,81 @@ Return DynamicSensorsSubHal::debug( // ISensorsSubHal. Return DynamicSensorsSubHal::initialize( - const sp& hal_proxy_callback __unused) { + const sp& hal_proxy_callback) { ALOGD("DynamicSensorsSubHal::initialize invoked."); + mHalProxyCallback = hal_proxy_callback; + return Result::OK; } +// SensorEventCallback. +int DynamicSensorsSubHal::submitEvent(SP(BaseSensorObject) sensor, + const sensors_event_t& e) { + std::vector events; + Event hal_event; + bool wakeup; + + if (e.type == SENSOR_TYPE_DYNAMIC_SENSOR_META) { + const dynamic_sensor_meta_event_t* sensor_meta; + + sensor_meta = static_cast( + &(e.dynamic_sensor_meta)); + if (sensor_meta->connected != 0) { + // The sensor framework must be notified of the connected sensor + // through the callback before handling the sensor added event. If + // it isn't, it will assert when looking up the sensor handle when + // processing the sensor added event. + // + // TODO (b/201529167): Fix dynamic sensors addition / removal when + // converting to AIDL. + // The sensor framework runs in a separate process from the sensor + // HAL, and it processes events in a dedicated thread, so it's + // possible the event handling can be done before the callback is + // run. Thus, a delay is added after sending notification of the + // connected sensor. + onSensorConnected(sensor_meta->handle, sensor_meta->sensor); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + } + } + + convertFromSensorEvent(e, &hal_event); + events.push_back(hal_event); + if (sensor && sensor->getSensor()) { + wakeup = sensor->getSensor()->flags & SENSOR_FLAG_WAKE_UP; + } else { + wakeup = false; + } + ScopedWakelock wakelock = mHalProxyCallback->createScopedWakelock(wakeup); + mHalProxyCallback->postEvents(events, std::move(wakelock)); + + return 0; +} + +void DynamicSensorsSubHal::onSensorConnected( + int handle, const sensor_t* sensor_info) { + hidl_vec sensor_list; + + sensor_list.resize(1); + sensor_list[0].sensorHandle = handle; + sensor_list[0].name = sensor_info->name; + sensor_list[0].vendor = sensor_info->vendor; + sensor_list[0].version = 1; + sensor_list[0].type = static_cast(sensor_info->type); + sensor_list[0].typeAsString = sensor_info->stringType; + sensor_list[0].maxRange = sensor_info->maxRange; + sensor_list[0].resolution = sensor_info->resolution; + sensor_list[0].power = sensor_info->power; + sensor_list[0].minDelay = sensor_info->minDelay; + sensor_list[0].fifoReservedEventCount = sensor_info->fifoReservedEventCount; + sensor_list[0].fifoMaxEventCount = sensor_info->fifoMaxEventCount; + sensor_list[0].requiredPermission = sensor_info->requiredPermission; + sensor_list[0].maxDelay = sensor_info->maxDelay; + sensor_list[0].flags = sensor_info->flags; + + mHalProxyCallback->onDynamicSensorsConnected_2_1(sensor_list); +} + } // namespace SensorHalExt } // namespace android -- cgit v1.2.3 From 43bc7bccdc3e4ee224d5c22ef8f18b0f2fbeb1e0 Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Thu, 30 Sep 2021 06:50:43 -0700 Subject: dynamic_sensor: Add multi-HAL 2.1 sampling support. Bug: 195964858 Test: Paired a Sony PS4 controller and verified it can be sampled as an accelerometer. The first subscription always returns all 0's, but subsequent subscriptions return proper accel samples. Change-Id: I4bbc4695c988f600a62502f9fccabaa68f42c72b --- .../dynamic_sensor/DynamicSensorsSubHal.cpp | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index 4f0cc481..d9e31824 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -35,6 +35,21 @@ using ::android::hardware::Void; namespace android { namespace SensorHalExt { +static Result ResultFromStatus(status_t err) { + switch (err) { + case ::android::OK: + return Result::OK; + case ::android::PERMISSION_DENIED: + return Result::PERMISSION_DENIED; + case ::android::NO_MEMORY: + return Result::NO_MEMORY; + case ::android::BAD_VALUE: + return Result::BAD_VALUE; + default: + return Result::INVALID_OPERATION; + } +} + DynamicSensorsSubHal::DynamicSensorsSubHal() { // initialize dynamic sensor manager mDynamicSensorManager.reset( @@ -49,19 +64,18 @@ Return DynamicSensorsSubHal::setOperationMode(OperationMode mode) { Result::OK : Result::BAD_VALUE); } -Return DynamicSensorsSubHal::activate(int32_t sensor_handle __unused, - bool enabled __unused) { - ALOGE("DynamicSensorsSubHal::activate not supported."); - - return Result::INVALID_OPERATION; +Return DynamicSensorsSubHal::activate(int32_t sensor_handle, + bool enabled) { + int rc = mDynamicSensorManager->activate(sensor_handle, enabled); + return ResultFromStatus(rc); } Return DynamicSensorsSubHal::batch( - int32_t sensor_handle __unused, int64_t sampling_period_ns __unused, - int64_t max_report_latency_ns __unused) { - ALOGE("DynamicSensorsSubHal::batch not supported."); - - return Result::INVALID_OPERATION; + int32_t sensor_handle, int64_t sampling_period_ns, + int64_t max_report_latency_ns) { + int rc = mDynamicSensorManager->batch(sensor_handle, sampling_period_ns, + max_report_latency_ns); + return ResultFromStatus(rc); } Return DynamicSensorsSubHal::flush(int32_t sensor_handle __unused) { -- cgit v1.2.3 From 35964ba0768558fe61fd225a51015c1b56656ddc Mon Sep 17 00:00:00 2001 From: Erik Staats Date: Mon, 4 Oct 2021 15:17:32 -0700 Subject: dynamic_sensor: Add multi-HAL 2.1 flush support. Bug: 201730055 Test: Verified that flush, batch, and activate sensor VTS tests pass. Change-Id: I6721d9f8976b3ef9f6af02b2320833025b479ee6 --- modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp') diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp index d9e31824..d5a9b3c0 100644 --- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp +++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp @@ -78,10 +78,9 @@ Return DynamicSensorsSubHal::batch( return ResultFromStatus(rc); } -Return DynamicSensorsSubHal::flush(int32_t sensor_handle __unused) { - ALOGE("DynamicSensorsSubHal::flush not supported."); - - return Result::INVALID_OPERATION; +Return DynamicSensorsSubHal::flush(int32_t sensor_handle) { + int rc = mDynamicSensorManager->flush(sensor_handle); + return ResultFromStatus(rc); } Return DynamicSensorsSubHal::registerDirectChannel( -- cgit v1.2.3