Implement ISensorsCallback
Implement the ISensorsCallback interface in the SensorDevice. This
interface is responsible for handling callbacks from the Sensors HAL,
such as when a dynamic sensor is connected or disconnected.
Bug: 111070257
Test: Compile, configured system to use sensors@2.0 and ensured that
a_sns_test received events
Change-Id: I180e05db29e0e1d008fb661e6cf6e3b552a1b0b6
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index 25ed21c..f307297 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -34,6 +34,7 @@
using namespace android::hardware::sensors::V1_0::implementation;
using android::hardware::sensors::V2_0::EventQueueFlagBits;
using android::hardware::hidl_vec;
+using android::hardware::Return;
using android::SensorDeviceUtils::HidlServiceRegistrationWaiter;
namespace android {
@@ -162,13 +163,14 @@
CHECK(mSensors != nullptr && mEventQueue != nullptr &&
mWakeLockQueue != nullptr && mEventQueueFlag != nullptr);
- status_t status = StatusFromResult(checkReturn(mSensors->initializeMessageQueues(
+ status_t status = StatusFromResult(checkReturn(mSensors->initialize(
*mEventQueue->getDesc(),
- *mWakeLockQueue->getDesc())));
+ *mWakeLockQueue->getDesc(),
+ this)));
if (status != NO_ERROR) {
connectionStatus = HalConnectionStatus::FAILED_TO_CONNECT;
- ALOGE("Failed to initialize message queues (%s)", strerror(-status));
+ ALOGE("Failed to initialize Sensors HAL (%s)", strerror(-status));
} else {
connectionStatus = HalConnectionStatus::CONNECTED;
}
@@ -332,6 +334,33 @@
return eventsRead;
}
+Return<void> SensorDevice::onDynamicSensorsConnected(
+ const hidl_vec<SensorInfo> &dynamicSensorsAdded) {
+ // Allocate a sensor_t structure for each dynamic sensor added and insert
+ // it into the dictionary of connected dynamic sensors keyed by handle.
+ for (size_t i = 0; i < dynamicSensorsAdded.size(); ++i) {
+ const SensorInfo &info = dynamicSensorsAdded[i];
+
+ auto it = mConnectedDynamicSensors.find(info.sensorHandle);
+ CHECK(it == mConnectedDynamicSensors.end());
+
+ sensor_t *sensor = new sensor_t();
+ convertToSensor(info, sensor);
+
+ mConnectedDynamicSensors.insert(
+ std::make_pair(sensor->handle, sensor));
+ }
+
+ return Return<void>();
+}
+
+Return<void> SensorDevice::onDynamicSensorsDisconnected(
+ const hidl_vec<int32_t> &dynamicSensorHandlesRemoved) {
+ (void) dynamicSensorHandlesRemoved;
+ // TODO: Currently dynamic sensors do not seem to be removed
+ return Return<void>();
+}
+
void SensorDevice::autoDisable(void *ident, int handle) {
Mutex::Autolock _l(mLock);
ssize_t activationIndex = mActivationCount.indexOfKey(handle);
@@ -767,19 +796,9 @@
const hidl_vec<Event> &src,
const hidl_vec<SensorInfo> &dynamicSensorsAdded,
sensors_event_t *dst) {
- // Allocate a sensor_t structure for each dynamic sensor added and insert
- // it into the dictionary of connected dynamic sensors keyed by handle.
- for (size_t i = 0; i < dynamicSensorsAdded.size(); ++i) {
- const SensorInfo &info = dynamicSensorsAdded[i];
- auto it = mConnectedDynamicSensors.find(info.sensorHandle);
- CHECK(it == mConnectedDynamicSensors.end());
-
- sensor_t *sensor = new sensor_t;
- convertToSensor(info, sensor);
-
- mConnectedDynamicSensors.insert(
- std::make_pair(sensor->handle, sensor));
+ if (dynamicSensorsAdded.size() > 0) {
+ onDynamicSensorsConnected(dynamicSensorsAdded);
}
for (size_t i = 0; i < src.size(); ++i) {