diff options
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; +} + |