extracted OSS code to sndout_oss_*, BTN->PBTN, refactoring
[picodrive.git] / platform / linux / usbjoy.h
CommitLineData
cc68a136 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
626f7c37 26/* notaz: my Logitech has different button layout, and I want it to match gp2x's */
cc68a136 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];
626f7c37 75 int axevals[2];
cc68a136 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
e5ab6faf 231/* more stuff */
cc68a136 232extern int num_of_joys;
233extern struct usbjoy *joys[4];
234
e5ab6faf 235void usbjoy_update(void);
236void usbjoy_init(void);
237int usbjoy_check(int joyno);
238int usbjoy_check2(int joyno);
239void usbjoy_deinit(void);
cc68a136 240
241
242#endif // USBJOY_H