SDL_joystick.c File Reference
`#include "../SDL_internal.h"`
`#include "SDL.h"`
`#include "SDL_events.h"`
`#include "SDL_sysjoystick.h"`
`#include "SDL_assert.h"`
`#include "SDL_hints.h"`
`#include "../events/SDL_events_c.h"`
`#include "../video/SDL_sysvideo.h"`
Include dependency graph for SDL_joystick.c:

Go to the source code of this file.

## Functions

void | SDL_LockJoysticks (void)
void | SDL_UnlockJoysticks (void)
static void | SDL_JoystickAllowBackgroundEventsChanged (void *userdata, const char *name, const char *oldValue, const char *hint)
int | SDL_JoystickInit (void)
int | SDL_NumJoysticks (void)
const char * | SDL_JoystickNameForIndex (int device_index)
static SDL_bool | SDL_JoystickAxesCenteredAtZero (SDL_Joystick *joystick)
SDL_Joystick * | SDL_JoystickOpen (int device_index)
int | SDL_PrivateJoystickValid (SDL_Joystick *joystick)
int | SDL_JoystickNumAxes (SDL_Joystick *joystick)
int | SDL_JoystickNumHats (SDL_Joystick *joystick)
int | SDL_JoystickNumBalls (SDL_Joystick *joystick)
int | SDL_JoystickNumButtons (SDL_Joystick *joystick)
Sint16 | SDL_JoystickGetAxis (SDL_Joystick *joystick, int axis)
SDL_bool | SDL_JoystickGetAxisInitialState (SDL_Joystick *joystick, int axis, Sint16 *state)
Uint8 | SDL_JoystickGetHat (SDL_Joystick *joystick, int hat)
int | SDL_JoystickGetBall (SDL_Joystick *joystick, int ball, int *dx, int *dy)
Uint8 | SDL_JoystickGetButton (SDL_Joystick *joystick, int button)
SDL_bool | SDL_JoystickGetAttached (SDL_Joystick *joystick)
SDL_JoystickID | SDL_JoystickInstanceID (SDL_Joystick *joystick)
SDL_Joystick * | SDL_JoystickFromInstanceID (SDL_JoystickID joyid)
const char * | SDL_JoystickName (SDL_Joystick *joystick)
void | SDL_JoystickClose (SDL_Joystick *joystick)
void | SDL_JoystickQuit (void)
static SDL_bool | SDL_PrivateJoystickShouldIgnoreEvent ()
void | SDL_PrivateJoystickAdded (int device_index)
static void | UpdateEventsForDeviceRemoval ()
void | SDL_PrivateJoystickRemoved (SDL_JoystickID device_instance)
int | SDL_PrivateJoystickAxis (SDL_Joystick *joystick, Uint8 axis, Sint16 value)
int | SDL_PrivateJoystickHat (SDL_Joystick *joystick, Uint8 hat, Uint8 value)
int | SDL_PrivateJoystickBall (SDL_Joystick *joystick, Uint8 ball, Sint16 xrel, Sint16 yrel)
int | SDL_PrivateJoystickButton (SDL_Joystick *joystick, Uint8 button, Uint8 state)
void | SDL_JoystickUpdate (void)
int | SDL_JoystickEventState (int state)
void | SDL_GetJoystickGUIDInfo (SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
static SDL_bool | SDL_IsJoystickProductWheel (Uint32 vidpid)
static SDL_bool | SDL_IsJoystickProductFlightStick (Uint32 vidpid)
static SDL_bool | SDL_IsJoystickProductThrottle (Uint32 vidpid)
static SDL_JoystickType | SDL_GetJoystickGUIDType (SDL_JoystickGUID guid)
SDL_JoystickGUID | SDL_JoystickGetDeviceGUID (int device_index)
Uint16 | SDL_JoystickGetDeviceVendor (int device_index)
Uint16 | SDL_JoystickGetDeviceProduct (int device_index)
Uint16 | SDL_JoystickGetDeviceProductVersion (int device_index)
SDL_JoystickType | SDL_JoystickGetDeviceType (int device_index)
SDL_JoystickID | SDL_JoystickGetDeviceInstanceID (int device_index)
SDL_JoystickGUID | SDL_JoystickGetGUID (SDL_Joystick *joystick)
Uint16 | SDL_JoystickGetVendor (SDL_Joystick *joystick)
Uint16 | SDL_JoystickGetProduct (SDL_Joystick *joystick)
Uint16 | SDL_JoystickGetProductVersion (SDL_Joystick *joystick)
SDL_JoystickType | SDL_JoystickGetType (SDL_Joystick *joystick)
void | SDL_JoystickGetGUIDString (SDL_JoystickGUID guid, char *pszGUID, int cbGUID)
static unsigned char | nibble (char c)
SDL_JoystickGUID | SDL_JoystickGetGUIDFromString (const char *pchGUID)
void | SDL_PrivateJoystickBatteryLevel (SDL_Joystick *joystick, SDL_JoystickPowerLevel ePowerLevel)
SDL_JoystickPowerLevel | SDL_JoystickCurrentPowerLevel (SDL_Joystick *joystick)

## Variables

static SDL_bool | SDL_joystick_allows_background_events = SDL_FALSE
static SDL_Joystick * | SDL_joysticks = NULL
static SDL_bool | SDL_updating_joystick = SDL_FALSE
static SDL_mutex * | SDL_joystick_lock = NULL

## Function Documentation

## nibble()

static unsigned char nibble | ( | char | c | ) |

static

Definition at line 1217 of file SDL_joystick.c.

Referenced by SDL_JoystickGetGUIDFromString().

{
if ((c >= '0') && (c <= '9')) {
return (unsigned char)(c - '0');
}
if ((c >= 'A') && (c <= 'F')) {
return (unsigned char)(c - 'A' + 0x0a);
}
if ((c >= 'a') && (c <= 'f')) {
return (unsigned char)(c - 'a' + 0x0a);
}
/* received an invalid character, and no real way to return an error */
/* AssertMsg1(false, "Q_nibble invalid hex character '%c' ", c); */
return 0;
}
c
const GLubyte * c
Definition: SDL_opengl_glext.h:11093

## SDL_GetJoystickGUIDInfo()

void SDL_GetJoystickGUIDInfo | ( | SDL_JoystickGUID | guid,
|  | Uint16 * | vendor,
|  | Uint16 * | product,
|  | Uint16 * | version
| ) |  |

Definition at line 933 of file SDL_joystick.c.

References SDL_JoystickGUID::data.

Referenced by SDL_GetJoystickGUIDType(), SDL_JoystickGetDeviceProduct(), SDL_JoystickGetDeviceProductVersion(), SDL_JoystickGetDeviceVendor(), SDL_JoystickGetProduct(), SDL_JoystickGetProductVersion(), SDL_JoystickGetVendor(), and SDL_ShouldIgnoreGameController().

{
Uint16 *guid16 = (Uint16 *)guid.data;
/* If the GUID fits the form of BUS 0000 VENDOR 0000 PRODUCT 0000, return the data */
if (/* guid16[0] is device bus type */
guid16[1] == 0x0000 &&
/* guid16[2] is vendor ID */
guid16[3] == 0x0000 &&
/* guid16[4] is product ID */
guid16[5] == 0x0000
/* guid16[6] is product version */
) {
if (vendor) {
*vendor = guid16[2];
}
if (product) {
*product = guid16[4];
}
if (version) {
*version = guid16[6];
}
} else {
if (vendor) {
*vendor = 0;
}
if (product) {
*product = 0;
}
if (version) {
*version = 0;
}
}
}
SDL_JoystickGUID::data
Uint8 data[16]
Definition: SDL_joystick.h:71
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_GetJoystickGUIDType()

static SDL_JoystickType SDL_GetJoystickGUIDType | ( | SDL_JoystickGUID | guid | ) |

static

Definition at line 1027 of file SDL_joystick.c.

References SDL_JoystickGUID::data, MAKE_VIDPID, NULL, SDL_GetJoystickGUIDInfo(), SDL_IsJoystickProductFlightStick(), SDL_IsJoystickProductThrottle(), SDL_IsJoystickProductWheel(), SDL_JOYSTICK_TYPE_ARCADE_PAD, SDL_JOYSTICK_TYPE_ARCADE_STICK, SDL_JOYSTICK_TYPE_DANCE_PAD, SDL_JOYSTICK_TYPE_DRUM_KIT, SDL_JOYSTICK_TYPE_FLIGHT_STICK, SDL_JOYSTICK_TYPE_GAMECONTROLLER, SDL_JOYSTICK_TYPE_GUITAR, SDL_JOYSTICK_TYPE_THROTTLE, SDL_JOYSTICK_TYPE_UNKNOWN, and SDL_JOYSTICK_TYPE_WHEEL.

Referenced by SDL_JoystickGetDeviceType(), and SDL_JoystickGetType().

{
Uint16 vendor;
Uint16 product;
Uint32 vidpid;
if (guid.data[14] == 'x') {
/* XInput GUID, get the type based on the XInput device subtype */
switch (guid.data[15]) {
case 0x01: /* XINPUT_DEVSUBTYPE_GAMEPAD */
return SDL_JOYSTICK_TYPE_GAMECONTROLLER;
case 0x02: /* XINPUT_DEVSUBTYPE_WHEEL */
return SDL_JOYSTICK_TYPE_WHEEL;
case 0x03: /* XINPUT_DEVSUBTYPE_ARCADE_STICK */
return SDL_JOYSTICK_TYPE_ARCADE_STICK;
case 0x04: /* XINPUT_DEVSUBTYPE_FLIGHT_STICK */
return SDL_JOYSTICK_TYPE_FLIGHT_STICK;
case 0x05: /* XINPUT_DEVSUBTYPE_DANCE_PAD */
return SDL_JOYSTICK_TYPE_DANCE_PAD;
case 0x06: /* XINPUT_DEVSUBTYPE_GUITAR */
case 0x07: /* XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE */
case 0x0B: /* XINPUT_DEVSUBTYPE_GUITAR_BASS */
return SDL_JOYSTICK_TYPE_GUITAR;
case 0x08: /* XINPUT_DEVSUBTYPE_DRUM_KIT */
return SDL_JOYSTICK_TYPE_DRUM_KIT;
case 0x13: /* XINPUT_DEVSUBTYPE_ARCADE_PAD */
return SDL_JOYSTICK_TYPE_ARCADE_PAD;
default:
return SDL_JOYSTICK_TYPE_UNKNOWN;
}
}
SDL_GetJoystickGUIDInfo(guid, &vendor, &product, NULL);
vidpid = MAKE_VIDPID(vendor, product);
if (SDL_IsJoystickProductWheel(vidpid)) {
return SDL_JOYSTICK_TYPE_WHEEL;
}
if (SDL_IsJoystickProductFlightStick(vidpid)) {
return SDL_JOYSTICK_TYPE_FLIGHT_STICK;
}
if (SDL_IsJoystickProductThrottle(vidpid)) {
return SDL_JOYSTICK_TYPE_THROTTLE;
}
return SDL_JOYSTICK_TYPE_UNKNOWN;
}
SDL_IsJoystickProductWheel
static SDL_bool SDL_IsJoystickProductWheel(Uint32 vidpid)
Definition: SDL_joystick.c:968
MAKE_VIDPID
#define MAKE_VIDPID(VID, PID)
Definition: SDL_sysjoystick.h:72
SDL_JOYSTICK_TYPE_WHEEL
Definition: SDL_joystick.h:87
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
SDL_JoystickGUID::data
Uint8 data[16]
Definition: SDL_joystick.h:71
SDL_JOYSTICK_TYPE_DRUM_KIT
Definition: SDL_joystick.h:92
SDL_IsJoystickProductFlightStick
static SDL_bool SDL_IsJoystickProductFlightStick(Uint32 vidpid)
Definition: SDL_joystick.c:995
SDL_JOYSTICK_TYPE_ARCADE_PAD
Definition: SDL_joystick.h:93
SDL_JOYSTICK_TYPE_GUITAR
Definition: SDL_joystick.h:91
SDL_JOYSTICK_TYPE_FLIGHT_STICK
Definition: SDL_joystick.h:89
SDL_JOYSTICK_TYPE_DANCE_PAD
Definition: SDL_joystick.h:90
SDL_JOYSTICK_TYPE_ARCADE_STICK
Definition: SDL_joystick.h:88
NULL
#define NULL
Definition: begin_code.h:164
SDL_JOYSTICK_TYPE_THROTTLE
Definition: SDL_joystick.h:94
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JOYSTICK_TYPE_GAMECONTROLLER
Definition: SDL_joystick.h:86
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169
SDL_JOYSTICK_TYPE_UNKNOWN
Definition: SDL_joystick.h:85
SDL_IsJoystickProductThrottle
static SDL_bool SDL_IsJoystickProductThrottle(Uint32 vidpid)
Definition: SDL_joystick.c:1011

## SDL_IsJoystickProductFlightStick()

static SDL_bool SDL_IsJoystickProductFlightStick | ( | Uint32 | vidpid | ) |

static

Definition at line 995 of file SDL_joystick.c.

References i, MAKE_VIDPID, SDL_arraysize, SDL_FALSE, and SDL_TRUE.

Referenced by SDL_GetJoystickGUIDType().

{
static Uint32 flightstick_joysticks[] = {
MAKE_VIDPID(0x044f, 0x0402), /* HOTAS Warthog Joystick */
MAKE_VIDPID(0x0738, 0x2221), /* Saitek Pro Flight X-56 Rhino Stick */
};
int i;
for (i = 0; i < SDL_arraysize(flightstick_joysticks); ++i) {
if (vidpid == flightstick_joysticks[i]) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}
MAKE_VIDPID
#define MAKE_VIDPID(VID, PID)
Definition: SDL_sysjoystick.h:72
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_FALSE
Definition: SDL_stdinc.h:141
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93

## SDL_IsJoystickProductThrottle()

static SDL_bool SDL_IsJoystickProductThrottle | ( | Uint32 | vidpid | ) |

static

Definition at line 1011 of file SDL_joystick.c.

References i, MAKE_VIDPID, SDL_arraysize, SDL_FALSE, and SDL_TRUE.

Referenced by SDL_GetJoystickGUIDType().

{
static Uint32 throttle_joysticks[] = {
MAKE_VIDPID(0x044f, 0x0404), /* HOTAS Warthog Throttle */
MAKE_VIDPID(0x0738, 0xa221), /* Saitek Pro Flight X-56 Rhino Throttle */
};
int i;
for (i = 0; i < SDL_arraysize(throttle_joysticks); ++i) {
if (vidpid == throttle_joysticks[i]) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}
MAKE_VIDPID
#define MAKE_VIDPID(VID, PID)
Definition: SDL_sysjoystick.h:72
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_FALSE
Definition: SDL_stdinc.h:141
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93

## SDL_IsJoystickProductWheel()

static SDL_bool SDL_IsJoystickProductWheel | ( | Uint32 | vidpid | ) |

static

Definition at line 968 of file SDL_joystick.c.

References i, MAKE_VIDPID, SDL_arraysize, SDL_FALSE, and SDL_TRUE.

Referenced by SDL_GetJoystickGUIDType().

{
static Uint32 wheel_joysticks[] = {
MAKE_VIDPID(0x046d, 0xc294), /* Logitech generic wheel */
MAKE_VIDPID(0x046d, 0xc295), /* Logitech Momo Force */
MAKE_VIDPID(0x046d, 0xc298), /* Logitech Driving Force Pro */
MAKE_VIDPID(0x046d, 0xc299), /* Logitech G25 */
MAKE_VIDPID(0x046d, 0xc29a), /* Logitech Driving Force GT */
MAKE_VIDPID(0x046d, 0xc29b), /* Logitech G27 */
MAKE_VIDPID(0x046d, 0xc261), /* Logitech G920 (initial mode) */
MAKE_VIDPID(0x046d, 0xc262), /* Logitech G920 (active mode) */
MAKE_VIDPID(0x044f, 0xb65d), /* Thrustmaster Wheel FFB */
MAKE_VIDPID(0x044f, 0xb66d), /* Thrustmaster Wheel FFB */
MAKE_VIDPID(0x044f, 0xb677), /* Thrustmaster T150 */
MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */
MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */
};
int i;
for (i = 0; i < SDL_arraysize(wheel_joysticks); ++i) {
if (vidpid == wheel_joysticks[i]) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}
MAKE_VIDPID
#define MAKE_VIDPID(VID, PID)
Definition: SDL_sysjoystick.h:72
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_FALSE
Definition: SDL_stdinc.h:141
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93

## SDL_JoystickAllowBackgroundEventsChanged()

static void SDL_JoystickAllowBackgroundEventsChanged | ( | void * | userdata,
|  | const char * | name,
|  | const char * | oldValue,
|  | const char * | hint
| ) |  |

static

Definition at line 60 of file SDL_joystick.c.

References SDL_FALSE, SDL_joystick_allows_background_events, and SDL_TRUE.

Referenced by SDL_JoystickInit(), and SDL_JoystickQuit().

{
if (hint && *hint == '1') {
SDL_joystick_allows_background_events = SDL_TRUE;
} else {
SDL_joystick_allows_background_events = SDL_FALSE;
}
}
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_FALSE
Definition: SDL_stdinc.h:141
SDL_joystick_allows_background_events
static SDL_bool SDL_joystick_allows_background_events
Definition: SDL_joystick.c:37

## SDL_JoystickAxesCenteredAtZero()

static SDL_bool SDL_JoystickAxesCenteredAtZero | ( | SDL_Joystick * | joystick | ) |

static

Definition at line 126 of file SDL_joystick.c.

References i, MAKE_VIDPID, SDL_arraysize, SDL_FALSE, SDL_JoystickGetProduct(), SDL_JoystickGetVendor(), and SDL_TRUE.

Referenced by SDL_JoystickOpen().

{
static Uint32 zero_centered_joysticks[] = {
MAKE_VIDPID(0x0e8f, 0x3013), /* HuiJia SNES USB adapter */
MAKE_VIDPID(0x05a0, 0x3232), /* 8Bitdo Zero Gamepad */
};
int i;
Uint32 id = MAKE_VIDPID(SDL_JoystickGetVendor(joystick),
SDL_JoystickGetProduct(joystick));
/*printf("JOYSTICK '%s' VID/PID 0x%.4x/0x%.4x AXES: %d\n", joystick->name, vendor, product, joystick->naxes);*/
if (joystick->naxes == 2) {
/* Assume D-pad or thumbstick style axes are centered at 0 */
return SDL_TRUE;
}
for (i = 0; i < SDL_arraysize(zero_centered_joysticks); ++i) {
if (id == zero_centered_joysticks[i]) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}
SDL_JoystickGetVendor
Uint16 SDL_JoystickGetVendor(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1149
MAKE_VIDPID
#define MAKE_VIDPID(VID, PID)
Definition: SDL_sysjoystick.h:72
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_JoystickGetProduct
Uint16 SDL_JoystickGetProduct(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1158
SDL_FALSE
Definition: SDL_stdinc.h:141
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93

## SDL_JoystickClose()

void SDL_JoystickClose | ( | SDL_Joystick * | joystick | ) |

Close a joystick previously opened with SDL_JoystickOpen().

Definition at line 491 of file SDL_joystick.c.

References NULL, SDL_free, SDL_joysticks, SDL_LockJoysticks(), SDL_SYS_JoystickClose(), SDL_UnlockJoysticks(), and SDL_updating_joystick.

Referenced by SDL_JoystickOpen(), SDL_JoystickQuit(), and SDL_JoystickUpdate().

{
SDL_Joystick *joysticklist;
SDL_Joystick *joysticklistprev;
if (!joystick) {
return;
}
SDL_LockJoysticks();
/* First decrement ref count */
if (--joystick->ref_count > 0) {
SDL_UnlockJoysticks();
return;
}
if (SDL_updating_joystick) {
SDL_UnlockJoysticks();
return;
}
SDL_SYS_JoystickClose(joystick);
joystick->hwdata = NULL;
joysticklist = SDL_joysticks;
joysticklistprev = NULL;
while (joysticklist) {
if (joystick == joysticklist) {
if (joysticklistprev) {
/* unlink this entry */
joysticklistprev->next = joysticklist->next;
} else {
SDL_joysticks = joystick->next;
}
break;
}
joysticklistprev = joysticklist;
joysticklist = joysticklist->next;
}
SDL_free(joystick->name);
/* Free the data associated with this joystick */
SDL_free(joystick->axes);
SDL_free(joystick->hats);
SDL_free(joystick->balls);
SDL_free(joystick->buttons);
SDL_free(joystick);
SDL_UnlockJoysticks();
}
SDL_LockJoysticks
void SDL_LockJoysticks(void)
Definition: SDL_joystick.c:43
SDL_free
#define SDL_free
Definition: SDL_dynapi_overrides.h:377
SDL_UnlockJoysticks
void SDL_UnlockJoysticks(void)
Definition: SDL_joystick.c:51
NULL
#define NULL
Definition: begin_code.h:164
SDL_SYS_JoystickClose
void SDL_SYS_JoystickClose(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:704
SDL_updating_joystick
static SDL_bool SDL_updating_joystick
Definition: SDL_joystick.c:39
SDL_joysticks
static SDL_Joystick * SDL_joysticks
Definition: SDL_joystick.c:38

## SDL_JoystickCurrentPowerLevel()

SDL_JoystickPowerLevel SDL_JoystickCurrentPowerLevel | ( | SDL_Joystick * | joystick | ) |

Return the battery level of this joystick

Definition at line 1268 of file SDL_joystick.c.

References SDL_JOYSTICK_POWER_UNKNOWN, and SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (SDL_JOYSTICK_POWER_UNKNOWN);
}
return joystick->epowerlevel;
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
SDL_JOYSTICK_POWER_UNKNOWN
Definition: SDL_joystick.h:99

## SDL_JoystickEventState()

int SDL_JoystickEventState | ( | int | state | ) |

Enable/disable joystick event polling.

If joystick events are disabled, you must call SDL_JoystickUpdate() yourself and check the state of the joystick when you want joystick information.

The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE.

Definition at line 902 of file SDL_joystick.c.

References i, SDL_arraysize, SDL_DISABLE, SDL_ENABLE, SDL_EventState, SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_JOYHATMOTION, and SDL_QUERY.

{
#if SDL_EVENTS_DISABLED
return SDL_DISABLE;
#else
const Uint32 event_list[] = {
SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION,
SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED
};
unsigned int i;
switch (state) {
case SDL_QUERY:
state = SDL_DISABLE;
for (i = 0; i < SDL_arraysize(event_list); ++i) {
state = SDL_EventState(event_list[i], SDL_QUERY);
if (state == SDL_ENABLE) {
break;
}
}
break;
default:
for (i = 0; i < SDL_arraysize(event_list); ++i) {
SDL_EventState(event_list[i], state);
}
break;
}
return (state);
#endif /* SDL_EVENTS_DISABLED */
}
SDL_JOYBUTTONUP
Definition: SDL_events.h:112
SDL_JOYHATMOTION
Definition: SDL_events.h:110
SDL_JOYDEVICEADDED
Definition: SDL_events.h:113
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_JOYBALLMOTION
Definition: SDL_events.h:109
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
SDL_JOYAXISMOTION
Definition: SDL_events.h:108
SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:114
SDL_JOYBUTTONDOWN
Definition: SDL_events.h:111
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_DISABLE
#define SDL_DISABLE
Definition: SDL_events.h:721
SDL_EventState
#define SDL_EventState
Definition: SDL_dynapi_overrides.h:131
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_QUERY
#define SDL_QUERY
Definition: SDL_events.h:719

## SDL_JoystickFromInstanceID()

SDL_Joystick* SDL_JoystickFromInstanceID | ( | SDL_JoystickID | joyid | ) |

Return the SDL_Joystick associated with an instance id.

Definition at line 459 of file SDL_joystick.c.

References NULL, SDL_joysticks, SDL_LockJoysticks(), and SDL_UnlockJoysticks().

{
SDL_Joystick *joystick;
SDL_LockJoysticks();
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
if (joystick->instance_id == joyid) {
SDL_UnlockJoysticks();
return joystick;
}
}
SDL_UnlockJoysticks();
return NULL;
}
SDL_LockJoysticks
void SDL_LockJoysticks(void)
Definition: SDL_joystick.c:43
SDL_UnlockJoysticks
void SDL_UnlockJoysticks(void)
Definition: SDL_joystick.c:51
NULL
#define NULL
Definition: begin_code.h:164
SDL_joysticks
static SDL_Joystick * SDL_joysticks
Definition: SDL_joystick.c:38

## SDL_JoystickGetAttached()

SDL_bool SDL_JoystickGetAttached | ( | SDL_Joystick * | joystick | ) |

Returns SDL_TRUE if the joystick has been opened and currently connected, or SDL_FALSE if it has not.

Definition at line 433 of file SDL_joystick.c.

References SDL_FALSE, SDL_PrivateJoystickValid(), and SDL_SYS_JoystickAttached().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return SDL_FALSE;
}
return SDL_SYS_JoystickAttached(joystick);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
SDL_FALSE
Definition: SDL_stdinc.h:141
SDL_SYS_JoystickAttached
SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:469

## SDL_JoystickGetAxis()

Sint16 SDL_JoystickGetAxis | ( | SDL_Joystick * | joystick,
|  | int | axis
| ) |  |

Get the current state of an axis control on a joystick.

The state is a value ranging from -32768 to 32767.

The axis indices start at index 0.

Definition at line 325 of file SDL_joystick.c.

References axis, SDL_PrivateJoystickValid(), SDL_SetError, and state.

{
Sint16 state;
if (!SDL_PrivateJoystickValid(joystick)) {
return (0);
}
if (axis < joystick->naxes) {
state = joystick->axes[axis].value;
} else {
SDL_SetError("Joystick only has %d axes", joystick->naxes);
state = 0;
}
return (state);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
Sint16
int16_t Sint16
Definition: SDL_stdinc.h:163

## SDL_JoystickGetAxisInitialState()

SDL_bool SDL_JoystickGetAxisInitialState | ( | SDL_Joystick * | joystick,
|  | int | axis,
|  | Sint16 * | state
| ) |  |

Get the initial state of an axis control on a joystick.

The state is a value ranging from -32768 to 32767.

The axis indices start at index 0.

Returns
  SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.

Definition at line 345 of file SDL_joystick.c.

References axis, SDL_FALSE, SDL_PrivateJoystickValid(), and SDL_SetError.

{
if (!SDL_PrivateJoystickValid(joystick)) {
return SDL_FALSE;
}
if (axis >= joystick->naxes) {
SDL_SetError("Joystick only has %d axes", joystick->naxes);
return SDL_FALSE;
}
if (state) {
*state = joystick->axes[axis].initial_value;
}
return joystick->axes[axis].has_initial_value;
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
SDL_FALSE
Definition: SDL_stdinc.h:141
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_JoystickGetBall()

int SDL_JoystickGetBall | ( | SDL_Joystick * | joystick,
|  | int | ball,
|  | int * | dx,
|  | int * | dy
| ) |  |

Get the ball axis change since the last poll.

Returns
  0, or -1 if you passed it invalid parameters.

The ball indices start at index 0.

Definition at line 384 of file SDL_joystick.c.

References retval, SDL_PrivateJoystickValid(), and SDL_SetError.

{
int retval;
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
retval = 0;
if (ball < joystick->nballs) {
if (dx) {
*dx = joystick->balls[ball].dx;
}
if (dy) {
*dy = joystick->balls[ball].dy;
}
joystick->balls[ball].dx = 0;
joystick->balls[ball].dy = 0;
} else {
return SDL_SetError("Joystick only has %d balls", joystick->nballs);
}
return (retval);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_JoystickGetButton()

Uint8 SDL_JoystickGetButton | ( | SDL_Joystick * | joystick,
|  | int | button
| ) |  |

Get the current state of a button on a joystick.

The button indices start at index 0.

Definition at line 412 of file SDL_joystick.c.

References button, SDL_PrivateJoystickValid(), SDL_SetError, and state.

{
Uint8 state;
if (!SDL_PrivateJoystickValid(joystick)) {
return (0);
}
if (button < joystick->nbuttons) {
state = joystick->buttons[button];
} else {
SDL_SetError("Joystick only has %d buttons", joystick->nbuttons);
state = 0;
}
return (state);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
button
SDL_Texture * button
Definition: testgamecontroller.c:67
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_JoystickGetDeviceGUID()

SDL_JoystickGUID SDL_JoystickGetDeviceGUID | ( | int | device_index | ) |

Return the GUID for the joystick at this index This can be called before any joysticks are opened.

Definition at line 1078 of file SDL_joystick.c.

References SDL_NumJoysticks(), SDL_SetError, SDL_SYS_JoystickGetDeviceGUID(), and SDL_zero.

Referenced by SDL_JoystickGetDeviceProduct(), SDL_JoystickGetDeviceProductVersion(), SDL_JoystickGetDeviceType(), and SDL_JoystickGetDeviceVendor().

{
if (device_index < 0 || device_index >= SDL_NumJoysticks()) {
SDL_JoystickGUID emptyGUID;
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
SDL_zero(emptyGUID);
return emptyGUID;
}
return SDL_SYS_JoystickGetDeviceGUID(device_index);
}
SDL_NumJoysticks
int SDL_NumJoysticks(void)
Definition: SDL_joystick.c:102
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:416
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
SDL_JoystickGUID
Definition: SDL_joystick.h:70
SDL_SYS_JoystickGetDeviceGUID
SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int device_index)
Definition: SDL_sysjoystick.m:771

## SDL_JoystickGetDeviceInstanceID()

SDL_JoystickID SDL_JoystickGetDeviceInstanceID | ( | int | device_index | ) |

Get the instance ID of a joystick. This can be called before any joysticks are opened. If the index is out of range, this function will return -1.

Definition at line 1130 of file SDL_joystick.c.

References SDL_NumJoysticks(), SDL_SetError, and SDL_SYS_GetInstanceIdOfDeviceIndex().

Referenced by SDL_JoystickOpen().

{
if (device_index < 0 || device_index >= SDL_NumJoysticks()) {
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
return -1;
}
return SDL_SYS_GetInstanceIdOfDeviceIndex(device_index);
}
SDL_NumJoysticks
int SDL_NumJoysticks(void)
Definition: SDL_joystick.c:102
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
SDL_SYS_GetInstanceIdOfDeviceIndex
SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
Definition: SDL_sysjoystick.m:409

## SDL_JoystickGetDeviceProduct()

Uint16 SDL_JoystickGetDeviceProduct | ( | int | device_index | ) |

Get the USB product ID of a joystick, if available. This can be called before any joysticks are opened. If the product ID isn't available this function returns 0.

Definition at line 1098 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetDeviceGUID().

{
Uint16 product;
SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(device_index);
SDL_GetJoystickGUIDInfo(guid, NULL, &product, NULL);
return product;
}
SDL_JoystickGetDeviceGUID
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
Definition: SDL_joystick.c:1078
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickGetDeviceProductVersion()

Uint16 SDL_JoystickGetDeviceProductVersion | ( | int | device_index | ) |

Get the product version of a joystick, if available. This can be called before any joysticks are opened. If the product version isn't available this function returns 0.

Definition at line 1107 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetDeviceGUID().

{
Uint16 version;
SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(device_index);
SDL_GetJoystickGUIDInfo(guid, NULL, NULL, &version);
return version;
}
SDL_JoystickGetDeviceGUID
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
Definition: SDL_joystick.c:1078
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickGetDeviceType()

SDL_JoystickType SDL_JoystickGetDeviceType | ( | int | device_index | ) |

Get the type of a joystick, if available. This can be called before any joysticks are opened.

Definition at line 1116 of file SDL_joystick.c.

References SDL_GetJoystickGUIDType(), SDL_IsGameController, SDL_JOYSTICK_TYPE_GAMECONTROLLER, SDL_JOYSTICK_TYPE_UNKNOWN, and SDL_JoystickGetDeviceGUID().

{
SDL_JoystickType type;
SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(device_index);
type = SDL_GetJoystickGUIDType(guid);
if (type == SDL_JOYSTICK_TYPE_UNKNOWN) {
if (SDL_IsGameController(device_index)) {
type = SDL_JOYSTICK_TYPE_GAMECONTROLLER;
}
}
return type;
}
SDL_IsGameController
#define SDL_IsGameController
Definition: SDL_dynapi_overrides.h:138
SDL_JoystickType
SDL_JoystickType
Definition: SDL_joystick.h:83
SDL_JoystickGetDeviceGUID
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
Definition: SDL_joystick.c:1078
SDL_JOYSTICK_TYPE_GAMECONTROLLER
Definition: SDL_joystick.h:86
SDL_JoystickGUID
Definition: SDL_joystick.h:70
type
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
SDL_JOYSTICK_TYPE_UNKNOWN
Definition: SDL_joystick.h:85
SDL_GetJoystickGUIDType
static SDL_JoystickType SDL_GetJoystickGUIDType(SDL_JoystickGUID guid)
Definition: SDL_joystick.c:1027

## SDL_JoystickGetDeviceVendor()

Uint16 SDL_JoystickGetDeviceVendor | ( | int | device_index | ) |

Get the USB vendor ID of a joystick, if available. This can be called before any joysticks are opened. If the vendor ID isn't available this function returns 0.

Definition at line 1089 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetDeviceGUID().

{
Uint16 vendor;
SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(device_index);
SDL_GetJoystickGUIDInfo(guid, &vendor, NULL, NULL);
return vendor;
}
SDL_JoystickGetDeviceGUID
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
Definition: SDL_joystick.c:1078
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickGetGUID()

SDL_JoystickGUID SDL_JoystickGetGUID | ( | SDL_Joystick * | joystick | ) |

Return the GUID for this opened joystick

Definition at line 1139 of file SDL_joystick.c.

References SDL_PrivateJoystickValid(), SDL_SYS_JoystickGetGUID(), and SDL_zero.

Referenced by SDL_JoystickGetProduct(), SDL_JoystickGetProductVersion(), SDL_JoystickGetType(), and SDL_JoystickGetVendor().

{
if (!SDL_PrivateJoystickValid(joystick)) {
SDL_JoystickGUID emptyGUID;
SDL_zero(emptyGUID);
return emptyGUID;
}
return SDL_SYS_JoystickGetGUID(joystick);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:416
SDL_SYS_JoystickGetGUID
SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:784
SDL_JoystickGUID
Definition: SDL_joystick.h:70

## SDL_JoystickGetGUIDFromString()

SDL_JoystickGUID SDL_JoystickGetGUIDFromString | ( | const char * | pchGUID | ) |

Convert a string into a joystick guid

Definition at line 1238 of file SDL_joystick.c.

References i, nibble(), SDL_memset, and SDL_strlen.

{
SDL_JoystickGUID guid;
int maxoutputbytes= sizeof(guid);
size_t len = SDL_strlen(pchGUID);
Uint8 *p;
size_t i;
/* Make sure it's even */
len = (len) & ~0x1;
SDL_memset(&guid, 0x00, sizeof(guid));
p = (Uint8 *)&guid;
for (i = 0; (i < len) && ((p - (Uint8 *)&guid) < maxoutputbytes); i+=2, p++) {
*p = (nibble(pchGUID[i]) << 4) | nibble(pchGUID[i+1]);
}
return guid;
}
x1
GLuint GLfloat GLfloat GLfloat x1
Definition: SDL_opengl_glext.h:8583
p
GLfloat GLfloat p
Definition: SDL_opengl_glext.h:11090
len
GLenum GLsizei len
Definition: SDL_opengl_glext.h:2926
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
nibble
static unsigned char nibble(char c)
Definition: SDL_joystick.c:1217
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:393
SDL_JoystickGUID
Definition: SDL_joystick.h:70
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:386

## SDL_JoystickGetGUIDString()

void SDL_JoystickGetGUIDString | ( | SDL_JoystickGUID | guid,
|  | char * | pszGUID,
|  | int | cbGUID
| ) |  |

Return a string representation for this guid. pszGUID must point to at least 33 bytes (32 for the string plus a NULL terminator).

Definition at line 1191 of file SDL_joystick.c.

References SDL_JoystickGUID::data, i, and NULL.

{
static const char k_rgchHexToASCII[] = "0123456789abcdef";
int i;
if ((pszGUID == NULL) || (cbGUID <= 0)) {
return;
}
for (i = 0; i < sizeof(guid.data) && i < (cbGUID-1)/2; i++) {
/* each input byte writes 2 ascii chars, and might write a null byte. */
/* If we don't have room for next input byte, stop */
unsigned char c = guid.data[i];
*pszGUID++ = k_rgchHexToASCII[c >> 4];
*pszGUID++ = k_rgchHexToASCII[c & 0x0F];
}
*pszGUID = '\0';
}
SDL_JoystickGUID::data
Uint8 data[16]
Definition: SDL_joystick.h:71
c
const GLubyte * c
Definition: SDL_opengl_glext.h:11093
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
NULL
#define NULL
Definition: begin_code.h:164

## SDL_JoystickGetHat()

Uint8 SDL_JoystickGetHat | ( | SDL_Joystick * | joystick,
|  | int | hat
| ) |  |

Get the current state of a POV hat on a joystick.

The hat indices start at index 0.

Returns
  The return value is one of the following positions:
  - SDL_HAT_CENTERED
  - SDL_HAT_UP
  - SDL_HAT_RIGHT
  - SDL_HAT_DOWN
  - SDL_HAT_LEFT
  - SDL_HAT_RIGHTUP
  - SDL_HAT_RIGHTDOWN
  - SDL_HAT_LEFTUP
  - SDL_HAT_LEFTDOWN

Definition at line 364 of file SDL_joystick.c.

References SDL_PrivateJoystickValid(), SDL_SetError, and state.

{
Uint8 state;
if (!SDL_PrivateJoystickValid(joystick)) {
return (0);
}
if (hat < joystick->nhats) {
state = joystick->hats[hat];
} else {
SDL_SetError("Joystick only has %d hats", joystick->nhats);
state = 0;
}
return (state);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_JoystickGetProduct()

Uint16 SDL_JoystickGetProduct | ( | SDL_Joystick * | joystick | ) |

Get the USB product ID of an opened joystick, if available. If the product ID isn't available this function returns 0.

Definition at line 1158 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetGUID().

Referenced by SDL_JoystickAxesCenteredAtZero().

{
Uint16 product;
SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick);
SDL_GetJoystickGUIDInfo(guid, NULL, &product, NULL);
return product;
}
SDL_JoystickGetGUID
SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1139
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickGetProductVersion()

Uint16 SDL_JoystickGetProductVersion | ( | SDL_Joystick * | joystick | ) |

Get the product version of an opened joystick, if available. If the product version isn't available this function returns 0.

Definition at line 1167 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetGUID().

{
Uint16 version;
SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick);
SDL_GetJoystickGUIDInfo(guid, NULL, NULL, &version);
return version;
}
SDL_JoystickGetGUID
SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1139
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickGetType()

SDL_JoystickType SDL_JoystickGetType | ( | SDL_Joystick * | joystick | ) |

Get the type of an opened joystick.

Definition at line 1176 of file SDL_joystick.c.

References SDL_GetJoystickGUIDType(), SDL_JOYSTICK_TYPE_GAMECONTROLLER, SDL_JOYSTICK_TYPE_UNKNOWN, and SDL_JoystickGetGUID().

{
SDL_JoystickType type;
SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick);
type = SDL_GetJoystickGUIDType(guid);
if (type == SDL_JOYSTICK_TYPE_UNKNOWN) {
if (joystick && joystick->is_game_controller) {
type = SDL_JOYSTICK_TYPE_GAMECONTROLLER;
}
}
return type;
}
SDL_JoystickGetGUID
SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1139
SDL_JoystickType
SDL_JoystickType
Definition: SDL_joystick.h:83
SDL_JOYSTICK_TYPE_GAMECONTROLLER
Definition: SDL_joystick.h:86
SDL_JoystickGUID
Definition: SDL_joystick.h:70
type
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
SDL_JOYSTICK_TYPE_UNKNOWN
Definition: SDL_joystick.h:85
SDL_GetJoystickGUIDType
static SDL_JoystickType SDL_GetJoystickGUIDType(SDL_JoystickGUID guid)
Definition: SDL_joystick.c:1027

## SDL_JoystickGetVendor()

Uint16 SDL_JoystickGetVendor | ( | SDL_Joystick * | joystick | ) |

Get the USB vendor ID of an opened joystick, if available. If the vendor ID isn't available this function returns 0.

Definition at line 1149 of file SDL_joystick.c.

References NULL, SDL_GetJoystickGUIDInfo(), and SDL_JoystickGetGUID().

Referenced by SDL_JoystickAxesCenteredAtZero().

{
Uint16 vendor;
SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick);
SDL_GetJoystickGUIDInfo(guid, &vendor, NULL, NULL);
return vendor;
}
SDL_JoystickGetGUID
SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)
Definition: SDL_joystick.c:1139
NULL
#define NULL
Definition: begin_code.h:164
SDL_GetJoystickGUIDInfo
void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version)
Definition: SDL_joystick.c:933
SDL_JoystickGUID
Definition: SDL_joystick.h:70
Uint16
uint16_t Uint16
Definition: SDL_stdinc.h:169

## SDL_JoystickInit()

int SDL_JoystickInit | ( | void |  | ) |

Definition at line 70 of file SDL_joystick.c.

References NULL, SDL_AddHintCallback, SDL_CreateMutex, SDL_GameControllerInitMappings(), SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, SDL_INIT_EVENTS, SDL_InitSubSystem, SDL_JoystickAllowBackgroundEventsChanged(), and SDL_SYS_JoystickInit().

Referenced by SDL_InitSubSystem().

{
int status;
SDL_GameControllerInitMappings();
/* Create the joystick list lock */
if (!SDL_joystick_lock) {
SDL_joystick_lock = SDL_CreateMutex();
}
/* See if we should allow joystick events while in the background */
SDL_AddHintCallback(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS,
SDL_JoystickAllowBackgroundEventsChanged, NULL);
#if !SDL_EVENTS_DISABLED
if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0) {
return -1;
}
#endif /* !SDL_EVENTS_DISABLED */
status = SDL_SYS_JoystickInit();
if (status >= 0) {
status = 0;
}
return (status);
}
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
A variable that lets you enable joystick (and gamecontroller) events even when your app is in the bac...
Definition: SDL_hints.h:466
SDL_INIT_EVENTS
#define SDL_INIT_EVENTS
Definition: SDL.h:82
SDL_GameControllerInitMappings
int SDL_GameControllerInitMappings(void)
Definition: SDL_gamecontroller.c:1208
SDL_joystick_lock
static SDL_mutex * SDL_joystick_lock
Definition: SDL_joystick.c:40
SDL_CreateMutex
#define SDL_CreateMutex
Definition: SDL_dynapi_overrides.h:259
SDL_InitSubSystem
#define SDL_InitSubSystem
Definition: SDL_dynapi_overrides.h:55
SDL_SYS_JoystickInit
int SDL_SYS_JoystickInit(void)
Definition: SDL_sysjoystick.m:330
NULL
#define NULL
Definition: begin_code.h:164
SDL_AddHintCallback
#define SDL_AddHintCallback
Definition: SDL_dynapi_overrides.h:192
SDL_JoystickAllowBackgroundEventsChanged
static void SDL_JoystickAllowBackgroundEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_joystick.c:60

## SDL_JoystickInstanceID()

SDL_JoystickID SDL_JoystickInstanceID | ( | SDL_Joystick * | joystick | ) |

Get the instance ID of an opened joystick or -1 if the joystick is invalid.

Definition at line 446 of file SDL_joystick.c.

References SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
return (joystick->instance_id);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259

## SDL_JoystickName()

const char* SDL_JoystickName | ( | SDL_Joystick * | joystick | ) |

Return the name for this currently opened joystick. If no name can be found, this function returns NULL.

Definition at line 478 of file SDL_joystick.c.

References NULL, and SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (NULL);
}
return (joystick->name);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259
NULL
#define NULL
Definition: begin_code.h:164

## SDL_JoystickNameForIndex()

const char* SDL_JoystickNameForIndex | ( | int | device_index | ) |

Get the implementation dependent name of a joystick. This can be called before any joysticks are opened. If no name can be found, this function returns NULL.

Definition at line 111 of file SDL_joystick.c.

References NULL, SDL_NumJoysticks(), SDL_SetError, and SDL_SYS_JoystickNameForDeviceIndex().

{
if (device_index < 0 || device_index >= SDL_NumJoysticks()) {
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
return (NULL);
}
return (SDL_SYS_JoystickNameForDeviceIndex(device_index));
}
SDL_NumJoysticks
int SDL_NumJoysticks(void)
Definition: SDL_joystick.c:102
SDL_SYS_JoystickNameForDeviceIndex
const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Definition: SDL_sysjoystick.m:402
NULL
#define NULL
Definition: begin_code.h:164
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_JoystickNumAxes()

int SDL_JoystickNumAxes | ( | SDL_Joystick * | joystick | ) |

Get the number of general axis controls on a joystick.

Definition at line 277 of file SDL_joystick.c.

References SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
return (joystick->naxes);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259

## SDL_JoystickNumBalls()

int SDL_JoystickNumBalls | ( | SDL_Joystick * | joystick | ) |

Get the number of trackballs on a joystick.

Joystick trackballs have only relative motion events associated with them and their state cannot be polled.

Definition at line 301 of file SDL_joystick.c.

References SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
return (joystick->nballs);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259

## SDL_JoystickNumButtons()

int SDL_JoystickNumButtons | ( | SDL_Joystick * | joystick | ) |

Get the number of buttons on a joystick.

Definition at line 313 of file SDL_joystick.c.

References SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
return (joystick->nbuttons);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259

## SDL_JoystickNumHats()

int SDL_JoystickNumHats | ( | SDL_Joystick * | joystick | ) |

Get the number of POV hats on a joystick.

Definition at line 289 of file SDL_joystick.c.

References SDL_PrivateJoystickValid().

{
if (!SDL_PrivateJoystickValid(joystick)) {
return (-1);
}
return (joystick->nhats);
}
SDL_PrivateJoystickValid
int SDL_PrivateJoystickValid(SDL_Joystick *joystick)
Definition: SDL_joystick.c:259

## SDL_JoystickOpen()

SDL_Joystick* SDL_JoystickOpen | ( | int | device_index | ) |

Open a joystick for use. The index passed as an argument refers to the N'th joystick on the system. This index is not the value which will identify this joystick in future joystick events. The joystick's instance id (SDL_JoystickID) will be used there instead.

Returns
  A joystick identifier, or NULL if an error occurred.

Definition at line 160 of file SDL_joystick.c.

References i, SDL_GameController::joystick, NULL, SDL_calloc, SDL_free, SDL_IsGameController, SDL_JOYSTICK_POWER_UNKNOWN, SDL_JoystickAxesCenteredAtZero(), SDL_JoystickClose(), SDL_JoystickGetDeviceInstanceID(), SDL_joysticks, SDL_LockJoysticks(), SDL_NumJoysticks(), SDL_OutOfMemory, SDL_SetError, SDL_strdup, SDL_SYS_JoystickNameForDeviceIndex(), SDL_SYS_JoystickOpen(), SDL_SYS_JoystickUpdate(), SDL_TRUE, and SDL_UnlockJoysticks().

{
SDL_Joystick *joystick;
SDL_Joystick *joysticklist;
const char *joystickname = NULL;
if ((device_index < 0) || (device_index >= SDL_NumJoysticks())) {
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
return (NULL);
}
SDL_LockJoysticks();
joysticklist = SDL_joysticks;
/* If the joystick is already open, return it
* it is important that we have a single joystick * for each instance id
*/
while (joysticklist) {
if (SDL_JoystickGetDeviceInstanceID(device_index) == joysticklist->instance_id) {
joystick = joysticklist;
++joystick->ref_count;
SDL_UnlockJoysticks();
return (joystick);
}
joysticklist = joysticklist->next;
}
/* Create and initialize the joystick */
joystick = (SDL_Joystick *) SDL_calloc(sizeof(*joystick), 1);
if (joystick == NULL) {
SDL_OutOfMemory();
SDL_UnlockJoysticks();
return NULL;
}
if (SDL_SYS_JoystickOpen(joystick, device_index) < 0) {
SDL_free(joystick);
SDL_UnlockJoysticks();
return NULL;
}
joystickname = SDL_SYS_JoystickNameForDeviceIndex(device_index);
if (joystickname)
joystick->name = SDL_strdup(joystickname);
else
joystick->name = NULL;
if (joystick->naxes > 0) {
joystick->axes = (SDL_JoystickAxisInfo *) SDL_calloc(joystick->naxes, sizeof(SDL_JoystickAxisInfo));
}
if (joystick->nhats > 0) {
joystick->hats = (Uint8 *) SDL_calloc(joystick->nhats, sizeof(Uint8));
}
if (joystick->nballs > 0) {
joystick->balls = (struct balldelta *) SDL_calloc(joystick->nballs, sizeof(*joystick->balls));
}
if (joystick->nbuttons > 0) {
joystick->buttons = (Uint8 *) SDL_calloc(joystick->nbuttons, sizeof(Uint8));
}
if (((joystick->naxes > 0) && !joystick->axes)
|| ((joystick->nhats > 0) && !joystick->hats)
|| ((joystick->nballs > 0) && !joystick->balls)
|| ((joystick->nbuttons > 0) && !joystick->buttons)) {
SDL_OutOfMemory();
SDL_JoystickClose(joystick);
SDL_UnlockJoysticks();
return NULL;
}
joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
/* If this joystick is known to have all zero centered axes, skip the auto-centering code */
if (SDL_JoystickAxesCenteredAtZero(joystick)) {
int i;
for (i = 0; i < joystick->naxes; ++i) {
joystick->axes[i].has_initial_value = SDL_TRUE;
}
}
joystick->is_game_controller = SDL_IsGameController(device_index);
/* Add joystick to list */
++joystick->ref_count;
/* Link the joystick in the list */
joystick->next = SDL_joysticks;
SDL_joysticks = joystick;
SDL_UnlockJoysticks();
SDL_SYS_JoystickUpdate(joystick);
return (joystick);
}
SDL_LockJoysticks
void SDL_LockJoysticks(void)
Definition: SDL_joystick.c:43
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_JoystickClose
void SDL_JoystickClose(SDL_Joystick *joystick)
Definition: SDL_joystick.c:491
SDL_IsGameController
#define SDL_IsGameController
Definition: SDL_dynapi_overrides.h:138
SDL_JoystickAxisInfo
Definition: SDL_sysjoystick.h:32
SDL_NumJoysticks
int SDL_NumJoysticks(void)
Definition: SDL_joystick.c:102
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157
SDL_free
#define SDL_free
Definition: SDL_dynapi_overrides.h:377
SDL_SYS_JoystickNameForDeviceIndex
const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index)
Definition: SDL_sysjoystick.m:402
SDL_UnlockJoysticks
void SDL_UnlockJoysticks(void)
Definition: SDL_joystick.c:51
SDL_JOYSTICK_POWER_UNKNOWN
Definition: SDL_joystick.h:99
SDL_SYS_JoystickUpdate
void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:682
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_JoystickGetDeviceInstanceID
SDL_JoystickID SDL_JoystickGetDeviceInstanceID(int device_index)
Definition: SDL_joystick.c:1130
NULL
#define NULL
Definition: begin_code.h:164
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30
SDL_calloc
#define SDL_calloc
Definition: SDL_dynapi_overrides.h:375
SDL_strdup
#define SDL_strdup
Definition: SDL_dynapi_overrides.h:397
SDL_JoystickAxesCenteredAtZero
static SDL_bool SDL_JoystickAxesCenteredAtZero(SDL_Joystick *joystick)
Definition: SDL_joystick.c:126
SDL_SYS_JoystickOpen
int SDL_SYS_JoystickOpen(SDL_Joystick *joystick, int device_index)
Definition: SDL_sysjoystick.m:421
SDL_joysticks
static SDL_Joystick * SDL_joysticks
Definition: SDL_joystick.c:38

## SDL_JoystickQuit()

void SDL_JoystickQuit | ( | void |  | ) |

Definition at line 545 of file SDL_joystick.c.

References NULL, SDL_assert, SDL_DelHintCallback, SDL_DestroyMutex, SDL_GameControllerQuitMappings(), SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, SDL_INIT_EVENTS, SDL_JoystickAllowBackgroundEventsChanged(), SDL_JoystickClose(), SDL_joysticks, SDL_LockJoysticks(), SDL_QuitSubSystem, SDL_SYS_JoystickQuit(), SDL_UnlockJoysticks(), and SDL_updating_joystick.

Referenced by SDL_QuitSubSystem().

{
/* Make sure we're not getting called in the middle of updating joysticks */
SDL_assert(!SDL_updating_joystick);
SDL_LockJoysticks();
/* Stop the event polling */
while (SDL_joysticks) {
SDL_joysticks->ref_count = 1;
SDL_JoystickClose(SDL_joysticks);
}
/* Quit the joystick setup */
SDL_SYS_JoystickQuit();
SDL_UnlockJoysticks();
#if !SDL_EVENTS_DISABLED
SDL_QuitSubSystem(SDL_INIT_EVENTS);
#endif
SDL_DelHintCallback(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS,
SDL_JoystickAllowBackgroundEventsChanged, NULL);
if (SDL_joystick_lock) {
SDL_DestroyMutex(SDL_joystick_lock);
SDL_joystick_lock = NULL;
}
SDL_GameControllerQuitMappings();
}
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
A variable that lets you enable joystick (and gamecontroller) events even when your app is in the bac...
Definition: SDL_hints.h:466
SDL_INIT_EVENTS
#define SDL_INIT_EVENTS
Definition: SDL.h:82
SDL_LockJoysticks
void SDL_LockJoysticks(void)
Definition: SDL_joystick.c:43
SDL_JoystickClose
void SDL_JoystickClose(SDL_Joystick *joystick)
Definition: SDL_joystick.c:491
SDL_GameControllerQuitMappings
void SDL_GameControllerQuitMappings(void)
Definition: SDL_gamecontroller.c:1744
SDL_joystick_lock
static SDL_mutex * SDL_joystick_lock
Definition: SDL_joystick.c:40
SDL_QuitSubSystem
#define SDL_QuitSubSystem
Definition: SDL_dynapi_overrides.h:56
SDL_SYS_JoystickQuit
void SDL_SYS_JoystickQuit(void)
Definition: SDL_sysjoystick.m:734
SDL_UnlockJoysticks
void SDL_UnlockJoysticks(void)
Definition: SDL_joystick.c:51
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:169
NULL
#define NULL
Definition: begin_code.h:164
SDL_DestroyMutex
#define SDL_DestroyMutex
Definition: SDL_dynapi_overrides.h:263
SDL_DelHintCallback
#define SDL_DelHintCallback
Definition: SDL_dynapi_overrides.h:193
SDL_JoystickAllowBackgroundEventsChanged
static void SDL_JoystickAllowBackgroundEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_joystick.c:60
SDL_updating_joystick
static SDL_bool SDL_updating_joystick
Definition: SDL_joystick.c:39
SDL_joysticks
static SDL_Joystick * SDL_joysticks
Definition: SDL_joystick.c:38

## SDL_JoystickUpdate()

void SDL_JoystickUpdate | ( | void |  | ) |

Update the current state of the open joysticks.

This is called automatically by the event loop if any joystick events are enabled.

Definition at line 840 of file SDL_joystick.c.

References i, SDL_FALSE, SDL_HAT_CENTERED, SDL_JoystickClose(), SDL_joysticks, SDL_LockJoysticks(), SDL_PrivateJoystickAxis(), SDL_PrivateJoystickButton(), SDL_PrivateJoystickHat(), SDL_SYS_JoystickDetect(), SDL_SYS_JoystickUpdate(), SDL_TRUE, SDL_UnlockJoysticks(), and SDL_updating_joystick.

{
SDL_Joystick *joystick;
SDL_LockJoysticks();
if (SDL_updating_joystick) {
/* The joysticks are already being updated */
SDL_UnlockJoysticks();
return;
}
SDL_updating_joystick = SDL_TRUE;
/* Make sure the list is unlocked while dispatching events to prevent application deadlocks */
SDL_UnlockJoysticks();
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
SDL_SYS_JoystickUpdate(joystick);
if (joystick->force_recentering) {
int i;
/* Tell the app that everything is centered/unpressed... */
for (i = 0; i < joystick->naxes; i++) {
if (joystick->axes[i].has_initial_value) {
SDL_PrivateJoystickAxis(joystick, i, joystick->axes[i].zero);
}
}
for (i = 0; i < joystick->nbuttons; i++) {
SDL_PrivateJoystickButton(joystick, i, 0);
}
for (i = 0; i < joystick->nhats; i++) {
SDL_PrivateJoystickHat(joystick, i, SDL_HAT_CENTERED);
}
joystick->force_recentering = SDL_FALSE;
}
}
SDL_LockJoysticks();
SDL_updating_joystick = SDL_FALSE;
/* If any joysticks were closed while updating, free them here */
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
if (joystick->ref_count <= 0) {
SDL_JoystickClose(joystick);
}
}
/* this needs to happen AFTER walking the joystick list above, so that any
dangling hardware data from removed devices can be free'd
*/
SDL_SYS_JoystickDetect();
SDL_UnlockJoysticks();
}
SDL_LockJoysticks
void SDL_LockJoysticks(void)
Definition: SDL_joystick.c:43
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_JoystickClose
void SDL_JoystickClose(SDL_Joystick *joystick)
Definition: SDL_joystick.c:491
SDL_PrivateJoystickHat
int SDL_PrivateJoystickHat(SDL_Joystick *joystick, Uint8 hat, Uint8 value)
Definition: SDL_joystick.c:712
SDL_FALSE
Definition: SDL_stdinc.h:141
SDL_PrivateJoystickButton
int SDL_PrivateJoystickButton(SDL_Joystick *joystick, Uint8 button, Uint8 state)
Definition: SDL_joystick.c:788
SDL_PrivateJoystickAxis
int SDL_PrivateJoystickAxis(SDL_Joystick *joystick, Uint8 axis, Sint16 value)
Definition: SDL_joystick.c:655
SDL_UnlockJoysticks
void SDL_UnlockJoysticks(void)
Definition: SDL_joystick.c:51
SDL_SYS_JoystickUpdate
void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:682
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
SDL_HAT_CENTERED
#define SDL_HAT_CENTERED
Definition: SDL_joystick.h:316
SDL_updating_joystick
static SDL_bool SDL_updating_joystick
Definition: SDL_joystick.c:39
SDL_joysticks
static SDL_Joystick * SDL_joysticks
Definition: SDL_joystick.c:38
SDL_SYS_JoystickDetect
void SDL_SYS_JoystickDetect(void)
Definition: SDL_sysjoystick.m:395

