diff options
Diffstat (limited to 'sensors')
-rw-r--r-- | sensors/2.0/ISensors.hal | 14 | ||||
-rw-r--r-- | sensors/2.0/default/Sensors.cpp | 5 | ||||
-rw-r--r-- | sensors/2.0/types.hal | 8 |
3 files changed, 21 insertions, 6 deletions
diff --git a/sensors/2.0/ISensors.hal b/sensors/2.0/ISensors.hal index 1685a0a11..3a9af46bf 100644 --- a/sensors/2.0/ISensors.hal +++ b/sensors/2.0/ISensors.hal @@ -95,11 +95,15 @@ interface ISensors { * The Wake Lock FMQ is used by the framework to notify the HAL when it is * safe to release its wake_lock. When the framework receives WAKE_UP events * from the Event FMQ and the framework has acquired a wake_lock, the - * framework must write a WakeLockEvent to the Wake Lock FMQ with the number - * of WAKE_UP events processed. When the HAL reads the WakeLockEvent from - * the Wake Lock FMQ, the HAL should decrement its current count of - * unprocessed WAKE_UP events and release its wake_lock if the current - * count of unprocessed WAKE_UP events is zero. + * framework must write the number of WAKE_UP events processed to the Wake + * Lock FMQ. When the HAL reads the data from the Wake Lock FMQ, the HAL + * decrements its current count of unprocessed WAKE_UP events and releases + * its wake_lock if the current count of unprocessed WAKE_UP events is + * zero. + * + * The framework must use the WakeLockQueueFlagBits::DATA_WRITTEN value to + * notify the HAL that data has been written to the Wake Lock FMQ and must + * be read by HAL. * * The ISensorsCallback is used by the HAL to notify the framework of * asynchronous events, such as a dynamic sensor connection. diff --git a/sensors/2.0/default/Sensors.cpp b/sensors/2.0/default/Sensors.cpp index efc8b053b..99c80dfe2 100644 --- a/sensors/2.0/default/Sensors.cpp +++ b/sensors/2.0/default/Sensors.cpp @@ -31,6 +31,7 @@ using ::android::hardware::sensors::V1_0::RateLevel; using ::android::hardware::sensors::V1_0::Result; using ::android::hardware::sensors::V1_0::SharedMemInfo; using ::android::hardware::sensors::V2_0::SensorTimeout; +using ::android::hardware::sensors::V2_0::WakeLockQueueFlagBits; constexpr const char* kWakeLockName = "SensorsHAL_WAKEUP"; @@ -215,7 +216,9 @@ void Sensors::readWakeLockFMQ() { // Read events from the Wake Lock FMQ. Timeout after a reasonable amount of time to ensure // that any held wake lock is able to be released if it is held for too long. - mWakeLockQueue->readBlocking(&eventsHandled, 1 /* count */, kReadTimeoutNs); + mWakeLockQueue->readBlocking(&eventsHandled, 1 /* count */, 0 /* readNotification */, + static_cast<uint32_t>(WakeLockQueueFlagBits::DATA_WRITTEN), + kReadTimeoutNs); updateWakeLock(0 /* eventsWritten */, eventsHandled); } } diff --git a/sensors/2.0/types.hal b/sensors/2.0/types.hal index f9defa287..445754487 100644 --- a/sensors/2.0/types.hal +++ b/sensors/2.0/types.hal @@ -40,3 +40,11 @@ enum EventQueueFlagBits : uint32_t { */ EVENTS_READ = 1 << 1, }; + +enum WakeLockQueueFlagBits : uint32_t { + /** + * Used to notify the HAL that the framework has written data to the Wake + * Lock FMQ. + */ + DATA_WRITTEN = 1 << 0, +}; |