[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:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user