diff options
Diffstat (limited to 'src/plugins/sensors/eandroid/eandroidsensordevice.h')
-rw-r--r-- | src/plugins/sensors/eandroid/eandroidsensordevice.h | 80 |
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 |