[dynamic_sensor] correctly interpret HID data

specifically, interpret HID data value as unsigned if minValue is
positive

Fix: 238391386
Test: See "Testing Done" in comments in ag/19889364
Change-Id: I715c2189ad90ee71e022ae131354354157694556
This commit is contained in:
Manish Kushwaha
2022-09-09 16:36:13 +00:00
parent 4d919104dd
commit d4085b7193
2 changed files with 8 additions and 3 deletions

View File

@@ -1066,7 +1066,10 @@ bool HidRawSensor::getHeadTrackerEventData(const std::vector<uint8_t> &message,
bool HidRawSensor::getSensorEventData(const std::vector<uint8_t> &message, bool HidRawSensor::getSensorEventData(const std::vector<uint8_t> &message,
sensors_event_t *event) { sensors_event_t *event) {
for (const auto &rec : mTranslateTable) { 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) { for (int i = static_cast<int>(rec.byteSize) - 1; i >= 0; --i) {
v = (v << 8) | message[rec.byteOffset + i]; // HID is little endian v = (v << 8) | message[rec.byteOffset + i]; // HID is little endian
} }

View File

@@ -154,9 +154,11 @@ private:
bool getReportFieldValue(const std::vector<uint8_t> &message, bool getReportFieldValue(const std::vector<uint8_t> &message,
ReportTranslateRecord* rec, ValueType* value) { ReportTranslateRecord* rec, ValueType* value) {
bool valid = true; 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) { for (int i = static_cast<int>(rec->byteSize) - 1; i >= 0; --i) {
v = (v << 8) | message[rec->byteOffset + i]; // HID is little endian v = (v << 8) | message[rec->byteOffset + i]; // HID is little endian
} }