improved desktop UI
[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 joyStickConfigChanged)
16     Q_PROPERTY(bool calibrate READ calibrate WRITE setCalibrate NOTIFY joyStickConfigChanged)
17     Q_PROPERTY(QString joyStickName READ joyStickName NOTIFY joyStickConfigChanged)
18     Q_PROPERTY(int rawAxis1  READ rawAxis1 NOTIFY joyStickChanged)
19     Q_PROPERTY(int rawAxis2  READ rawAxis2 NOTIFY joyStickChanged)
20     Q_PROPERTY(int rawAxis3  READ rawAxis3 NOTIFY joyStickChanged)
21     Q_PROPERTY(int rawAxis4  READ rawAxis4 NOTIFY joyStickChanged)
22     Q_PROPERTY(int rawAxis5  READ rawAxis5 NOTIFY joyStickChanged)
23     Q_PROPERTY(int rawAxis6  READ rawAxis6 NOTIFY joyStickChanged)
24     Q_PROPERTY(int maxAxis1  READ maxAxis1 NOTIFY joyStickChanged)
25     Q_PROPERTY(int maxAxis2  READ maxAxis2 NOTIFY joyStickChanged)
26     Q_PROPERTY(int maxAxis3  READ maxAxis3 NOTIFY joyStickChanged)
27     Q_PROPERTY(int maxAxis4  READ maxAxis4 NOTIFY joyStickChanged)
28     Q_PROPERTY(int maxAxis5  READ maxAxis5 NOTIFY joyStickChanged)
29     Q_PROPERTY(int maxAxis6  READ maxAxis6 NOTIFY joyStickChanged)
30     Q_PROPERTY(int minAxis1  READ minAxis1 NOTIFY joyStickChanged)
31     Q_PROPERTY(int minAxis2  READ minAxis2 NOTIFY joyStickChanged)
32     Q_PROPERTY(int minAxis3  READ minAxis3 NOTIFY joyStickChanged)
33     Q_PROPERTY(int minAxis4  READ minAxis4 NOTIFY joyStickChanged)
34     Q_PROPERTY(int minAxis5  READ minAxis5 NOTIFY joyStickChanged)
35     Q_PROPERTY(int minAxis6  READ minAxis6 NOTIFY joyStickChanged)
36     Q_PROPERTY(float axis1   READ axis1    NOTIFY joyStickChanged)
37     Q_PROPERTY(float axis2   READ axis2    NOTIFY joyStickChanged)
38     Q_PROPERTY(float axis3   READ axis3    NOTIFY joyStickChanged)
39     Q_PROPERTY(float axis4   READ axis4    NOTIFY joyStickChanged)
40     Q_PROPERTY(float axis5   READ axis5    NOTIFY joyStickChanged)
41     Q_PROPERTY(float axis6   READ axis6    NOTIFY joyStickChanged)
42     Q_PROPERTY(float calAxis1   READ calAxis1    NOTIFY joyStickChanged)
43     Q_PROPERTY(float calAxis2   READ calAxis2    NOTIFY joyStickChanged)
44     Q_PROPERTY(float calAxis3   READ calAxis3    NOTIFY joyStickChanged)
45     Q_PROPERTY(float calAxis4   READ calAxis4    NOTIFY joyStickChanged)
46     Q_PROPERTY(float calAxis5   READ calAxis5    NOTIFY joyStickChanged)
47     Q_PROPERTY(float calAxis6   READ calAxis6    NOTIFY joyStickChanged)
48     Q_PROPERTY(float aileron  READ axis1 NOTIFY joyStickChanged)
49     Q_PROPERTY(float elevator READ axis2 NOTIFY joyStickChanged)
50     Q_PROPERTY(float throtle  READ axis3 NOTIFY joyStickChanged)
51     Q_PROPERTY(float rudder   READ axis4 NOTIFY joyStickChanged)
52     Q_PROPERTY(int   mapAxis1 READ mapAxis1 WRITE setMapAxis1 NOTIFY joyStickConfigChanged)
53     Q_PROPERTY(int   mapAxis2 READ mapAxis2 WRITE setMapAxis2 NOTIFY joyStickConfigChanged)
54     Q_PROPERTY(int   mapAxis3 READ mapAxis3 WRITE setMapAxis3 NOTIFY joyStickConfigChanged)
55     Q_PROPERTY(int   mapAxis4 READ mapAxis4 WRITE setMapAxis4 NOTIFY joyStickConfigChanged)
56     Q_PROPERTY(int   mapAxis5 READ mapAxis5 WRITE setMapAxis5 NOTIFY joyStickConfigChanged)
57     Q_PROPERTY(int   mapAxis6 READ mapAxis6 WRITE setMapAxis6 NOTIFY joyStickConfigChanged)
58     Q_PROPERTY(bool  invertAxis1 READ invertAxis1 WRITE setInvertAxis1 NOTIFY joyStickConfigChanged)
59     Q_PROPERTY(bool  invertAxis2 READ invertAxis2 WRITE setInvertAxis2 NOTIFY joyStickConfigChanged)
60     Q_PROPERTY(bool  invertAxis3 READ invertAxis3 WRITE setInvertAxis3 NOTIFY joyStickConfigChanged)
61     Q_PROPERTY(bool  invertAxis4 READ invertAxis4 WRITE setInvertAxis4 NOTIFY joyStickConfigChanged)
62     Q_PROPERTY(bool  invertAxis5 READ invertAxis5 WRITE setInvertAxis5 NOTIFY joyStickConfigChanged)
63     Q_PROPERTY(bool  invertAxis6 READ invertAxis6 WRITE setInvertAxis6 NOTIFY joyStickConfigChanged)
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;emit joyStickConfigChanged(); };
113         void setInvertAxis2(bool val) { m_invertAxis2=val;emit joyStickConfigChanged(); };
114         void setInvertAxis3(bool val) { m_invertAxis3=val;emit joyStickConfigChanged(); };
115         void setInvertAxis4(bool val) { m_invertAxis4=val;emit joyStickConfigChanged(); };
116         void setInvertAxis5(bool val) { m_invertAxis5=val;emit joyStickConfigChanged(); };
117         void setInvertAxis6(bool val) { m_invertAxis6=val;emit joyStickConfigChanged(); };
118         void setMapAxis1(int val) { if(m_mapAxis[0]!=val) emit joyStickConfigChanged();m_mapAxis[0]=val; };
119         void setMapAxis2(int val) { if(m_mapAxis[1]!=val) emit joyStickConfigChanged();m_mapAxis[1]=val; };
120         void setMapAxis3(int val) { if(m_mapAxis[2]!=val) emit joyStickConfigChanged();m_mapAxis[2]=val; };
121         void setMapAxis4(int val) { if(m_mapAxis[3]!=val) emit joyStickConfigChanged();m_mapAxis[3]=val; };
122         void setMapAxis5(int val) { if(m_mapAxis[4]!=val) emit joyStickConfigChanged();m_mapAxis[4]=val; };
123         void setMapAxis6(int val) { if(m_mapAxis[5]!=val) emit joyStickConfigChanged();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     void joyStickConfigChanged();
135 public slots:
136     void updateJoyStick();
137 private:
138         // Joystick
139      QSettings *m_joySettings;
140      bool       m_haveJoyStick;
141      QString    m_joyStickName;
142      bool       m_joyCal;
143             int m_rawAxis1;
144             int m_rawAxis2;
145             int m_rawAxis3;
146             int m_rawAxis4;
147             int m_rawAxis5;
148             int m_rawAxis6;
149             float m_axis1;
150             float m_axis2;
151             float m_axis3;
152             float m_axis4;
153             float m_axis5;
154             float m_axis6;
155             float m_calAxis1;
156             float m_calAxis2;
157             float m_calAxis3;
158             float m_calAxis4;
159             float m_calAxis5;
160             float m_calAxis6;
161             int m_minAxis1;
162             int m_minAxis2;
163             int m_minAxis3;
164             int m_minAxis4;
165             int m_minAxis5;
166             int m_minAxis6;
167             int m_maxAxis1;
168             int m_maxAxis2;
169             int m_maxAxis3;
170             int m_maxAxis4;
171             int m_maxAxis5;
172             int m_maxAxis6;
173             bool m_invertAxis1;
174             bool m_invertAxis2;
175             bool m_invertAxis3;
176             bool m_invertAxis4;
177             bool m_invertAxis5;
178             bool m_invertAxis6;
179             int m_mapAxis[6];
180             QTimer joyStickTimer;
181 #ifdef HAVE_SDL
182
183     SDL_Joystick *joyStick;
184 #endif
185 };
186
187 #endif // JOYSTICK_H