#ifndef EANDROIDSENSORDEVICE_H #define EANDROIDSENSORDEVICE_H #include #include #include #include #include #include #include #include #include #include #include #include #include typedef QVarLengthArray SensorEventArray; typedef QHash > 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