Merge "[dynamic_sensor] correctly interpret HID data" am: dcbe8650b6 am: 69f047a046 am: 28bb4526f9

Original change: https://android-review.googlesource.com/c/platform/hardware/libhardware/+/2213197

Change-Id: I5b68a48d18e23efd557e4661d02f53a29f59a35c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.cpp b/modules/sensors/dynamic_sensor/HidRawSensor.cpp
index 3759e7e..c90f4f1 100644
--- a/modules/sensors/dynamic_sensor/HidRawSensor.cpp
+++ b/modules/sensors/dynamic_sensor/HidRawSensor.cpp
@@ -1066,7 +1066,10 @@
 bool HidRawSensor::getSensorEventData(const std::vector<uint8_t> &message,
                                       sensors_event_t *event) {
     for (const auto &rec : mTranslateTable) {
-        int64_t v = (message[rec.byteOffset + rec.byteSize - 1] & 0x80) ? -1 : 0;
+        int64_t v = 0;
+        if (rec.minValue < 0) {
+            v = (message[rec.byteOffset + rec.byteSize - 1] & 0x80) ? -1 : 0;
+        }
         for (int i = static_cast<int>(rec.byteSize) - 1; i >= 0; --i) {
             v = (v << 8) | message[rec.byteOffset + i]; // HID is little endian
         }
diff --git a/modules/sensors/dynamic_sensor/HidRawSensor.h b/modules/sensors/dynamic_sensor/HidRawSensor.h
index 074482a..e4564a0 100644
--- a/modules/sensors/dynamic_sensor/HidRawSensor.h
+++ b/modules/sensors/dynamic_sensor/HidRawSensor.h
@@ -154,9 +154,11 @@
     bool getReportFieldValue(const std::vector<uint8_t> &message,
                              ReportTranslateRecord* rec, ValueType* value) {
         bool valid = true;
-        int64_t v;
+        int64_t v = 0;
+        if (rec->minValue < 0) {
+            v = (message[rec->byteOffset + rec->byteSize - 1] & 0x80) ? -1 : 0;
+        }
 
-        v = (message[rec->byteOffset + rec->byteSize - 1] & 0x80) ? -1 : 0;
         for (int i = static_cast<int>(rec->byteSize) - 1; i >= 0; --i) {
             v = (v << 8) | message[rec->byteOffset + i]; // HID is little endian
         }