diff options
author | Lorn Potter <lorn.potter@jollamobile.com> | 2013-10-12 17:19:44 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-23 06:12:42 +0200 |
commit | 8aabcf1eb258aedc9c268d6c1de191747f4f4400 (patch) | |
tree | f7a2a8a23f400fc8c8eae4a533b07067923f0e28 /src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp | |
parent | e4ff58731699e1202396f9ef5863f462fa1d9456 (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.cpp | 49 |
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; +} + |