## SDL_LockJoysticks()

void SDL_LockJoysticks | ( | void |  | ) |

Locking for multi-threaded access to the joystick API

If you are using the joystick API or handling events from multiple threads you should use these locking functions to protect access to the joysticks.

In particular, you are guaranteed that the joystick list won't change, so the API functions that take a joystick index will be valid, and joystick and game controller events will not be delivered.

Definition at line 43 of file SDL_joystick.c.

References SDL_LockMutex.

Referenced by SDL_JoystickClose(), SDL_JoystickFromInstanceID(), SDL_JoystickOpen(), SDL_JoystickQuit(), and SDL_JoystickUpdate().

{
if (SDL_joystick_lock) {
SDL_LockMutex(SDL_joystick_lock);
}
}
SDL_LockMutex
#define SDL_LockMutex
Definition: SDL_dynapi_overrides.h:260
SDL_joystick_lock
static SDL_mutex * SDL_joystick_lock
Definition: SDL_joystick.c:40

## SDL_NumJoysticks()

int SDL_NumJoysticks | ( | void |  | ) |

Count the number of joysticks attached to the system right now

Definition at line 102 of file SDL_joystick.c.

References SDL_SYS_NumJoysticks().

Referenced by SDL_JoystickGetDeviceGUID(), SDL_JoystickGetDeviceInstanceID(), SDL_JoystickNameForIndex(), and SDL_JoystickOpen().

