summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2012-08-24 14:10:57 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-28 00:33:19 +0200
commit2750ad7f862cedc7600637c442eea0caf29b1fd8 (patch)
tree11b068070d3203e2cbfac31311c1a5b3e5a0c450
parenta1637c935a0c7055cfc905c02d072af8e54fc948 (diff)
Pass through invalid data rates to the backend instead of ignoring them
This gives the backend the chance to do something sensible with it, at the expense of the data rate not being reported correctly in those cases. Change-Id: Iadf72b4448145f2454bc9422dde094ad799cb17a Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.cpp6
-rw-r--r--src/sensors/qsensor.cpp15
-rw-r--r--src/sensors/qsensor.h3
-rw-r--r--tests/auto/qsensor/tst_qsensor.cpp13
4 files changed, 15 insertions, 22 deletions
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.cpp b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
index 77570655..26bce35d 100644
--- a/src/plugins/sensors/blackberry/bbsensorbackend.cpp
+++ b/src/plugins/sensors/blackberry/bbsensorbackend.cpp
@@ -220,8 +220,14 @@ void BbSensorBackendBase::start()
const int result = devctl(m_deviceFile.handle(), DCMD_SENSOR_RATE, &deviceRate,
sizeof(deviceRate), NULL);
if (result != EOK) {
+ sensor()->setDataRate(0);
perror(QString::fromLatin1("Setting sensor rate for %1 failed")
.arg(m_deviceFile.fileName()).toLocal8Bit());
+ } else {
+ if (deviceRate.rx.rate > 0)
+ sensor()->setDataRate(microSecondsToHertz(deviceRate.rx.rate));
+ else
+ sensor()->setDataRate(0);
}
}
diff --git a/src/sensors/qsensor.cpp b/src/sensors/qsensor.cpp
index 9d41dbf7..56c11bc4 100644
--- a/src/sensors/qsensor.cpp
+++ b/src/sensors/qsensor.cpp
@@ -480,20 +480,9 @@ int QSensor::dataRate() const
void QSensor::setDataRate(int rate)
{
Q_D(QSensor);
- if (rate == 0 || !isConnectedToBackend()) {
+ if (d->dataRate != rate) {
d->dataRate = rate;
- return;
- }
- bool warn = true;
- Q_FOREACH (const qrange &range, d->availableDataRates) {
- if (rate >= range.first && rate <= range.second) {
- warn = false;
- d->dataRate = rate;
- break;
- }
- }
- if (warn) {
- qWarning() << "setDataRate:" << rate << "is not supported by the sensor.";
+ emit dataRateChanged();
}
}
diff --git a/src/sensors/qsensor.h b/src/sensors/qsensor.h
index 43fe221c..bcdc09e2 100644
--- a/src/sensors/qsensor.h
+++ b/src/sensors/qsensor.h
@@ -84,7 +84,7 @@ class Q_SENSORS_EXPORT QSensor : public QObject
Q_PROPERTY(QByteArray type READ type)
Q_PROPERTY(bool connectedToBackend READ isConnectedToBackend)
Q_PROPERTY(qrangelist availableDataRates READ availableDataRates)
- Q_PROPERTY(int dataRate READ dataRate WRITE setDataRate)
+ Q_PROPERTY(int dataRate READ dataRate WRITE setDataRate NOTIFY dataRateChanged)
Q_PROPERTY(QSensorReading* reading READ reading NOTIFY readingChanged)
Q_PROPERTY(bool busy READ isBusy)
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
@@ -167,6 +167,7 @@ Q_SIGNALS:
void sensorError(int error);
void availableSensorsChanged();
void alwaysOnChanged();
+ void dataRateChanged();
protected:
explicit QSensor(const QByteArray &type, QSensorPrivate &dd, QObject* parent = 0);
diff --git a/tests/auto/qsensor/tst_qsensor.cpp b/tests/auto/qsensor/tst_qsensor.cpp
index 38c32e76..534a14d9 100644
--- a/tests/auto/qsensor/tst_qsensor.cpp
+++ b/tests/auto/qsensor/tst_qsensor.cpp
@@ -364,14 +364,14 @@ private slots:
QCOMPARE(actual, expected);
}
- // Test that a previously-set, invalid data rate is reset to 0
+ // Test that a previously-set, invalid data rate is retained
{
TestSensor sensor;
sensor.setDataRate(50);
sensor.setProperty("doThis", "rates");
sensor.connectToBackend();
int actual = sensor.dataRate();
- int expected = 0;
+ int expected = 50;
QCOMPARE(actual, expected);
}
@@ -533,13 +533,11 @@ private slots:
TestSensor sensor;
sensor.connectToBackend();
- QTest::ignoreMessage(QtWarningMsg, "setDataRate: 1 is not supported by the sensor. ");
sensor.setDataRate(1);
- QCOMPARE(sensor.dataRate(), 0);
+ QCOMPARE(sensor.dataRate(), 1);
- QTest::ignoreMessage(QtWarningMsg, "setDataRate: 1000 is not supported by the sensor. ");
sensor.setDataRate(1000);
- QCOMPARE(sensor.dataRate(), 0);
+ QCOMPARE(sensor.dataRate(), 1000);
}
void testSetBadDataRateWhenNotConnected()
@@ -550,9 +548,8 @@ private slots:
sensor.setDataRate(300);
QCOMPARE(sensor.dataRate(), 300);
sensor.setDataRate(350);
- QTest::ignoreMessage(QtWarningMsg, "setDataRate: 350 is not supported by the sensor. ");
sensor.connectToBackend();
- QCOMPARE(sensor.dataRate(), 0);
+ QCOMPARE(sensor.dataRate(), 350);
}
void testSetBadOutputRange()