102 lines
3.3 KiB
C
102 lines
3.3 KiB
C
/* This file was imported form CrabEmu ( http://crabemu.sourceforge.net/ ) --
|
|
A Sega Master System emulator for Mac OS X (among other targets). The rest
|
|
of the file is left intact from CrabEmu to make things easier if this were
|
|
to be upgraded in the future. */
|
|
|
|
/*
|
|
This file is part of CrabEmu.
|
|
|
|
Copyright (C) 2008 Lawrence Sebald
|
|
|
|
CrabEmu is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License version 2
|
|
as published by the Free Software Foundation.
|
|
|
|
CrabEmu 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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with CrabEmu; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef JOYSTICK_H
|
|
#define JOYSTICK_H
|
|
|
|
#include <IOKit/hid/IOHIDLib.h>
|
|
|
|
/* Values for the joy_elemdata_t type element. */
|
|
#define JOY_TYPE_NOT_APPLICABLE 0
|
|
#define JOY_TYPE_X_AXIS 1
|
|
#define JOY_TYPE_Y_AXIS 2
|
|
#define JOY_TYPE_Z_AXIS 3
|
|
#define JOY_TYPE_X2_AXIS 4
|
|
#define JOY_TYPE_Y2_AXIS 5
|
|
#define JOY_TYPE_Z2_AXIS 6
|
|
|
|
/* Structure for holding basic information about each element. */
|
|
typedef struct joy_elemdata_s {
|
|
IOHIDElementCookie cookie;
|
|
int type;
|
|
int number;
|
|
int min;
|
|
int max;
|
|
} joy_elemdata_t;
|
|
|
|
/* Structure for holding information about each joystick connected. */
|
|
typedef struct joydata_s {
|
|
IOHIDDeviceInterface **iface;
|
|
int open;
|
|
int buttons_count;
|
|
int axes_count;
|
|
int hats_count;
|
|
|
|
joy_elemdata_t *buttons;
|
|
joy_elemdata_t *axes;
|
|
joy_elemdata_t *hats;
|
|
|
|
char name[256];
|
|
} joydata_t;
|
|
|
|
/* Values for hat switches. ORed together and returned from joy_read_hat. */
|
|
#define JOY_HAT_CENTER 0
|
|
#define JOY_HAT_UP (1 << 0)
|
|
#define JOY_HAT_DOWN (1 << 1)
|
|
#define JOY_HAT_RIGHT (1 << 2)
|
|
#define JOY_HAT_LEFT (1 << 3)
|
|
|
|
/* Scan the system for any joysticks connected. */
|
|
int joy_scan_joysticks(void);
|
|
|
|
/* Clean up any data allocated by the program for joysticks. */
|
|
void joy_release_joysticks(void);
|
|
|
|
/* Get the joystick at a given index in our list of joysticks. */
|
|
joydata_t *joy_get_joystick(int index);
|
|
|
|
/* Grab the device for exclusive use by this program. The device must be closed
|
|
properly (with the joy_close_joystick function, or you may need to
|
|
unplug/replug the joystick to get it to work again). */
|
|
int joy_open_joystick(joydata_t *joy);
|
|
|
|
/* Close the device and return its resources to the system. */
|
|
int joy_close_joystick(joydata_t *joy);
|
|
|
|
/* Read a given element from the joystick. The joystick must be open for this
|
|
function to actually do anything useful. */
|
|
int joy_read_element(joydata_t *joy, joy_elemdata_t *elem);
|
|
|
|
/* Read the value of a given button. Returns -1 on failure. */
|
|
int joy_read_button(joydata_t *joy, int num);
|
|
|
|
/* Read the value of a given axis. Returns 0 on failure (or if the axis reports
|
|
that its value is 0). */
|
|
int joy_read_axis(joydata_t *joy, int index);
|
|
|
|
/* Read the value of a given hat. Returns -1 on failure. */
|
|
int joy_read_hat(joydata_t *joy, int index);
|
|
|
|
#endif /* !JOYSTICK_H */
|