summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2012-07-05 13:28:48 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2012-11-28 20:06:21 +0100
commita7646144f8ebee1a07f20741bba37f953fd2ef8e (patch)
treecc9e273be87fca68c92f52b6dced053b895b3bae
parentb64e52acb421dceae303124f63059c658090bd5d (diff)
Add API for duplicate skipping.
Change-Id: I4569993e2689f607c2b771438ed5e1ba879691b9 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
-rw-r--r--plugins/declarative/sensors/sensors.cpp7
-rw-r--r--src/sensors/qsensor.cpp42
-rw-r--r--src/sensors/qsensor.h7
-rw-r--r--src/sensors/qsensor_p.h2
4 files changed, 57 insertions, 1 deletions
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
@@ -192,6 +192,13 @@ Q_EXPORT_PLUGIN2(qsensorsdeclarativemodule, QT_PREPEND_NAMESPACE(QSensorsDeclara
*/
/*!
+ \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
Holds the most recent sensor reading.
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
@@ -399,6 +399,48 @@ bool QSensor::isAlwaysOn() const
}
/*!
+ \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