From a7646144f8ebee1a07f20741bba37f953fd2ef8e Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Thu, 5 Jul 2012 13:28:48 +0200 Subject: Add API for duplicate skipping. Change-Id: I4569993e2689f607c2b771438ed5e1ba879691b9 Reviewed-by: Thomas McGuire Reviewed-by: Lorn Potter --- plugins/declarative/sensors/sensors.cpp | 7 ++++++ src/sensors/qsensor.cpp | 42 +++++++++++++++++++++++++++++++++ src/sensors/qsensor.h | 7 +++++- src/sensors/qsensor_p.h | 2 ++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/plugins/declarative/sensors/sensors.cpp b/plugins/declarative/sensors/sensors.cpp index 500e680eeb..ae1e147e23 100644 --- a/plugins/declarative/sensors/sensors.cpp +++ b/plugins/declarative/sensors/sensors.cpp @@ -191,6 +191,13 @@ Q_EXPORT_PLUGIN2(qsensorsdeclarativemodule, QT_PREPEND_NAMESPACE(QSensorsDeclara Please see QSensor::active for information about this property. */ +/*! + \qmlproperty bool Sensor::skipDuplicates + Omitts readings with the same or very similar values. + \sa QSensor::skipDuplicates + \since Mobility 1.3 +*/ + /*! \qmlproperty SensorReading Sensor::reading \since Mobility 1.2 diff --git a/src/sensors/qsensor.cpp b/src/sensors/qsensor.cpp index 0b22ad20f7..e9637fb06c 100644 --- a/src/sensors/qsensor.cpp +++ b/src/sensors/qsensor.cpp @@ -398,6 +398,48 @@ bool QSensor::isAlwaysOn() const return d->alwaysOn; } +/*! + \property QSensor::skipDuplicates + \brief Indicates whether duplicate reading values should be omitted. + + When duplicate skipping is enabled, successive readings with the same or very + similar values are omitted and skipped. This helps reducing the amount of processing + done, as less sensor readings are made available. As a consequence, readings arrive at + an irregular interval. + + Duplicate skipping is not just enabled for readings that are exactly the same, but also for + readings that are quite similar, as each sensor has a bit of jitter even if the device is + not moved. + + Support for this property depends on the backend. It is disabled by default. + + Duplicate skipping can only be changed while the sensor is not active. +*/ +bool QSensor::skipDuplicates() const +{ + Q_D(const QSensor); + return d->skipDuplicates; +} + +/*! + Sets the duplicate skipping to \a skipDuplicates. +*/ +void QSensor::setSkipDuplicates(bool skipDuplicates) +{ + Q_D(QSensor); + if (d->skipDuplicates != skipDuplicates) { + d->skipDuplicates = skipDuplicates; + emit skipDuplicatesChanged(skipDuplicates); + } +} + +/*! + \fn skipDuplicatesChanged(bool skipDuplicates) + + This signal is emitted when the skipDuplicates property changes. + +*/ + /*! \property QSensor::availableDataRates \brief the data rates that the sensor supports. diff --git a/src/sensors/qsensor.h b/src/sensors/qsensor.h index 02ef032e90..21eaf07425 100644 --- a/src/sensors/qsensor.h +++ b/src/sensors/qsensor.h @@ -98,7 +98,8 @@ class Q_SENSORS_EXPORT QSensor : public QObject Q_PROPERTY(int outputRange READ outputRange WRITE setOutputRange) Q_PROPERTY(QString description READ description) Q_PROPERTY(int error READ error NOTIFY sensorError) - Q_PROPERTY(bool alwaysOn READ isAlwaysOn WRITE setAlwaysOn NOTIFY alwaysOnChanged REVISION 1) + Q_PROPERTY(bool alwaysOn READ isAlwaysOn WRITE setAlwaysOn NOTIFY alwaysOnChanged) + Q_PROPERTY(bool skipDuplicates READ skipDuplicates WRITE setSkipDuplicates NOTIFY skipDuplicatesChanged) #ifdef Q_QDOC Q_PROPERTY(int maxBufferSize) Q_PROPERTY(int efficientBufferSize) @@ -124,6 +125,9 @@ public: bool isAlwaysOn() const; void setAlwaysOn(bool alwaysOn); + bool skipDuplicates() const; + void setSkipDuplicates(bool skipDuplicates); + qrangelist availableDataRates() const; int dataRate() const; void setDataRate(int rate); @@ -163,6 +167,7 @@ Q_SIGNALS: void sensorError(int error); void availableSensorsChanged(); void alwaysOnChanged(); + void skipDuplicatesChanged(bool skipDuplicates); protected: // called by the back end diff --git a/src/sensors/qsensor_p.h b/src/sensors/qsensor_p.h index de34cd02df..1aa3fdef16 100644 --- a/src/sensors/qsensor_p.h +++ b/src/sensors/qsensor_p.h @@ -75,6 +75,7 @@ public: , cache_reading(0) , error(0) , alwaysOn(false) + , skipDuplicates(false) { } @@ -102,6 +103,7 @@ public: int error; bool alwaysOn; + bool skipDuplicates; }; class QSensorReadingPrivate -- cgit v1.2.3