release r2, update credits
[fceu.git] / drivers / gp2x / usbjoy.h
CommitLineData
b2b95d2e 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 */
27typedef 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*/
66struct 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];
3ee0ae39 75 int axevals[2];
b2b95d2e 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*/
93struct 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*/
109char * 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*/
125char * 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*/
140int 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*/
155int 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*/
173int 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*/
192int 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*/
211int 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*/
227int joy_close (struct usbjoy * joy);
228
229
230
231/* gp2x stuff */
232extern int num_of_joys;
233extern struct usbjoy *joys[4];
234
235void gp2x_usbjoy_update(void);
236void gp2x_usbjoy_init(void);
237int gp2x_usbjoy_check(int joyno);
238int gp2x_usbjoy_check2(int joyno);
239void gp2x_usbjoy_deinit(void);
240
241
242#endif // USBJOY_H