diff options
Diffstat (limited to 'modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp')
-rw-r--r-- | modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp b/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp index 264f13c2..63210200 100644 --- a/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp +++ b/modules/sensors/dynamic_sensor/HidUtils/HidParser.cpp @@ -240,14 +240,23 @@ std::vector<HidParser::ReportPacket> HidParser::convertGroupToPacket( auto logical = r.getLogicalRange(); auto physical = r.getPhysicalRange(); - int64_t offset = physical.first - logical.first; - double scale = static_cast<double>((physical.second - physical.first)) - / (logical.second - logical.first); + double scale; + if ((physical.first != physical.second) && + (logical.first != logical.second)) { + scale = static_cast<double>(physical.second - physical.first) + / (logical.second - logical.first); + } else { + scale = (physical.first != 0) ? physical.first : 1.0; + } scale *= r.getExponentValue(); + int64_t offset = + (physical.first * r.getExponentValue() / scale) - + logical.first; ReportItem digest = { .usage = r.getFullUsage(), .id = id, + .usageVector = r.getUsageVector(), .minRaw = logical.first, .maxRaw = logical.second, .a = scale, @@ -316,4 +325,5 @@ std::ostream& operator<<(std::ostream &os, const HidParser::DigestVector &digest os << LOG_ENDL; return os; } + } // namespace HidUtil |