--- /dev/null
+/* Title: USB Joystick library
+ Version 0.2
+ Written by Puck2099 (puck2099@gmail.com), (c) 2006.
+ <http://www.gp32wip.com>
+
+ If you use this library or a part of it, please, let it know.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef USBJOY_H
+#define USBJOY_H
+
+/* notaz: my Logitech has different button layout, and I want it to match gp2x's */
+typedef enum {
+ JOY_TYPE_GENERIC,
+ JOY_TYPE_LOGITECH
+} joy_type;
+
+/*
+ Enumeration: Axes values
+ This enumeration contains shortcuts to the values used on axes.
+
+ Constants:
+ JOYUP - Joystick Up
+ JOYDOWN - Joystick Down
+ JOYLEFT - Joystick Left
+ JOYRIGHT - Joystick Right
+
+ See also:
+ <joy_getaxe>
+*/
+#define JOYUP (0)
+#define JOYDOWN (1)
+#define JOYLEFT (2)
+#define JOYRIGHT (3)
+
+
+/*
+ Struct: usbjoy
+
+ Contains all Joystick needed information.
+
+ Fields:
+ fd - File descriptor used.
+ name - Joystick's name.
+ device - /dev/input/jsX device.
+ numbuttons - Joystick's buttons.
+ numaxes - Joystick's axes.
+ numhats - Joystick's hats.
+ statebuttons - Current state of each button.
+ stateaxes - Current state of each direction.
+*/
+struct usbjoy {
+ int fd;
+ char name [128];
+ char device [128];
+ int numbuttons;
+ int numaxes;
+ int numhats;
+ int statebuttons[32];
+ int stateaxes[4];
+ joy_type type;
+};
+
+
+/*
+ Function: joy_open
+
+ Opens a USB joystick and fills its information.
+
+ Parameters:
+
+ joynumber - Joystick's identifier (0 reserved for GP2X's builtin Joystick).
+
+ Returns:
+
+ Filled usbjoy structure.
+*/
+struct usbjoy * joy_open (int joynumber);
+
+
+/*
+ Function: joy_name
+
+ Returns Joystick's name.
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ Joystick's name or NULL if <usbjoy> struct is empty.
+*/
+char * joy_name (struct usbjoy * joy);
+
+
+/*
+ Function: joy_device
+
+ Returns Joystick's device.
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ Joystick's device or NULL if <usbjoy> struct is empty.
+*/
+char * joy_device (struct usbjoy * joy);
+
+/*
+ Function: joy_buttons
+
+ Returns Joystick's buttons number.
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ Joystick's buttons or 0 if <usbjoy> struct is empty.
+*/
+int joy_buttons (struct usbjoy * joy);
+
+/*
+ Function: joy_axes
+
+ Returns Joystick's axes number.
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ Joystick's axes or 0 if <usbjoy> struct is empty.
+*/
+int joy_axes (struct usbjoy * joy);
+
+
+/*
+ Function: joy_update
+
+ Updates Joystick's internal information (<statebuttons> and <stateaxes> fields).
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ 0 - No events registered (no need to update).
+ 1 - Events registered (a button or axe has been pushed).
+ -1 - Error: <usbjoy> struct is empty.
+*/
+int joy_update (struct usbjoy * joy);
+
+
+/*
+ Function: joy_getbutton
+
+ Returns Joystick's button information.
+
+ Parameters:
+
+ button - Button which value you want to know (from 0 to 31).
+ joy - Selected joystick.
+
+ Returns:
+
+ 0 - Button NOT pushed.
+ 1 - Button pushed.
+ -1 - Error: <usbjoy> struct is empty.
+*/
+int joy_getbutton (int button, struct usbjoy * joy);
+
+
+/*
+ Function: joy_getaxe
+
+ Returns Joystick's axes information.
+
+ Parameters:
+
+ axe - Axe which value you want to know (see <Axes values>).
+ joy - Selected joystick.
+
+ Returns:
+
+ 0 - Direction NOT pushed.
+ 1 - Direction pushed.
+ -1 - Error: <usbjoy> struct is empty.
+*/
+int joy_getaxe (int axe, struct usbjoy * joy);
+
+/*
+ Function: joy_close
+
+ Closes selected joystick's file descriptor and detroys it's fields.
+
+ Parameters:
+
+ joy - Selected joystick.
+
+ Returns:
+
+ 0 - Joystick successfully closed.
+ -1 - Error: <usbjoy> struct is empty.
+*/
+int joy_close (struct usbjoy * joy);
+
+
+
+/* gp2x stuff */
+extern int num_of_joys;
+extern struct usbjoy *joys[4];
+
+void gp2x_usbjoy_update(void);
+void gp2x_usbjoy_init(void);
+int gp2x_usbjoy_check(int joyno);
+int gp2x_usbjoy_check2(int joyno);
+void gp2x_usbjoy_deinit(void);
+
+
+#endif // USBJOY_H