summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Stack <bstack@google.com>2019-01-08 13:09:49 -0800
committerBrian Stack <bstack@google.com>2019-01-10 16:41:06 -0800
commit2c313368d806b5906087cf472433d03fddfd130c (patch)
treee82e28c11acb88951582df5a2af3ab95c47d8dbc
parent9cef234b62cad167c48ba1212a48ec24753ff261 (diff)
Add WakeLockQueueFlagBits to Sensors 2.0
WakeLockQueueFlagBits is used to signal between the framework and the HAL whenever events are available on the Wake Lock FMQ. The introduction of this type allows for the HAL to utilize blocking calls when reading the Wake Lock FMQ, if desired. Also removes stale reference to WakeLockEvent. Bug: 122528664 Test: Builds, verified Sensors 2.0 default implementation reads events when they become available on the Wake Lock FMQ Change-Id: Ia83bd1642b8f6aa8ea86da05e83f4040c6e593bb
-rw-r--r--sensors/2.0/ISensors.hal14
-rw-r--r--sensors/2.0/default/Sensors.cpp5
-rw-r--r--sensors/2.0/types.hal8
3 files changed, 21 insertions, 6 deletions
diff --git a/sensors/2.0/ISensors.hal b/sensors/2.0/ISensors.hal
index 1685a0a11c..3a9af46bf5 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 efc8b053b1..99c80dfe2c 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 f9defa287c..4457544875 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,
+};