partially working menu
[fceu.git] / drivers / gp2x / usbjoy.h
diff --git a/drivers/gp2x/usbjoy.h b/drivers/gp2x/usbjoy.h
new file mode 100644 (file)
index 0000000..3d8810a
--- /dev/null
@@ -0,0 +1,241 @@
+/* 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