{
return SDL_SYS_NumJoysticks();
}
SDL_SYS_NumJoysticks
int SDL_SYS_NumJoysticks(void)
Definition: SDL_sysjoystick.m:389

## SDL_PrivateJoystickAdded()

void SDL_PrivateJoystickAdded | ( | int | device_index | ) |

Definition at line 595 of file SDL_joystick.c.

References SDL_ENABLE, SDL_GetEventState, SDL_JOYDEVICEADDED, SDL_PushEvent, and SDL_Event::type.

Referenced by SDL_SYS_AddJoystickDevice(), and SteamControllerConnectedCallback().

{
#if !SDL_EVENTS_DISABLED
SDL_Event event;
event.type = SDL_JOYDEVICEADDED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = device_index;
SDL_PushEvent(&event);
}
#endif /* !SDL_EVENTS_DISABLED */
}
SDL_JOYDEVICEADDED
Definition: SDL_events.h:113
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_Event::type
Uint32 type
Definition: SDL_events.h:527

## SDL_PrivateJoystickAxis()

int SDL_PrivateJoystickAxis | ( | SDL_Joystick * | joystick,
|  | Uint8 | axis,
|  | Sint16 | value
| ) |  |

Definition at line 655 of file SDL_joystick.c.

References axis, SDL_abs, SDL_ENABLE, SDL_GetEventState, SDL_JOYAXISMOTION, SDL_JOYSTICK_AXIS_MAX, SDL_PrivateJoystickAxis(), SDL_PrivateJoystickShouldIgnoreEvent(), SDL_PushEvent, and SDL_TRUE.

