From ce33c04b01fcd368c506335c2f105efbe9f4f702 Mon Sep 17 00:00:00 2001 From: Lincoln Ramsay Date: Mon, 28 May 2012 14:10:29 +1000 Subject: Register only the sensors the emulator knows about Unfortunately, this involves a (long) round-trip so we start by registering all the types we know about then unregister and re-register the ones we're notified about. Change-Id: I8ae8b4a9037eeb21a65454519945c3c307979a14 Reviewed-by: Lorn Potter --- src/plugins/sensors/simulator/main.cpp | 40 +++++++++++++++++++++++ src/plugins/sensors/simulator/simulatorcommon.cpp | 5 ++- src/plugins/sensors/simulator/simulatorcommon.h | 3 ++ 3 files changed, 47 insertions(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/sensors/simulator/main.cpp b/src/plugins/sensors/simulator/main.cpp index dda7269c..1e404086 100644 --- a/src/plugins/sensors/simulator/main.cpp +++ b/src/plugins/sensors/simulator/main.cpp @@ -56,6 +56,13 @@ class SimulatorSensorPlugin : public QObject, public QSensorPluginInterface, pub Q_PLUGIN_METADATA(IID "com.nokia.Qt.QSensorPluginInterface/1.0" FILE "plugin.json") Q_INTERFACES(QSensorPluginInterface) public: + SimulatorSensorPlugin() + { + SensorsConnection *connection = SensorsConnection::instance(); + if (!connection) return; // hardly likely but just in case... + connect(connection, SIGNAL(setAvailableFeatures(quint32)), this, SLOT(setAvailableFeatures(quint32))); + } + void registerSensors() { QSensorManager::registerBackend(QAccelerometer::type, SimulatorAccelerometer::id, this); @@ -99,6 +106,39 @@ public: return 0; } + + // Copied from the emulator codebase + enum Features { + Accelerometer = 0x01, + Magnetometer = 0x02, + Compass = 0x04, + Infraredsensor = 0x08, + Lightsensor = 0x10 + }; + +public slots: + void setAvailableFeatures(quint32 features) + { + check(features&Accelerometer, QAccelerometer::type, SimulatorAccelerometer::id); + check(features&Lightsensor, QLightSensor::type, SimulatorLightSensor::id); + check(features&Lightsensor, QAmbientLightSensor::type, SimulatorAmbientLightSensor::id); + check(features&Magnetometer, QMagnetometer::type, SimulatorMagnetometer::id); + check(features&Compass, QCompass::type, SimulatorCompass::id); + check(features&Infraredsensor, QIRProximitySensor::type, SimulatorIRProximitySensor::id); + check(features&Infraredsensor, QProximitySensor::type, SimulatorProximitySensor::id); + } + +private: + void check(bool test, const QByteArray &type, const QByteArray &id) + { + if (test) { + if (!QSensorManager::isBackendRegistered(type, id)) + QSensorManager::registerBackend(type, id, this); + } else { + if (QSensorManager::isBackendRegistered(type, id)) + QSensorManager::unregisterBackend(type, id); + } + } }; #include "main.moc" diff --git a/src/plugins/sensors/simulator/simulatorcommon.cpp b/src/plugins/sensors/simulator/simulatorcommon.cpp index f07cc468..cec02181 100644 --- a/src/plugins/sensors/simulator/simulatorcommon.cpp +++ b/src/plugins/sensors/simulator/simulatorcommon.cpp @@ -80,8 +80,9 @@ public: signals: void queueConnectToServer(); - void connectionFailed(); void initialSensorsDataSent(); + void connectionFailed(); + void setAvailableFeatures(quint32 features); void setAmbientLightData(const QtMobility::QAmbientLightReadingData &); void setLightData(const QtMobility::QLightReadingData &); void setAccelerometerData(const QtMobility::QAccelerometerReadingData &); @@ -121,6 +122,8 @@ SensorsConnection::SensorsConnection(QObject *parent) this, SLOT(initialSensorsDataSent())); connect(mConnection, SIGNAL(connectionFailed()), this, SLOT(slotConnectionFailed())); + connect(mConnection, SIGNAL(setAvailableFeatures(quint32)), + this, SIGNAL(setAvailableFeatures(quint32))); connect(mConnection, SIGNAL(setAmbientLightData(QtMobility::QAmbientLightReadingData)), this, SLOT(setAmbientLightData(QtMobility::QAmbientLightReadingData))); connect(mConnection, SIGNAL(setLightData(QtMobility::QLightReadingData)), diff --git a/src/plugins/sensors/simulator/simulatorcommon.h b/src/plugins/sensors/simulator/simulatorcommon.h index 7890d6bb..96ef69a6 100644 --- a/src/plugins/sensors/simulator/simulatorcommon.h +++ b/src/plugins/sensors/simulator/simulatorcommon.h @@ -60,6 +60,9 @@ public: bool safe() const { return mInitialDataSent; } bool connectionFailed() const { return mConnectionFailed; } +signals: + void setAvailableFeatures(quint32 features); + public slots: void setAmbientLightData(const QtMobility::QAmbientLightReadingData &); void setLightData(const QtMobility::QLightReadingData &); -- cgit v1.2.3