sync repo
[mardrone] / mardrone / dronelib / joystick.h
1 #ifndef JOYSTICK_H
2 #define JOYSTICK_H
3
4 #include <QObject>
5 #include <QTimer>
6 #include <QSettings>
7 #include <QDebug>
8 #include <QSettings>
9 #ifdef HAVE_SDL
10 #include <SDL/SDL.h>
11 #endif
12 class JoyStick : public QObject
13 {
14     Q_OBJECT
15     Q_PROPERTY(bool haveJoyStick READ haveJoyStick NOTIFY joyStickChanged)
16     Q_PROPERTY(QString joyStickName READ joyStickName NOTIFY joyStickChanged)
17     Q_PROPERTY(int rawAxis1  READ rawAxis1 NOTIFY joyStickChanged)
18     Q_PROPERTY(int rawAxis2  READ rawAxis2 NOTIFY joyStickChanged)
19     Q_PROPERTY(int rawAxis3  READ rawAxis3 NOTIFY joyStickChanged)
20     Q_PROPERTY(int rawAxis4  READ rawAxis4 NOTIFY joyStickChanged)
21     Q_PROPERTY(int rawAxis5  READ rawAxis5 NOTIFY joyStickChanged)
22     Q_PROPERTY(int rawAxis6  READ rawAxis6 NOTIFY joyStickChanged)
23     Q_PROPERTY(int maxAxis1  READ maxAxis1 NOTIFY joyStickChanged)
24     Q_PROPERTY(int maxAxis2  READ maxAxis2 NOTIFY joyStickChanged)
25     Q_PROPERTY(int maxAxis3  READ maxAxis3 NOTIFY joyStickChanged)
26     Q_PROPERTY(int maxAxis4  READ maxAxis4 NOTIFY joyStickChanged)
27     Q_PROPERTY(int maxAxis5  READ maxAxis5 NOTIFY joyStickChanged)
28     Q_PROPERTY(int maxAxis6  READ maxAxis6 NOTIFY joyStickChanged)
29     Q_PROPERTY(int minAxis1  READ minAxis1 NOTIFY joyStickChanged)
30     Q_PROPERTY(int minAxis2  READ minAxis2 NOTIFY joyStickChanged)
31     Q_PROPERTY(int minAxis3  READ minAxis3 NOTIFY joyStickChanged)
32     Q_PROPERTY(int minAxis4  READ minAxis4 NOTIFY joyStickChanged)
33     Q_PROPERTY(int minAxis5  READ minAxis5 NOTIFY joyStickChanged)
34     Q_PROPERTY(int minAxis6  READ minAxis6 NOTIFY joyStickChanged)
35     Q_PROPERTY(float axis1   READ axis1    NOTIFY joyStickChanged)
36     Q_PROPERTY(float axis2   READ axis2    NOTIFY joyStickChanged)
37     Q_PROPERTY(float axis3   READ axis3    NOTIFY joyStickChanged)
38     Q_PROPERTY(float axis4   READ axis4    NOTIFY joyStickChanged)
39     Q_PROPERTY(float axis5   READ axis5    NOTIFY joyStickChanged)
40     Q_PROPERTY(float axis6   READ axis6    NOTIFY joyStickChanged)
41     Q_PROPERTY(float calAxis1   READ calAxis1    NOTIFY joyStickChanged)
42     Q_PROPERTY(float calAxis2   READ calAxis2    NOTIFY joyStickChanged)
43     Q_PROPERTY(float calAxis3   READ calAxis3    NOTIFY joyStickChanged)
44     Q_PROPERTY(float calAxis4   READ calAxis4    NOTIFY joyStickChanged)
45     Q_PROPERTY(float calAxis5   READ calAxis5    NOTIFY joyStickChanged)
46     Q_PROPERTY(float calAxis6   READ calAxis6    NOTIFY joyStickChanged)
47     Q_PROPERTY(float aileron  READ axis1 NOTIFY joyStickChanged)
48     Q_PROPERTY(float elevator READ axis2 NOTIFY joyStickChanged)
49     Q_PROPERTY(float throtle  READ axis3 NOTIFY joyStickChanged)
50     Q_PROPERTY(float rudder   READ axis4 NOTIFY joyStickChanged)
51     Q_PROPERTY(int   mapAxis1 READ mapAxis1 WRITE setMapAxis1 NOTIFY joyStickChanged)
52     Q_PROPERTY(int   mapAxis2 READ mapAxis2 WRITE setMapAxis2 NOTIFY joyStickChanged)
53     Q_PROPERTY(int   mapAxis3 READ mapAxis3 WRITE setMapAxis3 NOTIFY joyStickChanged)
54     Q_PROPERTY(int   mapAxis4 READ mapAxis4 WRITE setMapAxis4 NOTIFY joyStickChanged)
55     Q_PROPERTY(int   mapAxis5 READ mapAxis5 WRITE setMapAxis5 NOTIFY joyStickChanged)
56     Q_PROPERTY(int   mapAxis6 READ mapAxis6 WRITE setMapAxis6 NOTIFY joyStickChanged)
57     Q_PROPERTY(bool  invertAxis1 READ invertAxis1 WRITE setInvertAxis1 NOTIFY joyStickChanged)
58     Q_PROPERTY(bool  invertAxis2 READ invertAxis2 WRITE setInvertAxis2 NOTIFY joyStickChanged)
59     Q_PROPERTY(bool  invertAxis3 READ invertAxis3 WRITE setInvertAxis3 NOTIFY joyStickChanged)
60     Q_PROPERTY(bool  invertAxis4 READ invertAxis4 WRITE setInvertAxis4 NOTIFY joyStickChanged)
61     Q_PROPERTY(bool  invertAxis5 READ invertAxis5 WRITE setInvertAxis5 NOTIFY joyStickChanged)
62     Q_PROPERTY(bool  invertAxis6 READ invertAxis6 WRITE setInvertAxis6 NOTIFY joyStickChanged)
63     Q_PROPERTY(bool  calibrate READ calibrate  WRITE  setCalibrate)
64 public:
65     explicit JoyStick(QObject *parent = 0);
66     ~JoyStick();
67     // JoyStick configuration
68         QString joyStickName() { return m_joyStickName; };
69         bool haveJoyStick()       { return m_haveJoyStick; };
70         int rawAxis1() { return m_rawAxis1; };
71         int rawAxis2() { return m_rawAxis2; };
72         int rawAxis3() { return m_rawAxis3; };
73         int rawAxis4() { return m_rawAxis4; };
74         int rawAxis5() { return m_rawAxis5; };
75         int rawAxis6() { return m_rawAxis6; };
76         int maxAxis1() { return m_maxAxis1; };
77         int maxAxis2() { return m_maxAxis2; };
78         int maxAxis3() { return m_maxAxis3; };
79         int maxAxis4() { return m_maxAxis4; };
80         int maxAxis5() { return m_maxAxis5; };
81         int maxAxis6() { return m_maxAxis6; };
82         int minAxis1() { return m_minAxis1; };
83         int minAxis2() { return m_minAxis2; };
84         int minAxis3() { return m_minAxis3; };
85         int minAxis4() { return m_minAxis4; };
86         int minAxis5() { return m_minAxis5; };
87         int minAxis6() { return m_minAxis6; };
88         float axis1()  { return m_axis1; };
89         float axis2()  { return m_axis2; };
90         float axis3()  { return m_axis3; };
91         float axis4()  { return m_axis4; };
92         float axis5()  { return m_axis5; };
93         float axis6()  { return m_axis6; };
94         float calAxis1()  { return m_calAxis1; };
95         float calAxis2()  { return m_calAxis2; };
96         float calAxis3()  { return m_calAxis3; };
97         float calAxis4()  { return m_calAxis4; };
98         float calAxis5()  { return m_calAxis5; };
99         float calAxis6()  { return m_calAxis6; };
100         int mapAxis1() { return m_mapAxis[0]; };
101         int mapAxis2() { return m_mapAxis[1]; };
102         int mapAxis3() { return m_mapAxis[2]; };
103         int mapAxis4() { return m_mapAxis[3]; };
104         int mapAxis5() { return m_mapAxis[4]; };
105         int mapAxis6() { return m_mapAxis[5]; };
106         int invertAxis1() { return m_invertAxis1; };
107         int invertAxis2() { return m_invertAxis2; };
108         int invertAxis3() { return m_invertAxis3; };
109         int invertAxis4() { return m_invertAxis4; };
110         int invertAxis5() { return m_invertAxis5; };
111         int invertAxis6() { return m_invertAxis6; };
112         void setInvertAxis1(bool val) { m_invertAxis1=val; };
113         void setInvertAxis2(bool val) { m_invertAxis2=val; };
114         void setInvertAxis3(bool val) { m_invertAxis3=val; };
115         void setInvertAxis4(bool val) { m_invertAxis4=val; };
116         void setInvertAxis5(bool val) { m_invertAxis5=val; };
117         void setInvertAxis6(bool val) { m_invertAxis6=val; };
118         void setMapAxis1(int val) { m_mapAxis[0]=val; };
119         void setMapAxis2(int val) { m_mapAxis[1]=val; };
120         void setMapAxis3(int val) { m_mapAxis[2]=val; };
121         void setMapAxis4(int val) { m_mapAxis[3]=val; };
122         void setMapAxis5(int val) { m_mapAxis[4]=val; };
123         void setMapAxis6(int val) { m_mapAxis[5]=val; };
124         float getMapped(int axis);
125         void setMapped(int axis,float value);
126         bool calibrate()  { return m_joyCal; };
127         void setCalibrate(bool val);
128         void saveCalibration();
129
130
131
132 signals:
133     void joyStickChanged();
134 public slots:
135     void updateJoyStick();
136 private:
137         // Joystick
138      QSettings *m_joySettings;
139      bool       m_haveJoyStick;
140      QString    m_joyStickName;
141      bool       m_joyCal;
142             int m_rawAxis1;
143             int m_rawAxis2;
144             int m_rawAxis3;
145             int m_rawAxis4;
146             int m_rawAxis5;
147             int m_rawAxis6;
148             float m_axis1;
149             float m_axis2;
150             float m_axis3;
151             float m_axis4;
152             float m_axis5;
153             float m_axis6;
154             float m_calAxis1;
155             float m_calAxis2;
156             float m_calAxis3;
157             float m_calAxis4;
158             float m_calAxis5;
159             float m_calAxis6;
160             int m_minAxis1;
161             int m_minAxis2;
162             int m_minAxis3;
163             int m_minAxis4;
164             int m_minAxis5;
165             int m_minAxis6;
166             int m_maxAxis1;
167             int m_maxAxis2;
168             int m_maxAxis3;
169             int m_maxAxis4;
170             int m_maxAxis5;
171             int m_maxAxis6;
172             bool m_invertAxis1;
173             bool m_invertAxis2;
174             bool m_invertAxis3;
175             bool m_invertAxis4;
176             bool m_invertAxis5;
177             bool m_invertAxis6;
178             int m_mapAxis[6];
179             QTimer joyStickTimer;
180 #ifdef HAVE_SDL
181
182     SDL_Joystick *joyStick;
183 #endif
184 };
185
186 #endif // JOYSTICK_H