ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / UI / gamepad.h
1 #ifndef _GAMEPAD_H_
2 #define _GAMEPAD_H_
3
4 #include "UI/ui.h"
5
6 #define GAMEPAD_LOGICTECH_ID 0x046dc21a
7
8 typedef enum {
9   PAD_X,
10   PAD_Y
11 } PAD_AXIS;
12
13 typedef enum {
14   PAD_AG = 0,
15   PAD_AB,
16   PAD_AD,
17   PAD_AH,
18   PAD_L1,
19   PAD_R1,
20   PAD_L2,
21   PAD_R2,
22   PAD_SELECT,
23   PAD_START,
24   PAD_NUM_BUTTONS
25 } PAD_BUTTONS;
26
27 extern input_device_t gamepad;
28
29 C_RESULT open_gamepad(void);
30 C_RESULT update_gamepad(void);
31 C_RESULT close_gamepad(void);
32
33 ///////////////////////////////////////////////////
34 typedef enum JOYTICK_DEVICES
35 {
36         JOYSTICK_DEVICE_SIDEWINDER,
37         JOYSTICK_DEVICE_CYBORG,
38         JOYSTICK_DEVICE_MAX,
39 } JOYSTICK_DEVICES;
40
41 typedef enum
42 {
43         JOYBTN_SELECT=0,
44         JOYBTN_START,
45         JOYBTN_FIRE,
46         JOYBTN_NUM,
47 } JOYSTICK_BUTTONS;
48
49 /* On Joystick Side winder, buttons can return analogic values (though non-precise) */
50 typedef enum
51 {
52         JOYAXIS_ROLL,
53         JOYAXIS_PITCH,
54         JOYAXIS_YAW,
55         JOYAXIS_GAZ,
56         JOYAXIS_NUM,
57 } JOYSTICK_AXIS;
58
59 extern input_device_t joystick;
60
61 C_RESULT open_joystick(void);
62 C_RESULT update_joystick(void);
63 C_RESULT close_joystick(void);
64 C_RESULT (*button_callback)(JOYSTICK_BUTTONS button);
65 C_RESULT (*axis_callback)(JOYSTICK_AXIS axis);
66
67 ///////////////////////////////////////////////////////////////
68 #define GAMEPAD_PLAYSTATION3_ID 0x054C0268
69
70 typedef enum
71 {
72     PS3BTN_SELECT=0,
73     PS3BTN_L3,
74     PS3BTN_R3,
75     PS3BTN_START,
76     PS3BTN_UPARROW,
77     PS3BTN_RIGHTARROW,
78     PS3BTN_DOWNARROW,
79     PS3BTN_LEFTARROW,
80     PS3BTN_L2,
81     PS3BTN_R2,
82     PS3BTN_L1,
83     PS3BTN_R1,
84     PS3BTN_TRIANGLE,
85     PS3BTN_CIRCLE,
86     PS3BTN_CROSS,
87     PS3BTN_SQUARE,
88     PS3BTN_PS3
89 }PS3PAD_BUTTONS;
90
91 /* On Playstation3 Gamepad, buttons can return analogic values (though non-precise) */
92 typedef enum
93 {
94     PS3AXIS_STICK1_LR=0,
95     PS3AXIS_STICK1_UD,
96     PS3AXIS_STICK2_LR,
97     PS3AXIS_STICK2_UD,
98     PS3AXIS_UPARROW=8,
99     PS3AXIS_RIGHTARROW,
100     PS3AXIS_DOWNARROW,
101     PS3AXIS_LEFTARROW,
102     PS3AXIS_L2,
103     PS3AXIS_R2,
104     PS3AXIS_L1,
105     PS3AXIS_R1,
106     PS3AXIS_TRIANGLE,
107     PS3AXIS_CIRCLE,
108     PS3AXIS_CROSS,
109     PS3AXIS_SQUARE
110 }PS3PAD_AXIS;
111
112
113 extern input_device_t ps3pad;
114
115
116 C_RESULT open_ps3pad(void);
117 C_RESULT update_ps3pad(void);
118 C_RESULT close_ps3pad(void);
119
120
121 //////////////////////////////////////////////////
122 #define RADIO_GP_ID 0x061c0010
123
124 typedef enum _TYPE
125 {
126   TYPE_MIN      =  0,
127   TYPE_BUTTON   =  1,
128   TYPE_ANALOGIC =  2,
129   TYPE_MAX      =  3
130 } TYPE;
131
132 typedef enum _ANALOGIC_RADIO_COMMAND_GP
133 {
134   GP_ROLL  =  0,
135   GP_GAZ   =  1,
136   GP_PITCH =  2,
137   GP_PID   =  3,
138   GP_YAW   =  4,
139   GP_ANALOG_MAX   =  5,
140 } ANALOGIC_RADIO_COMMAND_GP;
141
142 #define  NUM_A_GP_MIN GP_ROLL
143 #define  NUM_A_GP_MAX GP_MAX
144
145 #define OFFSET_PITCH_GP 127
146 #define OFFSET_ROLL_GP  127
147 #define OFFSET_YAW_GP   127
148 #define OFFSET_GAZ_GP   198
149
150 #define NUM_PITCH_GP     -3
151 #define NUM_ROLL_GP       3
152 #define NUM_YAW_GP        3
153 #define NUM_GAZ_GP       -7
154
155 #define DEC_PITCH_GP      1
156 #define DEC_ROLL_GP       1
157 #define DEC_YAW_GP        1
158 #define DEC_GAZ_GP        2
159
160
161 typedef enum _BUTTON_RADIO_COMMAND_GP
162 {
163   GP_BOARD_LEFT      =   0, // switch above left joystick
164   GP_SIDE_RIGHT      =   1, // right corner switch
165   GP_IMPULSE         =   2, // Red button
166   GP_SIDE_LEFT_DOWN  =   3, // left corner switch, down position
167   GP_SIDE_LEFT_UP    =   4, // left corner switch, up position
168   GP_BUTTON_MAX             =   5
169 } BUTTON_RADIO_COMMAND_GP;
170
171 #define  NUM_B_GP_MIN GP_BOARD_LEFT
172 #define  NUM_B_GP_MAX GP_MAX
173 extern input_device_t radioGP;
174
175 C_RESULT open_radioGP(void);
176 C_RESULT update_radioGP(void);
177 C_RESULT close_radioGP(void);
178
179 #endif // _GAMEPAD_H_