fixed a possible deadlock in DrZ80
[picodrive.git] / platform / gp2x / usbjoy.h
1 /* Title: USB Joystick library
2    Version 0.2
3    Written by Puck2099 (puck2099@gmail.com), (c) 2006.
4    <http://www.gp32wip.com>
5
6    If you use this library or a part of it, please, let it know.
7
8    This library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Lesser General Public
10    License as published by the Free Software Foundation; either
11    version 2.1 of the License, or (at your option) any later version.
12
13    This library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with this library; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21 */
22
23 #ifndef USBJOY_H
24 #define USBJOY_H
25
26 /* notaz: my Logitech has different button layout, and I want it to match gp2x's */
27 typedef enum {
28         JOY_TYPE_GENERIC,
29         JOY_TYPE_LOGITECH
30 } joy_type;
31
32 /*
33   Enumeration: Axes values
34   This enumeration contains shortcuts to the values used on axes.
35
36   Constants:
37   JOYUP    - Joystick Up
38   JOYDOWN  - Joystick Down
39   JOYLEFT  - Joystick Left
40   JOYRIGHT - Joystick Right
41
42   See also:
43   <joy_getaxe>
44 */
45 #define JOYUP    (0)
46 #define JOYDOWN  (1)
47 #define JOYLEFT  (2)
48 #define JOYRIGHT (3)
49
50
51 /*
52   Struct: usbjoy
53
54   Contains all Joystick needed information.
55
56   Fields:
57   fd - File descriptor used.
58   name - Joystick's name.
59   device - /dev/input/jsX device.
60   numbuttons - Joystick's buttons.
61   numaxes - Joystick's axes.
62   numhats - Joystick's hats.
63   statebuttons - Current state of each button.
64   stateaxes - Current state of each direction.
65 */
66 struct usbjoy {
67   int fd;
68   char name [128];
69   char device [128];
70   int numbuttons;
71   int numaxes;
72   int numhats;
73   int statebuttons[32];
74   int stateaxes[4];
75   int axevals[2];
76   joy_type type;
77 };
78
79
80 /*
81   Function: joy_open
82
83   Opens a USB joystick and fills its information.
84
85   Parameters:
86
87   joynumber - Joystick's identifier (0 reserved for GP2X's builtin Joystick).
88
89   Returns:
90
91   Filled usbjoy structure.
92 */
93 struct usbjoy * joy_open (int joynumber);
94
95
96 /*
97   Function: joy_name
98
99   Returns Joystick's name.
100
101   Parameters:
102
103   joy - Selected joystick.
104
105   Returns:
106
107   Joystick's name or NULL if <usbjoy> struct is empty.
108 */
109 char * joy_name (struct usbjoy * joy);
110
111
112 /*
113   Function: joy_device
114
115   Returns Joystick's device.
116
117   Parameters:
118
119   joy - Selected joystick.
120
121   Returns:
122
123   Joystick's device or NULL if <usbjoy> struct is empty.
124 */
125 char * joy_device (struct usbjoy * joy);
126
127 /*
128   Function: joy_buttons
129
130   Returns Joystick's buttons number.
131
132   Parameters:
133
134   joy - Selected joystick.
135
136   Returns:
137
138   Joystick's buttons or 0 if <usbjoy> struct is empty.
139 */
140 int joy_buttons (struct usbjoy * joy);
141
142 /*
143   Function: joy_axes
144
145   Returns Joystick's axes number.
146
147   Parameters:
148
149   joy - Selected joystick.
150
151   Returns:
152
153   Joystick's axes or 0 if <usbjoy> struct is empty.
154 */
155 int joy_axes (struct usbjoy * joy);
156
157
158 /*
159   Function: joy_update
160
161   Updates Joystick's internal information (<statebuttons> and <stateaxes> fields).
162
163   Parameters:
164
165   joy - Selected joystick.
166
167   Returns:
168
169   0 - No events registered (no need to update).
170   1 - Events registered (a button or axe has been pushed).
171   -1 - Error: <usbjoy> struct is empty.
172 */
173 int joy_update (struct usbjoy * joy);
174
175
176 /*
177   Function: joy_getbutton
178
179   Returns Joystick's button information.
180
181   Parameters:
182
183   button - Button which value you want to know (from 0 to 31).
184   joy - Selected joystick.
185
186   Returns:
187
188   0 - Button NOT pushed.
189   1 - Button pushed.
190   -1 - Error: <usbjoy> struct is empty.
191 */
192 int joy_getbutton (int button, struct usbjoy * joy);
193
194
195 /*
196   Function: joy_getaxe
197
198   Returns Joystick's axes information.
199
200   Parameters:
201
202   axe - Axe which value you want to know (see <Axes values>).
203   joy - Selected joystick.
204
205   Returns:
206
207   0 - Direction NOT pushed.
208   1 - Direction pushed.
209   -1 - Error: <usbjoy> struct is empty.
210 */
211 int joy_getaxe (int axe, struct usbjoy * joy);
212
213 /*
214   Function: joy_close
215
216   Closes selected joystick's file descriptor and detroys it's fields.
217
218   Parameters:
219
220   joy - Selected joystick.
221
222   Returns:
223
224   0 - Joystick successfully closed.
225   -1 - Error: <usbjoy> struct is empty.
226 */
227 int joy_close (struct usbjoy * joy);
228
229
230
231 /* gp2x stuff */
232 extern int num_of_joys;
233 extern struct usbjoy *joys[4];
234
235 void gp2x_usbjoy_update(void);
236 void gp2x_usbjoy_init(void);
237 int  gp2x_usbjoy_check(int joyno);
238 int  gp2x_usbjoy_check2(int joyno);
239 void gp2x_usbjoy_deinit(void);
240
241
242 #endif // USBJOY_H