Referenced by SDL_JoystickUpdate(), SDL_PrivateJoystickAxis(), SDL_SYS_AccelerometerUpdate(), and SDL_SYS_MFIJoystickUpdate().

{
int posted;
/* Make sure we're not getting garbage or duplicate events */
if (axis >= joystick->naxes) {
return 0;
}
if (!joystick->axes[axis].has_initial_value) {
joystick->axes[axis].initial_value = value;
joystick->axes[axis].value = value;
joystick->axes[axis].zero = value;
joystick->axes[axis].has_initial_value = SDL_TRUE;
}
if (value == joystick->axes[axis].value) {
return 0;
}
if (!joystick->axes[axis].sent_initial_value) {
/* Make sure we don't send motion until there's real activity on this axis */
const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 controller needed 96 */
if (SDL_abs(value - joystick->axes[axis].value) <= MAX_ALLOWED_JITTER) {
return 0;
}
joystick->axes[axis].sent_initial_value = SDL_TRUE;
joystick->axes[axis].value = value; /* Just so we pass the check above */
SDL_PrivateJoystickAxis(joystick, axis, joystick->axes[axis].initial_value);
}
/* We ignore events if we don't have keyboard focus, except for centering
* events.
*/
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if ((value > joystick->axes[axis].zero && value >= joystick->axes[axis].value) ||
(value < joystick->axes[axis].zero && value <= joystick->axes[axis].value)) {
return 0;
}
}
/* Update internal joystick state */
joystick->axes[axis].value = value;
/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(SDL_JOYAXISMOTION) == SDL_ENABLE) {
SDL_Event event;
event.type = SDL_JOYAXISMOTION;
event.jaxis.which = joystick->instance_id;
event.jaxis.axis = axis;
event.jaxis.value = value;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_abs
#define SDL_abs
Definition: SDL_dynapi_overrides.h:381
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_JOYAXISMOTION
Definition: SDL_events.h:108
SDL_PrivateJoystickAxis
int SDL_PrivateJoystickAxis(SDL_Joystick *joystick, Uint8 axis, Sint16 value)
Definition: SDL_joystick.c:655
SDL_JOYSTICK_AXIS_MAX
#define SDL_JOYSTICK_AXIS_MAX
Definition: SDL_joystick.h:288
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_PrivateJoystickShouldIgnoreEvent
static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent()
Definition: SDL_joystick.c:580
SDL_Event
General event structure.
Definition: SDL_events.h:525

## SDL_PrivateJoystickBall()

int SDL_PrivateJoystickBall | ( | SDL_Joystick * | joystick,
|  | Uint8 | ball,
|  | Sint16 | xrel,
|  | Sint16 | yrel
| ) |  |

Definition at line 752 of file SDL_joystick.c.

References SDL_ENABLE, SDL_GetEventState, SDL_JOYBALLMOTION, SDL_PrivateJoystickShouldIgnoreEvent(), and SDL_PushEvent.

{
int posted;
/* Make sure we're not getting garbage events */
if (ball >= joystick->nballs) {
return 0;
}
/* We ignore events if we don't have keyboard focus. */
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
return 0;
}
/* Update internal mouse state */
joystick->balls[ball].dx += xrel;
joystick->balls[ball].dy += yrel;
/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(SDL_JOYBALLMOTION) == SDL_ENABLE) {
SDL_Event event;
event.jball.type = SDL_JOYBALLMOTION;
event.jball.which = joystick->instance_id;
event.jball.ball = ball;
event.jball.xrel = xrel;
event.jball.yrel = yrel;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_JOYBALLMOTION
Definition: SDL_events.h:109
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_PrivateJoystickShouldIgnoreEvent
static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent()
Definition: SDL_joystick.c:580
SDL_Event
General event structure.
Definition: SDL_events.h:525

## SDL_PrivateJoystickBatteryLevel()

void SDL_PrivateJoystickBatteryLevel | ( | SDL_Joystick * | joystick,
|  | SDL_JoystickPowerLevel | ePowerLevel
| ) |  |

Definition at line 1261 of file SDL_joystick.c.

{
joystick->epowerlevel = ePowerLevel;
}

## SDL_PrivateJoystickButton()

int SDL_PrivateJoystickButton | ( | SDL_Joystick * | joystick,
|  | Uint8 | button,
|  | Uint8 | state
| ) |  |

Definition at line 788 of file SDL_joystick.c.

References button, SDL_ENABLE, SDL_GetEventState, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_PRESSED, SDL_PrivateJoystickShouldIgnoreEvent(), SDL_PushEvent, SDL_RELEASED, state, and SDL_Event::type.

Referenced by SDL_JoystickUpdate(), and SDL_SYS_MFIJoystickUpdate().

{
int posted;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
switch (state) {
case SDL_PRESSED:
event.type = SDL_JOYBUTTONDOWN;
break;
case SDL_RELEASED:
event.type = SDL_JOYBUTTONUP;
break;
default:
/* Invalid state -- bail */
return (0);
}
#endif /* !SDL_EVENTS_DISABLED */
/* Make sure we're not getting garbage or duplicate events */
if (button >= joystick->nbuttons) {
return 0;
}
if (state == joystick->buttons[button]) {
return 0;
}
/* We ignore events if we don't have keyboard focus, except for button
* release. */
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if (state == SDL_PRESSED) {
return 0;
}
}
/* Update internal joystick state */
joystick->buttons[button] = state;
/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jbutton.which = joystick->instance_id;
event.jbutton.button = button;
event.jbutton.state = state;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_JOYBUTTONUP
Definition: SDL_events.h:112
button
SDL_Texture * button
Definition: testgamecontroller.c:67
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
SDL_JOYBUTTONDOWN
Definition: SDL_events.h:111
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_PrivateJoystickShouldIgnoreEvent
static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent()
Definition: SDL_joystick.c:580
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_PRESSED
#define SDL_PRESSED
Definition: SDL_events.h:50
SDL_RELEASED
#define SDL_RELEASED
Definition: SDL_events.h:49
SDL_Event::type
Uint32 type
Definition: SDL_events.h:527

## SDL_PrivateJoystickHat()

int SDL_PrivateJoystickHat | ( | SDL_Joystick * | joystick,
|  | Uint8 | hat,
|  | Uint8 | value
| ) |  |

Definition at line 712 of file SDL_joystick.c.

References SDL_ENABLE, SDL_GetEventState, SDL_HAT_CENTERED, SDL_JOYHATMOTION, SDL_PrivateJoystickShouldIgnoreEvent(), and SDL_PushEvent.

Referenced by SDL_JoystickUpdate(), and SDL_SYS_MFIJoystickUpdate().

{
int posted;
/* Make sure we're not getting garbage or duplicate events */
if (hat >= joystick->nhats) {
return 0;
}
if (value == joystick->hats[hat]) {
return 0;
}
/* We ignore events if we don't have keyboard focus, except for centering
* events.
*/
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if (value != SDL_HAT_CENTERED) {
return 0;
}
}
/* Update internal joystick state */
joystick->hats[hat] = value;
/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(SDL_JOYHATMOTION) == SDL_ENABLE) {
SDL_Event event;
event.jhat.type = SDL_JOYHATMOTION;
event.jhat.which = joystick->instance_id;
event.jhat.hat = hat;
event.jhat.value = value;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_JOYHATMOTION
Definition: SDL_events.h:110
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_PrivateJoystickShouldIgnoreEvent
static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent()
Definition: SDL_joystick.c:580
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_HAT_CENTERED
#define SDL_HAT_CENTERED
Definition: SDL_joystick.h:316

## SDL_PrivateJoystickRemoved()

void SDL_PrivateJoystickRemoved | ( | SDL_JoystickID | device_instance | ) |

Definition at line 638 of file SDL_joystick.c.

References SDL_ENABLE, SDL_GetEventState, SDL_JOYDEVICEREMOVED, SDL_PushEvent, SDL_Event::type, and UpdateEventsForDeviceRemoval().

Referenced by SDL_SYS_RemoveJoystickDevice().

{
#if !SDL_EVENTS_DISABLED
SDL_Event event;
event.type = SDL_JOYDEVICEREMOVED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = device_instance;
SDL_PushEvent(&event);
}
UpdateEventsForDeviceRemoval();
#endif /* !SDL_EVENTS_DISABLED */
}
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:114
UpdateEventsForDeviceRemoval
static void UpdateEventsForDeviceRemoval()
Definition: SDL_joystick.c:614
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_Event::type
Uint32 type
Definition: SDL_events.h:527

