diff options
author | Roman Kiryanov <rkir@google.com> | 2024-03-11 11:02:22 -0700 |
---|---|---|
committer | Roman Kiryanov <rkir@google.com> | 2024-03-11 15:22:01 -0700 |
commit | 903b517d1576559a9dc21fc5c28b90a0c7e05d62 (patch) | |
tree | 6e648a41c21d5ef5938653ebb2c475298600c235 | |
parent | 7c0386eb08d62bc60787ab317e76f37da05ea532 (diff) | |
download | goldfish-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.cpp | 13 |
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 { |