diff options
author | Christian Strømme <christian.stromme@qt.io> | 2016-11-21 14:09:58 +0100 |
---|---|---|
committer | Christian Stromme <christian.stromme@qt.io> | 2016-11-22 11:26:19 +0000 |
commit | c4f18f019ee3a72a752361c65904fa1a156e9eb7 (patch) | |
tree | 83669c05be90bb1eb0f62aba9ad205de0afd9a2f /src | |
parent | 5d1b3831b42163f5a46edc7d6f4865ce73281f28 (diff) | |
download | qtsensors-c4f18f019ee3a72a752361c65904fa1a156e9eb7.tar.gz |
Android: Fix incorrect accuracy levels
Android reports accuracy in four different levels (0, 1, 2 and 3),
these values were used directly in Qt, so the reported values would be
outside Qt documented range, which is a floating point number between
0 and 1.
Task-number: QTBUG-57184
Change-Id: I912a76bffd3e205689103b0352ea4c480d660d63
Reviewed-by: Lorn Potter <lorn.potter@canonical.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/sensors/android/src/androidmagnetometer.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/plugins/sensors/android/src/androidmagnetometer.cpp b/src/plugins/sensors/android/src/androidmagnetometer.cpp index 76cc8f4..62f540e 100644 --- a/src/plugins/sensors/android/src/androidmagnetometer.cpp +++ b/src/plugins/sensors/android/src/androidmagnetometer.cpp @@ -33,13 +33,27 @@ #include "androidmagnetometer.h" +enum AndroidSensorStatus +{ + SENSOR_STATUS_UNRELIABLE = 0, + SENSOR_STATUS_ACCURACY_LOW = 1, + SENSOR_STATUS_ACCURACY_MEDIUM = 2, + SENSOR_STATUS_ACCURACY_HIGH = 3, +}; + AndroidMagnetometer::AndroidMagnetometer(AndroidSensors::AndroidSensorType type, QSensor *sensor) :AndroidCommonSensor<QMagnetometerReading>(type, sensor) {} void AndroidMagnetometer::onAccuracyChanged(jint accuracy) { - m_reader.setCalibrationLevel(accuracy); + // Expected range is [0, 3] + if (accuracy < SENSOR_STATUS_UNRELIABLE || accuracy > SENSOR_STATUS_ACCURACY_HIGH) { + qWarning("Unable to get sensor accuracy. Unexpected value: %d", accuracy); + return; + } + + m_reader.setCalibrationLevel(accuracy / qreal(3.0)); } void AndroidMagnetometer::onSensorChanged(jlong timestamp, const jfloat *values, uint size) |