## SDL_PrivateJoystickShouldIgnoreEvent()

static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent | ( |  | ) |

static

Definition at line 580 of file SDL_joystick.c.

References NULL, SDL_FALSE, SDL_GetKeyboardFocus, SDL_HasWindows(), SDL_joystick_allows_background_events, and SDL_TRUE.

Referenced by SDL_PrivateJoystickAxis(), SDL_PrivateJoystickBall(), SDL_PrivateJoystickButton(), and SDL_PrivateJoystickHat().

{
if (SDL_joystick_allows_background_events) {
return SDL_FALSE;
}
if (SDL_HasWindows() && SDL_GetKeyboardFocus() == NULL) {
/* We have windows but we don't have focus, ignore the event. */
return SDL_TRUE;
}
return SDL_FALSE;
}
SDL_TRUE
Definition: SDL_stdinc.h:142
SDL_FALSE
Definition: SDL_stdinc.h:141
SDL_GetKeyboardFocus
#define SDL_GetKeyboardFocus
Definition: SDL_dynapi_overrides.h:216
SDL_joystick_allows_background_events
static SDL_bool SDL_joystick_allows_background_events
Definition: SDL_joystick.c:37
NULL
#define NULL
Definition: begin_code.h:164
SDL_HasWindows
SDL_bool SDL_HasWindows(void)
Definition: SDL_video.c:1630

