summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/eandroid/eandroidsensordevice.h
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@digia.com>2013-09-02 08:51:10 +0200
committerGatis Paeglis <gatis.paeglis@digia.com>2013-09-20 12:05:56 +0300
commit4eff9a96845e3e87b12ea036bb5d32cbc05fd47a (patch)
tree5ac4c79dd0f568504d2c2db915bc1011b30f27e4 /src/plugins/sensors/eandroid/eandroidsensordevice.h
parent31ce4063bdafa0b6c1b852d0167792ada4faf946 (diff)
Introducing eAndroid sensor plugin
Change-Id: I8d0bad4ca759cf6d4f6f1f0ef67e6251b3b0e42f Reviewed-by: Eirik Aavitsland <eirik.aavitsland@digia.com>
Diffstat (limited to 'src/plugins/sensors/eandroid/eandroidsensordevice.h')
-rw-r--r--src/plugins/sensors/eandroid/eandroidsensordevice.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/plugins/sensors/eandroid/eandroidsensordevice.h b/src/plugins/sensors/eandroid/eandroidsensordevice.h
new file mode 100644
index 0000000..6d9a64b
--- /dev/null
+++ b/src/plugins/sensors/eandroid/eandroidsensordevice.h
@@ -0,0 +1,80 @@
+#ifndef EANDROIDSENSORDEVICE_H
+#define EANDROIDSENSORDEVICE_H
+
+#include <eandroidaccelerometer.h>
+#include <eandroidlight.h>
+#include <eandroidambientlightsensor.h>
+#include <eandroidgyroscope.h>
+#include <eandroidmagnetometer.h>
+#include <eandroidrotationsensor.h>
+
+#include <QtCore/QThread>
+#include <QtCore/QMutex>
+#include <QtCore/QReadWriteLock>
+#include <QtCore/QVarLengthArray>
+#include <QtCore/QHash>
+#include <QtCore/QList>
+#include <QtCore/QDebug>
+
+typedef QVarLengthArray<sensors_event_t, 16> SensorEventArray;
+typedef QHash<int, QList<EAndroidBaseSensor *> > ListenersHash;
+
+class EAndroidSensorDevice;
+
+class EventReaderThread : public QThread
+{
+ Q_OBJECT
+public:
+ EventReaderThread(EAndroidSensorDevice *manager);
+ void run();
+ SensorEventArray* lock();
+ inline void unlock() { m_mutex.unlock(); }
+
+signals:
+ void eventPending();
+
+private:
+ EAndroidSensorDevice *m_device;
+ SensorEventArray m_events;
+ QMutex m_mutex;
+};
+
+class EAndroidSensorDevice : public QObject
+{
+ Q_OBJECT
+public:
+ static EAndroidSensorDevice* instance();
+
+ void registerListener(int type, EAndroidBaseSensor *sensor, int dataRateHz);
+ void unregisterListener(int type, EAndroidBaseSensor *sensor);
+ int availableSensors(sensor_t const** list) const;
+ qint32 maxDataRate(int type) const;
+ QString description(int type) const;
+
+protected:
+ void initSensorDevice();
+ int indexForType(int type) const;
+ void setActive(int type, bool enable);
+ void setDelay(int type, int dataRateHz) const;
+
+public slots:
+ void processSensorEvents() const;
+
+private:
+ static EAndroidSensorDevice* m_instance;
+ EAndroidSensorDevice();
+ EAndroidSensorDevice(const EAndroidSensorDevice &);
+ EAndroidSensorDevice& operator=(const EAndroidSensorDevice &);
+
+ friend class EventReaderThread;
+ EventReaderThread *m_eventThread;
+
+ sensors_module_t* m_sensorModule;
+ sensors_poll_device_t* m_sensorDevice;
+ sensor_t const* m_availableSensorsList;
+ int m_availableSensors;
+
+ ListenersHash m_listenersHash;
+};
+
+#endif // EANDROIDSENSORDEVICE_H