diff options
author | Juha Vuolle <juha.vuolle@insta.fi> | 2021-06-13 11:45:35 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-06-21 07:31:07 +0000 |
commit | 39b3ff04e6c6d01c4f294a870caaf19ced3216b2 (patch) | |
tree | 38df448da04bf34c5865171ba9b5c77c57031d94 /tests/auto/common/test_backends.cpp | |
parent | 480c3543b1f686d15e4d5decafb8ae5c5198d49a (diff) |
Add binding support for sensor readings
Many of the sensors' QML "reading" value properties change with high
frequency. This makes them candidates to benefit from the more
performant bindable support.
This commit adds the bindable support for QML sensor 'reading' classes:
pressure, gyroscope, tap, compass, proximity, orientation, distance,
magnetometer, lid reading, tilt, rotation, humidity, holster, ambient
temperature, light sensor, altimeter, IR proximity, accelerometer,
ambient light, and sensor reading baseclass (timestamp common to all)
In addition to the 'reading' classes, the commit adds bindable support
for QmlSensor::reading, as it's change signal is emitted with high
frequency, on every sensor reading change.
Task-number: QTBUG-92513
Task-number: QTBUG-92503
Task-number: QTBUG-92505
Change-Id: I413ddd8a758142b9b93596e55b3bc8c3c2c98252
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
(cherry picked from commit c255fe62f86598f48bd7e69e449aa95aa016f4fb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests/auto/common/test_backends.cpp')
-rw-r--r-- | tests/auto/common/test_backends.cpp | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/tests/auto/common/test_backends.cpp b/tests/auto/common/test_backends.cpp index 15419b0e..a8ce7f3f 100644 --- a/tests/auto/common/test_backends.cpp +++ b/tests/auto/common/test_backends.cpp @@ -62,41 +62,43 @@ void set_test_backend_busy(QSensor* sensor, bool busy) backend->sensorBusy(busy); } -void set_test_backend_reading(QSensor* sensor, const QJsonObject& values) +void set_test_backend_reading(QSensor* sensor, const QVariantMap& values) { Q_ASSERT(sensor->isConnectedToBackend()); QSensorBackend* backend = sensorToBackend.value(sensor); - backend->reading()->setTimestamp(values["timestamp"].toInt()); // timestamp is common to all + // timestamp is common to all readings + if (values.contains("timestamp")) + backend->reading()->setTimestamp(values["timestamp"].toInt()); if (sensor->type() == "QAccelerometer") { QAccelerometerReading* reading = static_cast<QAccelerometerReading*>(backend->reading()); - reading->setX(values["x"].toDouble()); - reading->setY(values["y"].toDouble()); - reading->setZ(values["z"].toDouble()); + if (values.contains("x")) reading->setX(values["x"].value<qreal>()); + if (values.contains("y")) reading->setY(values["y"].value<qreal>()); + if (values.contains("z")) reading->setZ(values["z"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QPressureSensor") { QPressureReading* reading = static_cast<QPressureReading*>(backend->reading()); - reading->setPressure(values["pressure"].toDouble()); - reading->setTemperature(values["temperature"].toDouble()); + if (values.contains("pressure")) reading->setPressure(values["pressure"].value<qreal>()); + if (values.contains("temperature")) reading->setTemperature(values["temperature"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QGyroscope") { QGyroscopeReading* reading = static_cast<QGyroscopeReading*>(backend->reading()); - reading->setX(values["x"].toDouble()); - reading->setY(values["y"].toDouble()); - reading->setZ(values["z"].toDouble()); + if (values.contains("x")) reading->setX(values["x"].value<qreal>()); + if (values.contains("y")) reading->setY(values["y"].value<qreal>()); + if (values.contains("z")) reading->setZ(values["z"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QTapSensor") { QTapReading* reading = static_cast<QTapReading*>(backend->reading()); - reading->setDoubleTap(values["doubleTap"].toBool()); - reading->setTapDirection(QTapReading::TapDirection(values["tapDirection"].toInt())); + if (values.contains("doubleTap")) reading->setDoubleTap(values["doubleTap"].value<bool>()); + if (values.contains("tapDirection")) reading->setTapDirection(QTapReading::TapDirection(values["tapDirection"].toInt())); backend->newReadingAvailable(); } else if (sensor->type() == "QCompass") { QCompassReading* reading = static_cast<QCompassReading*>(backend->reading()); - reading->setAzimuth(values["azimuth"].toDouble()); - reading->setCalibrationLevel(values["calibrationLevel"].toDouble()); + if (values.contains("azimuth")) reading->setAzimuth(values["azimuth"].value<qreal>()); + if (values.contains("calibrationLevel")) reading->setCalibrationLevel(values["calibrationLevel"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QProximitySensor") { QProximityReading* reading = static_cast<QProximityReading*>(backend->reading()); - reading->setClose(values["near"].toBool()); + reading->setClose(values["near"].value<bool>()); backend->newReadingAvailable(); } else if (sensor->type() == "QOrientationSensor") { QOrientationReading* reading = static_cast<QOrientationReading*>(backend->reading()); @@ -104,7 +106,7 @@ void set_test_backend_reading(QSensor* sensor, const QJsonObject& values) backend->newReadingAvailable(); } else if (sensor->type() == "QDistanceSensor") { QDistanceReading* reading = static_cast<QDistanceReading*>(backend->reading()); - reading->setDistance(values["distance"].toDouble()); + reading->setDistance(values["distance"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QAmbientLightSensor") { QAmbientLightReading* reading = static_cast<QAmbientLightReading*>(backend->reading()); @@ -112,49 +114,49 @@ void set_test_backend_reading(QSensor* sensor, const QJsonObject& values) backend->newReadingAvailable(); } else if (sensor->type() == "QMagnetometer") { QMagnetometerReading* reading = static_cast<QMagnetometerReading*>(backend->reading()); - reading->setX(values["x"].toDouble()); - reading->setY(values["y"].toDouble()); - reading->setZ(values["z"].toDouble()); - reading->setCalibrationLevel(values["calibrationLevel"].toDouble()); + if (values.contains("x")) reading->setX(values["x"].value<qreal>()); + if (values.contains("y")) reading->setY(values["y"].value<qreal>()); + if (values.contains("z")) reading->setZ(values["z"].value<qreal>()); + if (values.contains("calibrationLevel")) reading->setCalibrationLevel(values["calibrationLevel"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QLidSensor") { QLidReading* reading = static_cast<QLidReading*>(backend->reading()); - reading->setBackLidClosed(values["backLidClosed"].toBool()); - reading->setFrontLidClosed(values["frontLidClosed"].toBool()); + if (values.contains("backLidClosed")) reading->setBackLidClosed(values["backLidClosed"].value<bool>()); + if (values.contains("frontLidClosed")) reading->setFrontLidClosed(values["frontLidClosed"].value<bool>()); backend->newReadingAvailable(); } else if (sensor->type() == "QTiltSensor") { QTiltReading* reading = static_cast<QTiltReading*>(backend->reading()); - reading->setYRotation(values["yRotation"].toDouble()); - reading->setXRotation(values["xRotation"].toDouble()); + if (values.contains("yRotation")) reading->setYRotation(values["yRotation"].value<qreal>()); + if (values.contains("xRotation")) reading->setXRotation(values["xRotation"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QRotationSensor") { QRotationReading* reading = static_cast<QRotationReading*>(backend->reading()); - reading->setFromEuler(values["x"].toDouble(), values["y"].toDouble(), values["z"].toDouble()); + reading->setFromEuler(values["x"].value<qreal>(), values["y"].value<qreal>(), values["z"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QHumiditySensor") { QHumidityReading* reading = static_cast<QHumidityReading*>(backend->reading()); - reading->setRelativeHumidity(values["relativeHumidity"].toDouble()); - reading->setAbsoluteHumidity(values["absoluteHumidity"].toDouble()); + if (values.contains("relativeHumidity")) reading->setRelativeHumidity(values["relativeHumidity"].value<qreal>()); + if (values.contains("absoluteHumidity")) reading->setAbsoluteHumidity(values["absoluteHumidity"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QHolsterSensor") { QHolsterReading* reading = static_cast<QHolsterReading*>(backend->reading()); - reading->setHolstered(values["holstered"].toBool()); + reading->setHolstered(values["holstered"].value<bool>()); backend->newReadingAvailable(); } else if (sensor->type() == "QAmbientTemperatureSensor") { QAmbientTemperatureReading* reading = static_cast<QAmbientTemperatureReading*>(backend->reading()); - reading->setTemperature(values["temperature"].toDouble()); + reading->setTemperature(values["temperature"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QLightSensor") { QLightReading* reading = static_cast<QLightReading*>(backend->reading()); - reading->setLux(values["illuminance"].toDouble()); + reading->setLux(values["illuminance"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QAltimeter") { QAltimeterReading* reading = static_cast<QAltimeterReading*>(backend->reading()); - reading->setAltitude(values["altitude"].toDouble()); + reading->setAltitude(values["altitude"].value<qreal>()); backend->newReadingAvailable(); } else if (sensor->type() == "QIRProximitySensor") { QIRProximityReading* reading = static_cast<QIRProximityReading*>(backend->reading()); - reading->setReflectance(values["reflectance"].toDouble()); + reading->setReflectance(values["reflectance"].value<qreal>()); backend->newReadingAvailable(); } else { qWarning() << "Unsupported test sensor backend:" << sensor->type(); |