summaryrefslogtreecommitdiffstats
path: root/src/qtmsensors/backendwrapper_p.h
blob: 164cfce36c262bfdf538b1115005ce82a89c6a71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef BACKENDWRAPPER_P_H
#define BACKENDWRAPPER_P_H

#include "qsensorbackend_p.h"
#include "qaccelerometer.h"
#include <QtSensors/qaccelerometer.h>
#include "qambientlightsensor.h"
#include <QtSensors/qambientlightsensor.h>
#include "qcompass.h"
#include <QtSensors/qcompass.h>
#include "qgyroscope.h"
#include <QtSensors/qgyroscope.h>
#include "qlightsensor.h"
#include <QtSensors/qlightsensor.h>
#include "qmagnetometer.h"
#include <QtSensors/qmagnetometer.h>
#include "qorientationsensor.h"
#include <QtSensors/qorientationsensor.h>
#include "qproximitysensor.h"
#include <QtSensors/qproximitysensor.h>
#include "qrotationsensor.h"
#include <QtSensors/qrotationsensor.h>
#include "qtapsensor.h"
#include <QtSensors/qtapsensor.h>

QT_BEGIN_NAMESPACE
QTM_BEGIN_NAMESPACE

class QTM_SENSORS_EXPORT QSensorWrapper : public QSensorBackend
{
    Q_OBJECT
public:
    explicit QSensorWrapper(QSensor *sensor);

    void start();
    void stop();

    void setProperty(const char *name, const QVariant &value);
    QVariant property(const char *name) const;

    virtual bool _connect() = 0;

public slots:
    void fetchData();
    void reportSensorError(int);

protected:
    void init(QObject *wsensor);

private:
    virtual void _start() = 0;
    virtual void _stop() = 0;
    virtual void _fetchData() = 0;
protected:
    QObject *m_wsensor;
};

#define DECLARE_WRAPPER(sensorclass, readingclass)\
    class sensorclass ## Wrapper : public QSensorWrapper {\
    public:\
        explicit sensorclass ## Wrapper(QSensor *sensor);\
        void _start();\
        void _stop();\
        void _fetchData();\
        bool _connect();\
        readingclass m_reading;\
    };

#define IMPLEMENT_WRAPPER(sensorclass, readingclass, fetchfunc)\
    sensorclass ## Wrapper::sensorclass ## Wrapper(QSensor *wsensor) : QSensorWrapper(wsensor) {\
        setReading(&m_reading);\
        NEW_NAMESPACE(sensorclass) *sensor = new NEW_NAMESPACE(sensorclass)(this);\
        init(sensor);\
    }\
    bool sensorclass ## Wrapper::_connect() {\
        QSensor *wsensor = this->sensor();\
        NEW_NAMESPACE(sensorclass) *sensor = static_cast<NEW_NAMESPACE(sensorclass)*>(m_wsensor);\
        sensor->setIdentifier(wsensor->identifier());\
        sensor->connectToBackend();\
        setDescription(sensor->description());\
        foreach (const NEW_NAMESPACE(qoutputrange) &range, sensor->outputRanges()) {\
            addOutputRange(range.minimum, range.maximum, range.accuracy);\
        }\
        foreach (const NEW_NAMESPACE(qrange) &range, sensor->availableDataRates()) {\
            addDataRate(range.first, range.second);\
        }\
        return sensor->isConnectedToBackend();\
    }\
    void sensorclass ## Wrapper::_start() {\
        NEW_NAMESPACE(sensorclass) *sensor = static_cast<NEW_NAMESPACE(sensorclass)*>(m_wsensor);\
        if (!sensor->start()) {\
            if (sensor->isBusy()) sensorBusy();\
            sensorStopped();\
        }\
    }\
    void sensorclass ## Wrapper::_stop() { NEW_NAMESPACE(sensorclass) *sensor = static_cast<NEW_NAMESPACE(sensorclass)*>(m_wsensor); sensor->stop(); }\
    void sensorclass ## Wrapper::_fetchData() { NEW_NAMESPACE(sensorclass) *sensor = static_cast<NEW_NAMESPACE(sensorclass)*>(m_wsensor); fetchfunc }

DECLARE_WRAPPER(QAccelerometer, QAccelerometerReading)
DECLARE_WRAPPER(QAmbientLightSensor, QAmbientLightReading)
DECLARE_WRAPPER(QCompass, QCompassReading)
DECLARE_WRAPPER(QGyroscope, QGyroscopeReading)
DECLARE_WRAPPER(QLightSensor, QLightReading)
DECLARE_WRAPPER(QMagnetometer, QMagnetometerReading)
DECLARE_WRAPPER(QOrientationSensor, QOrientationReading)
DECLARE_WRAPPER(QProximitySensor, QProximityReading)
DECLARE_WRAPPER(QRotationSensor, QRotationReading)
DECLARE_WRAPPER(QTapSensor, QTapReading)

QTM_END_NAMESPACE
QT_END_NAMESPACE

#endif