diff options
Diffstat (limited to 'services/sensorservice/SensorDevice.cpp')
-rw-r--r-- | services/sensorservice/SensorDevice.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index d8e8b52ded..5d6f8c773c 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -132,8 +132,6 @@ SensorDevice::SensorDevice() } void SensorDevice::initializeSensorList() { - float minPowerMa = 0.001; // 1 microAmp - checkReturn(mSensors->getSensorsList( [&](const auto &list) { const size_t count = list.size(); @@ -151,13 +149,18 @@ void SensorDevice::initializeSensorList() { // Don't crash in this case since CTS will verify that devices don't go to // production with a resolution of 0. if (sensor.resolution != 0) { - double promotedResolution = sensor.resolution; - double promotedMaxRange = sensor.maxRange; - if (fmod(promotedMaxRange, promotedResolution) != 0) { - ALOGW("%s's max range %f is not a multiple of the resolution %f", - sensor.name, sensor.maxRange, sensor.resolution); - SensorDeviceUtils::quantizeValue( - &sensor.maxRange, promotedResolution); + float quantizedRange = sensor.maxRange; + SensorDeviceUtils::quantizeValue( + &quantizedRange, sensor.resolution, /*factor=*/ 1); + // Only rewrite maxRange if the requantization produced a "significant" + // change, which is fairly arbitrarily defined as resolution / 8. + // Smaller deltas are permitted, as they may simply be due to floating + // point representation error, etc. + if (fabsf(sensor.maxRange - quantizedRange) > sensor.resolution / 8) { + ALOGW("%s's max range %.12f is not a multiple of the resolution " + "%.12f - updated to %.12f", sensor.name, sensor.maxRange, + sensor.resolution, quantizedRange); + sensor.maxRange = quantizedRange; } } else { // Don't crash here or the device will go into a crashloop. @@ -166,10 +169,11 @@ void SensorDevice::initializeSensorList() { } // Sanity check and clamp power if it is 0 (or close) - if (sensor.power < minPowerMa) { - ALOGI("Reported power %f not deemed sane, clamping to %f", - sensor.power, minPowerMa); - sensor.power = minPowerMa; + constexpr float MIN_POWER_MA = 0.001; // 1 microAmp + if (sensor.power < MIN_POWER_MA) { + ALOGI("%s's reported power %f invalid, clamped to %f", + sensor.name, sensor.power, MIN_POWER_MA); + sensor.power = MIN_POWER_MA; } mSensorList.push_back(sensor); |