1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/*
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SDL - Simple DirectMedia Layer
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    Copyright (C) 1997-2012 Sam Lantinga
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    This library is SDL_free software; you can redistribute it and/or
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    modify it under the terms of the GNU Lesser General Public
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    License as published by the Free Software Foundation; either
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    version 2.1 of the License, or (at your option) any later version.
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    This library is distributed in the hope that it will be useful,
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    but WITHOUT ANY WARRANTY; without even the implied warranty of
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    Lesser General Public License for more details.
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    You should have received a copy of the GNU Lesser General Public
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    License along with this library; if not, write to the Free Software
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    Sam Lantinga
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    slouken@libsdl.org
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch*/
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "SDL_config.h"
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* This is the system specific header for the SDL joystick API */
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "SDL_joystick.h"
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* The SDL joystick structure */
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct _SDL_Joystick {
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	Uint8 index;		/* Device index */
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	const char *name;	/* Joystick name - system dependent */
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int naxes;		/* Number of axis controls on the joystick */
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	Sint16 *axes;		/* Current axis states */
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int nhats;		/* Number of hats on the joystick */
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	Uint8 *hats;		/* Current hat states */
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int nballs;		/* Number of trackballs on the joystick */
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	struct balldelta {
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch		int dx;
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch		int dy;
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	} *balls;		/* Current ball motion deltas */
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int nbuttons;		/* Number of buttons on the joystick */
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	Uint8 *buttons;		/* Current button states */
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	struct joystick_hwdata *hwdata;	/* Driver dependent information */
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	int ref_count;		/* Reference count for multiple opens */
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to scan the system for joysticks.
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Joystick 0 should be the system default joystick.
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * This function should return the number of available joysticks, or -1
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * on an unrecoverable fatal error.
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern int SDL_SYS_JoystickInit(void);
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to get the device-dependent name of a joystick */
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern const char *SDL_SYS_JoystickName(int index);
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to open a joystick for use.
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch   The joystick to open is specified by the index field of the joystick.
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch   This should fill the nbuttons and naxes fields of the joystick structure.
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch   It returns 0, or -1 if there is an error.
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern int SDL_SYS_JoystickOpen(SDL_Joystick *joystick);
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to update the state of a joystick - called as a device poll.
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * This function shouldn't update the joystick structure directly,
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * but instead should call SDL_PrivateJoystick*() to deliver events
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * and update joystick device state.
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick);
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to close a joystick after use */
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern void SDL_SYS_JoystickClose(SDL_Joystick *joystick);
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Function to perform any system-specific joystick related cleanup */
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern void SDL_SYS_JoystickQuit(void);
82
83