summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@jollamobile.com>2013-10-12 17:19:44 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-23 06:12:42 +0200
commit8aabcf1eb258aedc9c268d6c1de191747f4f4400 (patch)
treef7a2a8a23f400fc8c8eae4a533b07067923f0e28 /src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
parente4ff58731699e1202396f9ef5863f462fa1d9456 (diff)
make sensorfw plugin handle the sensord restarting.
This way, clients that are connected will continue to receive updates after the sensord has restarted, without the need to restart the sensor. Task-number: QTBUG-34050 Change-Id: I4a8fbca189764cf23a1453feae5c1fd9ed6911e7 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Diffstat (limited to 'src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp')
-rw-r--r--src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp49
1 files changed, 44 insertions, 5 deletions
diff --git a/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp b/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
index fde2b972..247ee37a 100644
--- a/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
+++ b/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
@@ -53,10 +53,29 @@ QStringList SensorfwSensorBase::m_bufferingSensors = QStringList()
<<"sensorfw.gyroscope"<<"sensorfw.rotationsensor";
SensorfwSensorBase::SensorfwSensorBase(QSensor *sensor)
- : QSensorBackend(sensor), m_sensorInterface(0), m_bufferSize(-1), m_prevOutputRange(0), m_efficientBufferSize(1), m_maxBufferSize(1)
+ : QSensorBackend(sensor),
+ m_sensorInterface(0),
+ m_bufferSize(-1),
+ m_prevOutputRange(0),
+ m_efficientBufferSize(1),
+ m_maxBufferSize(1),
+ m_available(false),
+ running(false)
+
{
- if (!m_remoteSensorManager)
- m_remoteSensorManager = &SensorManagerInterface::instance();
+ watcher = new QDBusServiceWatcher("com.nokia.SensorService",QDBusConnection::systemBus(),
+ QDBusServiceWatcher::WatchForRegistration |
+ QDBusServiceWatcher::WatchForUnregistration, this);
+
+ connect(watcher, SIGNAL(serviceRegistered(QString)),
+ this, SLOT(connectToSensord(QString)));
+ connect(watcher, SIGNAL(serviceUnregistered(QString)),
+ this, SLOT(sensordUnregistered(QString)));
+
+
+ m_available = QDBusConnection::systemBus().interface()->isServiceRegistered("com.nokia.SensorService");
+ if (m_available)
+ connectToSensord();
}
SensorfwSensorBase::~SensorfwSensorBase()
@@ -109,7 +128,10 @@ void SensorfwSensorBase::start()
doConnectAfterCheck();
int returnCode = m_sensorInterface->start().error().type();
- if (returnCode == 0) return;
+ if (returnCode == 0) {
+ running = true;
+ return;
+ }
qWarning() << "m_sensorInterface did not start, error code:" << returnCode;
}
sensorStopped();
@@ -117,7 +139,9 @@ void SensorfwSensorBase::start()
void SensorfwSensorBase::stop()
{
- if (m_sensorInterface) m_sensorInterface->stop();
+ if (m_sensorInterface)
+ m_sensorInterface->stop();
+ running = false;
}
void SensorfwSensorBase::setRanges(qreal correctionFactor)
@@ -142,6 +166,7 @@ bool SensorfwSensorBase::doConnectAfterCheck()
// buffer size
int size = bufferSize();
+
if (size == m_bufferSize) return true;
if (m_bufferingSensors.contains(sensor()->identifier()))
@@ -186,3 +211,17 @@ qreal SensorfwSensorBase::correctionFactor() const
return 1;
}
+void SensorfwSensorBase::connectToSensord()
+{
+ m_remoteSensorManager = &SensorManagerInterface::instance();
+ if (running) {
+ stop();
+ start();
+ }
+}
+
+void SensorfwSensorBase::sensordUnregistered()
+{
+ m_bufferSize = -1;
+}
+