## SDL_PrivateJoystickValid()

int SDL_PrivateJoystickValid | ( | SDL_Joystick * | joystick | ) |

Definition at line 259 of file SDL_joystick.c.

References NULL, and SDL_SetError.

Referenced by SDL_HapticOpenFromJoystick(), SDL_JoystickCurrentPowerLevel(), SDL_JoystickGetAttached(), SDL_JoystickGetAxis(), SDL_JoystickGetAxisInitialState(), SDL_JoystickGetBall(), SDL_JoystickGetButton(), SDL_JoystickGetGUID(), SDL_JoystickGetHat(), SDL_JoystickInstanceID(), SDL_JoystickIsHaptic(), SDL_JoystickName(), SDL_JoystickNumAxes(), SDL_JoystickNumBalls(), SDL_JoystickNumButtons(), and SDL_JoystickNumHats().

{
int valid;
if (joystick == NULL) {
SDL_SetError("Joystick hasn't been opened yet");
valid = 0;
} else {
valid = 1;
}
return valid;
}
NULL
#define NULL
Definition: begin_code.h:164
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:30

## SDL_UnlockJoysticks()

void SDL_UnlockJoysticks | ( | void |  | ) |

Definition at line 51 of file SDL_joystick.c.

References SDL_UnlockMutex, and SDLCALL.

