summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Kiryanov <rkir@google.com>2024-03-11 11:02:22 -0700
committerRoman Kiryanov <rkir@google.com>2024-03-11 15:22:01 -0700
commit903b517d1576559a9dc21fc5c28b90a0c7e05d62 (patch)
tree6e648a41c21d5ef5938653ebb2c475298600c235
parent7c0386eb08d62bc60787ab317e76f37da05ea532 (diff)
downloadgoldfish-903b517d1576559a9dc21fc5c28b90a0c7e05d62.tar.gz
Fix checking of the sensor type
The sensor mode bits are not independent, the `MMMx` value encodes 8 possible modes. Bug: 328412103 Test: presubmit Change-Id: I86e8de511b4bf245a7192ee2c22a9a3353c3f5ce Signed-off-by: Roman Kiryanov <rkir@google.com>
-rw-r--r--sensors/multihal_sensors.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/sensors/multihal_sensors.cpp b/sensors/multihal_sensors.cpp
index beb34d92..829c501c 100644
--- a/sensors/multihal_sensors.cpp
+++ b/sensors/multihal_sensors.cpp
@@ -39,6 +39,17 @@ struct SensorsTransportStub : public SensorsTransport {
const char* Name() const override { return "stub"; }
};
+// https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/main/sensors/aidl/android/hardware/sensors/SensorInfo.aidl#146
+// 3 bits starting from the 1st: MMMx
+uint32_t getSensorReportingMode(const uint32_t sensorFlagBits) {
+ return sensorFlagBits & (7U << 1);
+}
+
+bool isOnChangeSensor(const uint32_t sensorFlagBits) {
+ return getSensorReportingMode(sensorFlagBits) ==
+ static_cast<uint32_t>(SensorFlagBits::ON_CHANGE_MODE);
+}
+
const SensorsTransportStub g_sensorsTransportStub;
}
@@ -140,7 +151,7 @@ Return<Result> MultihalSensors::activate(const int32_t sensorHandle,
if (enabled) {
const SensorInfo* sensor = getSensorInfoByHandle(sensorHandle);
LOG_ALWAYS_FATAL_IF(!sensor);
- if (sensor->flags & static_cast<uint32_t>(SensorFlagBits::ON_CHANGE_MODE)) {
+ if (isOnChangeSensor(sensor->flags)) {
doPostSensorEventLocked(*sensor,
activationOnChangeSensorEvent(sensorHandle, *sensor));
} else {