summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/sensorfw/sensorfwsensorbase.cpp
diff options
context:
space:
mode:
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;
+}
+