Referenced by SDL_JoystickClose(), SDL_JoystickFromInstanceID(), SDL_JoystickOpen(), SDL_JoystickQuit(), and SDL_JoystickUpdate().

{
if (SDL_joystick_lock) {
SDL_UnlockMutex(SDL_joystick_lock);
}
}
SDL_joystick_lock
static SDL_mutex * SDL_joystick_lock
Definition: SDL_joystick.c:40
SDL_UnlockMutex
#define SDL_UnlockMutex
Definition: SDL_dynapi_overrides.h:262

## UpdateEventsForDeviceRemoval()

static void UpdateEventsForDeviceRemoval | ( |  | ) |

static

Definition at line 614 of file SDL_joystick.c.

References events, i, SDL_Event::jdevice, NULL, SDL_ADDEVENT, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_PEEKEVENT, SDL_PeepEvents, SDL_stack_alloc, SDL_stack_free, and SDL_JoyDeviceEvent::which.

Referenced by SDL_PrivateJoystickRemoved().

{
int i, num_events;
SDL_Event *events;
num_events = SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEADDED);
if (num_events <= 0) {
return;
}
events = SDL_stack_alloc(SDL_Event, num_events);
if (!events) {
return;
}
num_events = SDL_PeepEvents(events, num_events, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEADDED);
for (i = 0; i < num_events; ++i) {
--events[i].jdevice.which;
}
SDL_PeepEvents(events, num_events, SDL_ADDEVENT, 0, 0);
SDL_stack_free(events);
}
SDL_Event::jdevice
SDL_JoyDeviceEvent jdevice
Definition: SDL_events.h:540
SDL_JOYDEVICEADDED
Definition: SDL_events.h:113
SDL_PEEKEVENT
Definition: SDL_events.h:579
events
static SDL_Event events[EVENT_BUF_SIZE]
Definition: testgesture.c:35
SDL_PeepEvents
#define SDL_PeepEvents
Definition: SDL_dynapi_overrides.h:117
SDL_stack_alloc
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:354
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50
NULL
#define NULL
Definition: begin_code.h:164
SDL_JoyDeviceEvent::which
Sint32 which
Definition: SDL_events.h:349
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_GETEVENT
Definition: SDL_events.h:580
SDL_ADDEVENT
Definition: SDL_events.h:578
SDL_stack_free
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:355

## Variable Documentation

## SDL_joystick_allows_background_events

SDL_bool SDL_joystick_allows_background_events = SDL_FALSE

static

Definition at line 37 of file SDL_joystick.c.

Referenced by SDL_JoystickAllowBackgroundEventsChanged(), and SDL_PrivateJoystickShouldIgnoreEvent().

## SDL_joystick_lock

SDL_mutex* SDL_joystick_lock = NULL

static

Definition at line 40 of file SDL_joystick.c.

## SDL_joysticks

SDL_Joystick* SDL_joysticks = NULL

static

Definition at line 38 of file SDL_joystick.c.

Referenced by SDL_JoystickClose(), SDL_JoystickFromInstanceID(), SDL_JoystickOpen(), SDL_JoystickQuit(), and SDL_JoystickUpdate().

## SDL_updating_joystick

SDL_bool SDL_updating_joystick = SDL_FALSE

static

Definition at line 39 of file SDL_joystick.c.

Referenced by SDL_JoystickClose(), SDL_JoystickQuit(), and SDL_JoystickUpdate().