SDL_gamecontroller.c File Reference
`#include "../SDL_internal.h"`
`#include "SDL_events.h"`
`#include "SDL_assert.h"`
`#include "SDL_sysjoystick.h"`
`#include "SDL_hints.h"`
`#include "SDL_gamecontrollerdb.h"`
`#include "../events/SDL_events_c.h"`
Include dependency graph for SDL_gamecontroller.c:

Go to the source code of this file.

## Data Structures

struct | _SDL_HatMapping
struct | _SDL_ControllerMapping
struct | ControllerMapping_t
struct | SDL_GameController

## Macros

#define | ABS(_x) ((_x) < 0 ? -(_x) : (_x))
#define | SDL_CONTROLLER_PLATFORM_FIELD "platform:"
#define | k_nMaxReverseEntries 20
#define | k_nMaxHatEntries 0x3f + 1

## Functions

int | SDL_PrivateGameControllerAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, Sint16 value)
int | SDL_PrivateGameControllerButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button, Uint8 state)
int | SDL_GameControllerEventWatcher (void *userdata, SDL_Event *event)
ControllerMapping_t * | SDL_PrivateGetControllerMappingForGUID (SDL_JoystickGUID *guid)
SDL_GameControllerAxis | SDL_GameControllerGetAxisFromString (const char *pchString)
const char * | SDL_GameControllerGetStringForAxis (SDL_GameControllerAxis axis)
SDL_GameControllerButton | SDL_GameControllerGetButtonFromString (const char *pchString)
const char * | SDL_GameControllerGetStringForButton (SDL_GameControllerButton axis)
void | SDL_PrivateGameControllerParseButton (const char *szGameButton, const char *szJoystickButton, struct _SDL_ControllerMapping *pMapping)
static void | SDL_PrivateGameControllerParseControllerConfigString (struct _SDL_ControllerMapping *pMapping, const char *pchString)
void | SDL_PrivateLoadButtonMapping (struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping)
char * | SDL_PrivateGetControllerGUIDFromMappingString (const char *pMapping)
char * | SDL_PrivateGetControllerNameFromMappingString (const char *pMapping)
char * | SDL_PrivateGetControllerMappingFromMappingString (const char *pMapping)
void | SDL_PrivateGameControllerRefreshMapping (ControllerMapping_t *pControllerMapping)
static ControllerMapping_t * | SDL_PrivateAddMappingForGUID (SDL_JoystickGUID jGUID, const char *mappingString, SDL_bool *existing)
ControllerMapping_t * | SDL_PrivateGetControllerMapping (int device_index)
int | SDL_GameControllerAddMappingsFromRW (SDL_RWops *rw, int freerw)
int | SDL_GameControllerAddMapping (const char *mappingString)
char * | SDL_GameControllerMappingForGUID (SDL_JoystickGUID guid)
char * | SDL_GameControllerMapping (SDL_GameController *gamecontroller)
static void | SDL_GameControllerLoadHints ()
int | SDL_GameControllerInit (void)
const char * | SDL_GameControllerNameForIndex (int device_index)
SDL_bool | SDL_IsGameController (int device_index)
SDL_GameController * | SDL_GameControllerOpen (int device_index)
void | SDL_GameControllerUpdate (void)
Sint16 | SDL_GameControllerGetAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis)
Uint8 | SDL_GameControllerGetButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button)
SDL_bool | SDL_GameControllerGetAttached (SDL_GameController *gamecontroller)
const char * | SDL_GameControllerName (SDL_GameController *gamecontroller)
SDL_Joystick * | SDL_GameControllerGetJoystick (SDL_GameController *gamecontroller)
SDL_GameController * | SDL_GameControllerFromInstanceID (SDL_JoystickID joyid)
SDL_GameControllerButtonBind | SDL_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis)
SDL_GameControllerButtonBind | SDL_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button)
void | SDL_GameControllerClose (SDL_GameController *gamecontroller)
void | SDL_GameControllerQuit (void)
int | SDL_GameControllerEventState (int state)

## Variables

static SDL_GameController * | SDL_gamecontrollers = NULL
static ControllerMapping_t * | s_pSupportedControllers = NULL
static ControllerMapping_t * | s_pXInputMapping = NULL
static ControllerMapping_t * | s_pEmscriptenMapping = NULL
static const char * | map_StringForControllerAxis []
static const char * | map_StringForControllerButton []

## Macro Definition Documentation

#define ABS | ( |  | _x | ) | ((_x) < 0 ? -(_x) : (_x))

Definition at line 34 of file SDL_gamecontroller.c.

Referenced by SDL_BlendLine_ARGB8888(), SDL_BlendLine_RGB2(), SDL_BlendLine_RGB4(), SDL_BlendLine_RGB555(), SDL_BlendLine_RGB565(), SDL_BlendLine_RGB888(), SDL_BlendLine_RGBA4(), SDL_DrawLine1(), SDL_DrawLine2(), SDL_DrawLine4(), SDL_GameControllerEventWatcher(), and SDL_GameControllerGetButton().

#define k_nMaxHatEntries 0x3f + 1

We are encoding the "HAT" as 0xhm. where h == hat ID and m == mask MAX 4 hats supported

Definition at line 54 of file SDL_gamecontroller.c.

Referenced by SDL_PrivateLoadButtonMapping().

#define k_nMaxReverseEntries 20

Definition at line 48 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerEventWatcher(), SDL_PrivateGameControllerParseButton(), and SDL_PrivateLoadButtonMapping().

#define SDL_CONTROLLER_PLATFORM_FIELD "platform:"

Definition at line 36 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerAddMappingsFromRW().

## Function Documentation

int SDL_GameControllerAddMapping | ( | const char * | mappingString | ) |

Add or update an existing mapping configuration

Returns
  1 if mapping is added, 0 if updated, -1 on error

Definition at line 746 of file SDL_gamecontroller.c.

References SDL_FALSE, SDL_free(), SDL_InvalidParamError, SDL_JoystickGetGUIDFromString, SDL_PrivateAddMappingForGUID(), SDL_PrivateGetControllerGUIDFromMappingString(), SDL_SetError, SDL_strcasecmp, and SDL_TRUE.

Referenced by SDL_GameControllerAddMappingsFromRW(), SDL_GameControllerInit(), and SDL_GameControllerLoadHints().

{
char *pchGUID;
SDL_JoystickGUID jGUID;
SDL_bool is_xinput_mapping = SDL_FALSE;
SDL_bool is_emscripten_mapping = SDL_FALSE;
SDL_bool existing = SDL_FALSE;
ControllerMapping_t *pControllerMapping;
if (!mappingString) {
return SDL_InvalidParamError("mappingString");
}
pchGUID = SDL_PrivateGetControllerGUIDFromMappingString(mappingString);
if (!pchGUID) {
return SDL_SetError("Couldn't parse GUID from %s", mappingString);
}
if (!SDL_strcasecmp(pchGUID, "xinput")) {
is_xinput_mapping = SDL_TRUE;
}
if (!SDL_strcasecmp(pchGUID, "emscripten")) {
is_emscripten_mapping = SDL_TRUE;
}
jGUID = SDL_JoystickGetGUIDFromString(pchGUID);
SDL_free(pchGUID);
pControllerMapping = SDL_PrivateAddMappingForGUID(jGUID, mappingString, &existing);
if (!pControllerMapping) {
return -1;
}
if (existing) {
return 0;
} else {
if (is_xinput_mapping) {
s_pXInputMapping = pControllerMapping;
}
if (is_emscripten_mapping) {
s_pEmscriptenMapping = pControllerMapping;
}
return 1;
}
}
SDL_PrivateAddMappingForGUID
static ControllerMapping_t * SDL_PrivateAddMappingForGUID(SDL_JoystickGUID jGUID, const char *mappingString, SDL_bool *existing)
Definition: SDL_gamecontroller.c:579
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_strcasecmp
#define SDL_strcasecmp
Definition: SDL_dynapi_overrides.h:425
s_pEmscriptenMapping
static ControllerMapping_t * s_pEmscriptenMapping
Definition: SDL_gamecontroller.c:92
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_free
void SDL_free(void *mem)
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_JoystickGUID
Definition: SDL_joystick.h:68
s_pXInputMapping
static ControllerMapping_t * s_pXInputMapping
Definition: SDL_gamecontroller.c:91
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_PrivateGetControllerGUIDFromMappingString
char * SDL_PrivateGetControllerGUIDFromMappingString(const char *pMapping)
Definition: SDL_gamecontroller.c:492
SDL_JoystickGetGUIDFromString
#define SDL_JoystickGetGUIDFromString
Definition: SDL_dynapi_overrides.h:208

int SDL_GameControllerAddMappingsFromRW | ( | SDL_RWops * | rw,
|  | int | freerw
| ) |  |

To count the number of game controllers in the system for the following: int nJoysticks = SDL_NumJoysticks(); int nGameControllers = 0; for ( int i = 0; i < nJoysticks; i++ ) { if ( SDL_IsGameController(i) ) { nGameControllers++; } }

Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: guid,name,mappings

Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. The mapping format for joystick is: bX - a joystick button, index X hX.Y - hat X with value Y aX - axis X of the joystick Buttons can be used as a controller axis and vice versa.

This string shows an example of a valid mapping for a controller "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", Load a set of mappings from a seekable SDL data stream (memory or file), filtered by the current SDL_GetPlatform() A community sourced database of controllers is available at https://raw.github.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt

If `freerw` is non-zero, the stream will be closed after being read.

Returns
  number of mappings added, -1 on error

Definition at line 675 of file SDL_gamecontroller.c.

References sort_controllers::controllers, NULL, SDL_arraysize, SDL_CONTROLLER_PLATFORM_FIELD, SDL_free(), SDL_GameControllerAddMapping(), SDL_GetPlatform, SDL_malloc, SDL_RWclose, SDL_RWread, SDL_RWsize, SDL_SetError, SDL_strchr, SDL_strlcpy, SDL_strlen, SDL_strncasecmp, and SDL_strstr.

{
const char *platform = SDL_GetPlatform();
int controllers = 0;
char *buf, *line, *line_end, *tmp, *comma, line_platform[64];
size_t db_size, platform_len;
if (rw == NULL) {
return SDL_SetError("Invalid RWops");
}
db_size = (size_t)SDL_RWsize(rw);
buf = (char *)SDL_malloc(db_size + 1);
if (buf == NULL) {
if (freerw) {
SDL_RWclose(rw);
}
return SDL_SetError("Could not allocate space to read DB into memory");
}
if (SDL_RWread(rw, buf, db_size, 1) != 1) {
if (freerw) {
SDL_RWclose(rw);
}
SDL_free(buf);
return SDL_SetError("Could not read DB");
}
if (freerw) {
SDL_RWclose(rw);
}
buf[db_size] = '\0';
line = buf;
while (line < buf + db_size) {
line_end = SDL_strchr(line, '\n');
if (line_end != NULL) {
*line_end = '\0';
} else {
line_end = buf + db_size;
}
/* Extract and verify the platform */
tmp = SDL_strstr(line, SDL_CONTROLLER_PLATFORM_FIELD);
if (tmp != NULL) {
tmp += SDL_strlen(SDL_CONTROLLER_PLATFORM_FIELD);
comma = SDL_strchr(tmp, ',');
if (comma != NULL) {
platform_len = comma - tmp + 1;
if (platform_len + 1 < SDL_arraysize(line_platform)) {
SDL_strlcpy(line_platform, tmp, platform_len);
if (SDL_strncasecmp(line_platform, platform, platform_len) == 0 &&
SDL_GameControllerAddMapping(line) > 0) {
controllers++;
}
}
}
}
line = line_end + 1;
}
SDL_free(buf);
return controllers;
}
SDL_strlcpy
#define SDL_strlcpy
Definition: SDL_dynapi_overrides.h:400
SDL_CONTROLLER_PLATFORM_FIELD
#define SDL_CONTROLLER_PLATFORM_FIELD
Definition: SDL_gamecontroller.c:36
SDL_RWsize
#define SDL_RWsize(ctx)
Definition: SDL_rwops.h:184
SDL_RWread
#define SDL_RWread(ctx, ptr, size, n)
Definition: SDL_rwops.h:187
SDL_strncasecmp
#define SDL_strncasecmp
Definition: SDL_dynapi_overrides.h:426
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
size_t
unsigned int size_t
Definition: SDL_config_windows.h:67
sort_controllers.controllers
list controllers
Definition: sort_controllers.py:12
SDL_GameControllerAddMapping
int SDL_GameControllerAddMapping(const char *mappingString)
Definition: SDL_gamecontroller.c:746
SDL_free
void SDL_free(void *mem)
SDL_GetPlatform
#define SDL_GetPlatform
Definition: SDL_dynapi_overrides.h:297
buf
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: SDL_opengl_glext.h:2480
NULL
#define NULL
Definition: begin_code.h:143
SDL_RWclose
#define SDL_RWclose(ctx)
Definition: SDL_rwops.h:189
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:399
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380
SDL_strstr
#define SDL_strstr
Definition: SDL_dynapi_overrides.h:409

void SDL_GameControllerClose | ( | SDL_GameController * | gamecontroller | ) |

Close a controller previously opened with SDL_GameControllerOpen().

Definition at line 1161 of file SDL_gamecontroller.c.

References NULL, SDL_free(), SDL_gamecontrollers, and SDL_JoystickClose.

Referenced by SDL_GameControllerQuit().

{
SDL_GameController *gamecontrollerlist, *gamecontrollerlistprev;
if (!gamecontroller)
return;
/* First decrement ref count */
if (--gamecontroller->ref_count > 0) {
return;
}
SDL_JoystickClose(gamecontroller->joystick);
gamecontrollerlist = SDL_gamecontrollers;
gamecontrollerlistprev = NULL;
while (gamecontrollerlist) {
if (gamecontroller == gamecontrollerlist) {
if (gamecontrollerlistprev) {
/* unlink this entry */
gamecontrollerlistprev->next = gamecontrollerlist->next;
} else {
SDL_gamecontrollers = gamecontroller->next;
}
break;
}
gamecontrollerlistprev = gamecontrollerlist;
gamecontrollerlist = gamecontrollerlist->next;
}
SDL_free(gamecontroller);
}
SDL_JoystickClose
#define SDL_JoystickClose
Definition: SDL_dynapi_overrides.h:221
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
SDL_free
void SDL_free(void *mem)
NULL
#define NULL
Definition: begin_code.h:143

int SDL_GameControllerEventState | ( | int | state | ) |

Enable/disable controller event polling.

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

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

Definition at line 1287 of file SDL_gamecontroller.c.

References i, SDL_arraysize, SDL_CONTROLLERAXISMOTION, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMAPPED, SDL_CONTROLLERDEVICEREMOVED, SDL_ENABLE, SDL_EventState, SDL_IGNORE, and SDL_QUERY.

{
#if SDL_EVENTS_DISABLED
return SDL_IGNORE;
#else
const Uint32 event_list[] = {
SDL_CONTROLLERAXISMOTION, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP,
SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED,
};
unsigned int i;
switch (state) {
case SDL_QUERY:
state = SDL_IGNORE;
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 */
}
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:157
SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:121
state
struct xkb_state * state
Definition: SDL_waylandsym.h:97
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:718
SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:120
SDL_CONTROLLERBUTTONUP
Definition: SDL_events.h:119
SDL_CONTROLLERBUTTONDOWN
Definition: SDL_events.h:118
SDL_CONTROLLERDEVICEREMAPPED
Definition: SDL_events.h:122
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:42
SDL_EventState
#define SDL_EventState
Definition: SDL_dynapi_overrides.h:137
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_QUERY
#define SDL_QUERY
Definition: SDL_events.h:715
SDL_CONTROLLERAXISMOTION
Definition: SDL_events.h:117
SDL_IGNORE
#define SDL_IGNORE
Definition: SDL_events.h:716

int SDL_GameControllerEventWatcher | ( | void * | userdata,
|  | SDL_Event * | event
| ) |  |

Definition at line 111 of file SDL_gamecontroller.c.

References ABS, axis, SDL_JoyAxisEvent::axis, SDL_JoyButtonEvent::button, SDL_Event::cdevice, SDL_JoyHatEvent::hat, SDL_Event::jaxis, SDL_Event::jbutton, SDL_Event::jdevice, SDL_Event::jhat, k_nMaxReverseEntries, SDL_CONTROLLER_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_gamecontrollers, SDL_HAT_DOWN, SDL_HAT_LEFT, SDL_HAT_RIGHT, SDL_HAT_UP, SDL_IsGameController(), SDL_JOYAXISMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_JOYHATMOTION, SDL_PRESSED, SDL_PrivateGameControllerAxis(), SDL_PrivateGameControllerButton(), SDL_PushEvent, SDL_RELEASED, SDL_JoyButtonEvent::state, SDL_Event::type, SDL_JoyAxisEvent::value, SDL_JoyAxisEvent::which, SDL_JoyHatEvent::which, SDL_JoyButtonEvent::which, SDL_JoyDeviceEvent::which, and SDL_ControllerDeviceEvent::which.

Referenced by SDL_GameControllerInit(), and SDL_GameControllerQuit().

{
switch(event->type) {
case SDL_JOYAXISMOTION:
{
SDL_GameController *controllerlist;
if (event->jaxis.axis >= k_nMaxReverseEntries) break;
controllerlist = SDL_gamecontrollers;
while (controllerlist) {
if (controllerlist->joystick->instance_id == event->jaxis.which) {
if (controllerlist->mapping.raxes[event->jaxis.axis] >= 0) /* simple axis to axis, send it through */ {
SDL_GameControllerAxis axis = controllerlist->mapping.raxes[event->jaxis.axis];
Sint16 value = event->jaxis.value;
switch (axis) {
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
/* Shift it to be 0 - 32767. */
value = value / 2 + 16384;
default:
break;
}
SDL_PrivateGameControllerAxis(controllerlist, axis, value);
} else if (controllerlist->mapping.raxesasbutton[event->jaxis.axis] >= 0) { /* simulate an axis as a button */
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.raxesasbutton[event->jaxis.axis], ABS(event->jaxis.value) > 32768/2 ? SDL_PRESSED : SDL_RELEASED);
}
break;
}
controllerlist = controllerlist->next;
}
}
break;
case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP:
{
SDL_GameController *controllerlist;
if (event->jbutton.button >= k_nMaxReverseEntries) break;
controllerlist = SDL_gamecontrollers;
while (controllerlist) {
if (controllerlist->joystick->instance_id == event->jbutton.which) {
if (controllerlist->mapping.rbuttons[event->jbutton.button] >= 0) { /* simple button as button */
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rbuttons[event->jbutton.button], event->jbutton.state);
} else if (controllerlist->mapping.rbuttonasaxis[event->jbutton.button] >= 0) { /* an button pretending to be an axis */
SDL_PrivateGameControllerAxis(controllerlist, controllerlist->mapping.rbuttonasaxis[event->jbutton.button], event->jbutton.state > 0 ? 32767 : 0);
}
break;
}
controllerlist = controllerlist->next;
}
}
break;
case SDL_JOYHATMOTION:
{
SDL_GameController *controllerlist;
if (event->jhat.hat >= 4) break;
controllerlist = SDL_gamecontrollers;
while (controllerlist) {
if (controllerlist->joystick->instance_id == event->jhat.which) {
Uint8 bSame = controllerlist->hatState[event->jhat.hat] & event->jhat.value;
/* Get list of removed bits (button release) */
Uint8 bChanged = controllerlist->hatState[event->jhat.hat] ^ bSame;
/* the hat idx in the high nibble */
int bHighHat = event->jhat.hat << 4;
if (bChanged & SDL_HAT_DOWN)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_RELEASED);
if (bChanged & SDL_HAT_UP)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_RELEASED);
if (bChanged & SDL_HAT_LEFT)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_RELEASED);
if (bChanged & SDL_HAT_RIGHT)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_RELEASED);
/* Get list of added bits (button press) */
bChanged = event->jhat.value ^ bSame;
if (bChanged & SDL_HAT_DOWN)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_PRESSED);
if (bChanged & SDL_HAT_UP)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_PRESSED);
if (bChanged & SDL_HAT_LEFT)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_PRESSED);
if (bChanged & SDL_HAT_RIGHT)
SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_PRESSED);
/* update our state cache */
controllerlist->hatState[event->jhat.hat] = event->jhat.value;
break;
}
controllerlist = controllerlist->next;
}
}
break;
case SDL_JOYDEVICEADDED:
{
if (SDL_IsGameController(event->jdevice.which)) {
SDL_Event deviceevent;
deviceevent.type = SDL_CONTROLLERDEVICEADDED;
deviceevent.cdevice.which = event->jdevice.which;
SDL_PushEvent(&deviceevent);
}
}
break;
case SDL_JOYDEVICEREMOVED:
{
SDL_GameController *controllerlist = SDL_gamecontrollers;
while (controllerlist) {
if (controllerlist->joystick->instance_id == event->jdevice.which) {
SDL_Event deviceevent;
deviceevent.type = SDL_CONTROLLERDEVICEREMOVED;
deviceevent.cdevice.which = event->jdevice.which;
SDL_PushEvent(&deviceevent);
break;
}
controllerlist = controllerlist->next;
}
}
break;
default:
break;
}
return 1;
}
SDL_JOYBUTTONUP
Definition: SDL_events.h:112
SDL_JoyAxisEvent::value
Sint16 value
Definition: SDL_events.h:285
SDL_JoyButtonEvent::which
SDL_JoystickID which
Definition: SDL_events.h:332
SDL_JOYHATMOTION
Definition: SDL_events.h:110
SDL_Event::jdevice
SDL_JoyDeviceEvent jdevice
Definition: SDL_events.h:536
SDL_JoyAxisEvent::axis
Uint8 axis
Definition: SDL_events.h:281
SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:121
SDL_Event::cdevice
SDL_ControllerDeviceEvent cdevice
Definition: SDL_events.h:539
SDL_Event::jbutton
SDL_JoyButtonEvent jbutton
Definition: SDL_events.h:535
SDL_JOYDEVICEADDED
Definition: SDL_events.h:113
SDL_JoyAxisEvent::which
SDL_JoystickID which
Definition: SDL_events.h:280
SDL_PrivateGameControllerButton
int SDL_PrivateGameControllerButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button, Uint8 state)
Definition: SDL_gamecontroller.c:1248
SDL_JoyButtonEvent::state
Uint8 state
Definition: SDL_events.h:334
ABS
#define ABS(_x)
Definition: SDL_gamecontroller.c:34
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_JOYAXISMOTION
Definition: SDL_events.h:108
SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:120
SDL_ControllerDeviceEvent::which
Sint32 which
Definition: SDL_events.h:389
SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:114
SDL_PrivateGameControllerAxis
int SDL_PrivateGameControllerAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, Sint16 value)
Definition: SDL_gamecontroller.c:1224
SDL_HAT_RIGHT
#define SDL_HAT_RIGHT
Definition: SDL_joystick.h:209
SDL_JOYBUTTONDOWN
Definition: SDL_events.h:111
SDL_HAT_LEFT
#define SDL_HAT_LEFT
Definition: SDL_joystick.h:211
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_Event::jaxis
SDL_JoyAxisEvent jaxis
Definition: SDL_events.h:532
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:131
SDL_CONTROLLER_AXIS_TRIGGERRIGHT
Definition: SDL_gamecontroller.h:226
SDL_CONTROLLER_AXIS_TRIGGERLEFT
Definition: SDL_gamecontroller.h:225
SDL_IsGameController
SDL_bool SDL_IsGameController(int device_index)
Definition: SDL_gamecontroller.c:911
SDL_JoyHatEvent::hat
Uint8 hat
Definition: SDL_events.h:313
SDL_JoyDeviceEvent::which
Sint32 which
Definition: SDL_events.h:346
SDL_Event
General event structure.
Definition: SDL_events.h:521
SDL_PRESSED
#define SDL_PRESSED
Definition: SDL_events.h:50
SDL_Event::jhat
SDL_JoyHatEvent jhat
Definition: SDL_events.h:534
SDL_JoyButtonEvent::button
Uint8 button
Definition: SDL_events.h:333
SDL_RELEASED
#define SDL_RELEASED
Definition: SDL_events.h:49
SDL_HAT_UP
#define SDL_HAT_UP
Definition: SDL_joystick.h:208
k_nMaxReverseEntries
#define k_nMaxReverseEntries
Definition: SDL_gamecontroller.c:48
SDL_HAT_DOWN
#define SDL_HAT_DOWN
Definition: SDL_joystick.h:210
SDL_JoyHatEvent::which
SDL_JoystickID which
Definition: SDL_events.h:312
SDL_GameControllerAxis
SDL_GameControllerAxis
Definition: SDL_gamecontroller.h:218
Sint16
int16_t Sint16
A signed 16-bit integer type.
Definition: SDL_stdinc.h:143
SDL_Event::type
Uint32 type
Definition: SDL_events.h:523

SDL_GameController* SDL_GameControllerFromInstanceID | ( | SDL_JoystickID | joyid | ) |

Return the SDL_GameController associated with an instance id.

Definition at line 1096 of file SDL_gamecontroller.c.

References NULL, and SDL_gamecontrollers.

{
SDL_GameController *gamecontroller = SDL_gamecontrollers;
while (gamecontroller) {
if (gamecontroller->joystick->instance_id == joyid) {
return gamecontroller;
}
gamecontroller = gamecontroller->next;
}
return NULL;
}
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
NULL
#define NULL
Definition: begin_code.h:143

SDL_bool SDL_GameControllerGetAttached | ( | SDL_GameController * | gamecontroller | ) |

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

Definition at line 1061 of file SDL_gamecontroller.c.

References SDL_FALSE, and SDL_JoystickGetAttached.

{
if (!gamecontroller)
return SDL_FALSE;
return SDL_JoystickGetAttached(gamecontroller->joystick);
}
SDL_JoystickGetAttached
#define SDL_JoystickGetAttached
Definition: SDL_dynapi_overrides.h:209
SDL_FALSE
Definition: SDL_stdinc.h:128

Sint16 SDL_GameControllerGetAxis | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerAxis | axis
| ) |  |

Get the current state of an axis control on a game controller.

The state is a value ranging from -32768 to 32767 (except for the triggers, which range from 0 to 32767).

The axis indices start at index 0.

Definition at line 1000 of file SDL_gamecontroller.c.

References SDL_CONTROLLER_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, SDL_JoystickGetAxis, and SDL_JoystickGetButton.

{
if (!gamecontroller)
return 0;
if (gamecontroller->mapping.axes[axis] >= 0) {
Sint16 value = (SDL_JoystickGetAxis(gamecontroller->joystick, gamecontroller->mapping.axes[axis]));
switch (axis) {
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
/* Shift it to be 0 - 32767. */
value = value / 2 + 16384;
default:
break;
}
return value;
} else if (gamecontroller->mapping.buttonasaxis[axis] >= 0) {
Uint8 value;
value = SDL_JoystickGetButton(gamecontroller->joystick, gamecontroller->mapping.buttonasaxis[axis]);
if (value > 0)
return 32767;
return 0;
}
return 0;
}
SDL_JoystickGetButton
#define SDL_JoystickGetButton
Definition: SDL_dynapi_overrides.h:220
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_CONTROLLER_AXIS_TRIGGERRIGHT
Definition: SDL_gamecontroller.h:226
SDL_CONTROLLER_AXIS_TRIGGERLEFT
Definition: SDL_gamecontroller.h:225
SDL_JoystickGetAxis
#define SDL_JoystickGetAxis
Definition: SDL_dynapi_overrides.h:217
Sint16
int16_t Sint16
A signed 16-bit integer type.
Definition: SDL_stdinc.h:143

SDL_GameControllerAxis SDL_GameControllerGetAxisFromString | ( | const char * | pchString | ) |

turn this string into a axis mapping

Definition at line 270 of file SDL_gamecontroller.c.

References map_StringForControllerAxis, SDL_CONTROLLER_AXIS_INVALID, and SDL_strcasecmp.

Referenced by SDL_PrivateGameControllerParseButton().

{
int entry;
if (!pchString || !pchString[0])
return SDL_CONTROLLER_AXIS_INVALID;
for (entry = 0; map_StringForControllerAxis[entry]; ++entry) {
if (!SDL_strcasecmp(pchString, map_StringForControllerAxis[entry]))
return entry;
}
return SDL_CONTROLLER_AXIS_INVALID;
}
map_StringForControllerAxis
static const char * map_StringForControllerAxis[]
Definition: SDL_gamecontroller.c:257
SDL_strcasecmp
#define SDL_strcasecmp
Definition: SDL_dynapi_overrides.h:425
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220

SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerAxis | axis
| ) |  |

Get the SDL joystick layer binding for this controller axis mapping

Definition at line 1113 of file SDL_gamecontroller.c.

References axis, SDL_GameControllerButtonBind::bindType, SDL_GameControllerButtonBind::button, SDL_CONTROLLER_AXIS_INVALID, SDL_CONTROLLER_BINDTYPE_AXIS, SDL_CONTROLLER_BINDTYPE_BUTTON, SDL_memset, and SDL_GameControllerButtonBind::value.

{
SDL_GameControllerButtonBind bind;
SDL_memset(&bind, 0x0, sizeof(bind));
if (!gamecontroller || axis == SDL_CONTROLLER_AXIS_INVALID)
return bind;
if (gamecontroller->mapping.axes[axis] >= 0) {
bind.bindType = SDL_CONTROLLER_BINDTYPE_AXIS;
bind.value.button = gamecontroller->mapping.axes[axis];
} else if (gamecontroller->mapping.buttonasaxis[axis] >= 0) {
bind.bindType = SDL_CONTROLLER_BINDTYPE_BUTTON;
bind.value.button = gamecontroller->mapping.buttonasaxis[axis];
}
return bind;
}
SDL_GameControllerButtonBind::button
int button
Definition: SDL_gamecontroller.h:75
SDL_GameControllerButtonBind
Definition: SDL_gamecontroller.h:70
SDL_CONTROLLER_BINDTYPE_BUTTON
Definition: SDL_gamecontroller.h:62
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_GameControllerButtonBind::bindType
SDL_GameControllerBindType bindType
Definition: SDL_gamecontroller.h:72
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220
SDL_GameControllerButtonBind::value
union SDL_GameControllerButtonBind::@0 value
x0
GLuint GLfloat x0
Definition: SDL_opengl_glext.h:8583
SDL_CONTROLLER_BINDTYPE_AXIS
Definition: SDL_gamecontroller.h:63
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:392

SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerButton | button
| ) |  |

Get the SDL joystick layer binding for this controller button mapping

Definition at line 1136 of file SDL_gamecontroller.c.

References SDL_GameControllerButtonBind::axis, SDL_GameControllerButtonBind::bindType, button, SDL_GameControllerButtonBind::button, SDL_GameControllerButtonBind::hat, SDL_CONTROLLER_BINDTYPE_AXIS, SDL_CONTROLLER_BINDTYPE_BUTTON, SDL_CONTROLLER_BINDTYPE_HAT, SDL_CONTROLLER_BUTTON_INVALID, SDL_memset, and SDL_GameControllerButtonBind::value.

{
SDL_GameControllerButtonBind bind;
SDL_memset(&bind, 0x0, sizeof(bind));
if (!gamecontroller || button == SDL_CONTROLLER_BUTTON_INVALID)
return bind;
if (gamecontroller->mapping.buttons[button] >= 0) {
bind.bindType = SDL_CONTROLLER_BINDTYPE_BUTTON;
bind.value.button = gamecontroller->mapping.buttons[button];
} else if (gamecontroller->mapping.axesasbutton[button] >= 0) {
bind.bindType = SDL_CONTROLLER_BINDTYPE_AXIS;
bind.value.axis = gamecontroller->mapping.axesasbutton[button];
} else if (gamecontroller->mapping.hatasbutton[button].hat >= 0) {
bind.bindType = SDL_CONTROLLER_BINDTYPE_HAT;
bind.value.hat.hat = gamecontroller->mapping.hatasbutton[button].hat;
bind.value.hat.hat_mask = gamecontroller->mapping.hatasbutton[button].mask;
}
return bind;
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
SDL_GameControllerButtonBind::button
int button
Definition: SDL_gamecontroller.h:75
button
SDL_Texture * button
Definition: testgamecontroller.c:67
SDL_GameControllerButtonBind
Definition: SDL_gamecontroller.h:70
SDL_CONTROLLER_BINDTYPE_BUTTON
Definition: SDL_gamecontroller.h:62
SDL_GameControllerButtonBind::bindType
SDL_GameControllerBindType bindType
Definition: SDL_gamecontroller.h:72
SDL_GameControllerButtonBind::axis
int axis
Definition: SDL_gamecontroller.h:76
SDL_GameControllerButtonBind::value
union SDL_GameControllerButtonBind::@0 value
x0
GLuint GLfloat x0
Definition: SDL_opengl_glext.h:8583
SDL_CONTROLLER_BINDTYPE_HAT
Definition: SDL_gamecontroller.h:64
SDL_CONTROLLER_BINDTYPE_AXIS
Definition: SDL_gamecontroller.h:63
SDL_GameControllerButtonBind::hat
int hat
Definition: SDL_gamecontroller.h:78
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:392

Uint8 SDL_GameControllerGetButton | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerButton | button
| ) |  |

Get the current state of a button on a game controller.

The button indices start at index 0.

Definition at line 1031 of file SDL_gamecontroller.c.

References ABS, SDL_JoystickGetAxis, SDL_JoystickGetButton, and SDL_JoystickGetHat.

{
if (!gamecontroller)
return 0;
if (gamecontroller->mapping.buttons[button] >= 0) {
return (SDL_JoystickGetButton(gamecontroller->joystick, gamecontroller->mapping.buttons[button]));
} else if (gamecontroller->mapping.axesasbutton[button] >= 0) {
Sint16 value;
value = SDL_JoystickGetAxis(gamecontroller->joystick, gamecontroller->mapping.axesasbutton[button]);
if (ABS(value) > 32768/2)
return 1;
return 0;
} else if (gamecontroller->mapping.hatasbutton[button].hat >= 0) {
Uint8 value;
value = SDL_JoystickGetHat(gamecontroller->joystick, gamecontroller->mapping.hatasbutton[button].hat);
if (value & gamecontroller->mapping.hatasbutton[button].mask)
return 1;
return 0;
}
return 0;
}
SDL_JoystickGetButton
#define SDL_JoystickGetButton
Definition: SDL_dynapi_overrides.h:220
button
SDL_Texture * button
Definition: testgamecontroller.c:67
ABS
#define ABS(_x)
Definition: SDL_gamecontroller.c:34
SDL_JoystickGetHat
#define SDL_JoystickGetHat
Definition: SDL_dynapi_overrides.h:218
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_JoystickGetAxis
#define SDL_JoystickGetAxis
Definition: SDL_dynapi_overrides.h:217
Sint16
int16_t Sint16
A signed 16-bit integer type.
Definition: SDL_stdinc.h:143

SDL_GameControllerButton SDL_GameControllerGetButtonFromString | ( | const char * | pchString | ) |

turn this string into a button mapping

Definition at line 316 of file SDL_gamecontroller.c.

References map_StringForControllerButton, SDL_CONTROLLER_BUTTON_INVALID, and SDL_strcasecmp.

Referenced by SDL_PrivateGameControllerParseButton().

{
int entry;
if (!pchString || !pchString[0])
return SDL_CONTROLLER_BUTTON_INVALID;
for (entry = 0; map_StringForControllerButton[entry]; ++entry) {
if (SDL_strcasecmp(pchString, map_StringForControllerButton[entry]) == 0)
return entry;
}
return SDL_CONTROLLER_BUTTON_INVALID;
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
SDL_strcasecmp
#define SDL_strcasecmp
Definition: SDL_dynapi_overrides.h:425
map_StringForControllerButton
static const char * map_StringForControllerButton[]
Definition: SDL_gamecontroller.c:294

SDL_Joystick* SDL_GameControllerGetJoystick | ( | SDL_GameController * | gamecontroller | ) |

Get the underlying joystick object used by a controller

Definition at line 1083 of file SDL_gamecontroller.c.

References NULL.

{
if (!gamecontroller)
return NULL;
return gamecontroller->joystick;
}
NULL
#define NULL
Definition: begin_code.h:143

const char* SDL_GameControllerGetStringForAxis | ( | SDL_GameControllerAxis | axis | ) |

turn this axis enum into a string mapping

Definition at line 286 of file SDL_gamecontroller.c.

References axis, map_StringForControllerAxis, NULL, SDL_CONTROLLER_AXIS_INVALID, and SDL_CONTROLLER_AXIS_MAX.

{
if (axis > SDL_CONTROLLER_AXIS_INVALID && axis < SDL_CONTROLLER_AXIS_MAX) {
return map_StringForControllerAxis[axis];
}
return NULL;
}
map_StringForControllerAxis
static const char * map_StringForControllerAxis[]
Definition: SDL_gamecontroller.c:257
SDL_CONTROLLER_AXIS_MAX
Definition: SDL_gamecontroller.h:227
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220
NULL
#define NULL
Definition: begin_code.h:143

const char* SDL_GameControllerGetStringForButton | ( | SDL_GameControllerButton | button | ) |

turn this button enum into a string mapping

Definition at line 332 of file SDL_gamecontroller.c.

References axis, map_StringForControllerButton, NULL, SDL_CONTROLLER_BUTTON_INVALID, and SDL_CONTROLLER_BUTTON_MAX.

{
if (axis > SDL_CONTROLLER_BUTTON_INVALID && axis < SDL_CONTROLLER_BUTTON_MAX) {
return map_StringForControllerButton[axis];
}
return NULL;
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_CONTROLLER_BUTTON_MAX
Definition: SDL_gamecontroller.h:280
map_StringForControllerButton
static const char * map_StringForControllerButton[]
Definition: SDL_gamecontroller.c:294
NULL
#define NULL
Definition: begin_code.h:143

int SDL_GameControllerInit | ( | void |  | ) |

Definition at line 860 of file SDL_gamecontroller.c.

References SDL_Event::cdevice, i, NULL, s_ControllerMappings, SDL_AddEventWatch, SDL_CONTROLLERDEVICEADDED, SDL_GameControllerAddMapping(), SDL_GameControllerEventWatcher(), SDL_GameControllerLoadHints(), SDL_IsGameController(), SDL_NumJoysticks, SDL_PushEvent, SDL_Event::type, and SDL_ControllerDeviceEvent::which.

Referenced by SDL_InitSubSystem().

{
int i = 0;
const char *pMappingString = NULL;
s_pSupportedControllers = NULL;
pMappingString = s_ControllerMappings[i];
while (pMappingString) {
SDL_GameControllerAddMapping(pMappingString);
i++;
pMappingString = s_ControllerMappings[i];
}
/* load in any user supplied config */
SDL_GameControllerLoadHints();
/* watch for joy events and fire controller ones if needed */
SDL_AddEventWatch(SDL_GameControllerEventWatcher, NULL);
/* Send added events for controllers currently attached */
for (i = 0; i < SDL_NumJoysticks(); ++i) {
if (SDL_IsGameController(i)) {
SDL_Event deviceevent;
deviceevent.type = SDL_CONTROLLERDEVICEADDED;
deviceevent.cdevice.which = i;
SDL_PushEvent(&deviceevent);
}
}
return (0);
}
SDL_Event::cdevice
SDL_ControllerDeviceEvent cdevice
Definition: SDL_events.h:539
SDL_NumJoysticks
#define SDL_NumJoysticks
Definition: SDL_dynapi_overrides.h:201
SDL_GameControllerLoadHints
static void SDL_GameControllerLoadHints()
Definition: SDL_gamecontroller.c:828
SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:120
SDL_ControllerDeviceEvent::which
Sint32 which
Definition: SDL_events.h:389
s_pSupportedControllers
static ControllerMapping_t * s_pSupportedControllers
Definition: SDL_gamecontroller.c:90
SDL_GameControllerAddMapping
int SDL_GameControllerAddMapping(const char *mappingString)
Definition: SDL_gamecontroller.c:746
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:131
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:42
SDL_IsGameController
SDL_bool SDL_IsGameController(int device_index)
Definition: SDL_gamecontroller.c:911
NULL
#define NULL
Definition: begin_code.h:143
s_ControllerMappings
static const char * s_ControllerMappings[]
Definition: SDL_gamecontrollerdb.h:32
SDL_AddEventWatch
#define SDL_AddEventWatch
Definition: SDL_dynapi_overrides.h:134
SDL_Event
General event structure.
Definition: SDL_events.h:521
SDL_GameControllerEventWatcher
int SDL_GameControllerEventWatcher(void *userdata, SDL_Event *event)
Definition: SDL_gamecontroller.c:111
SDL_Event::type
Uint32 type
Definition: SDL_events.h:523

static void SDL_GameControllerLoadHints | ( |  | ) |

static

Definition at line 828 of file SDL_gamecontroller.c.

References NULL, SDL_free(), SDL_GameControllerAddMapping(), SDL_GetHint, SDL_HINT_GAMECONTROLLERCONFIG, SDL_malloc, SDL_memcpy, SDL_strchr, and SDL_strlen.

Referenced by SDL_GameControllerInit().

{
const char *hint = SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG);
if (hint && hint[0]) {
size_t nchHints = SDL_strlen(hint);
char *pUserMappings = SDL_malloc(nchHints + 1);
char *pTempMappings = pUserMappings;
SDL_memcpy(pUserMappings, hint, nchHints);
pUserMappings[nchHints] = '\0';
while (pUserMappings) {
char *pchNewLine = NULL;
pchNewLine = SDL_strchr(pUserMappings, '\n');
if (pchNewLine)
*pchNewLine = '\0';
SDL_GameControllerAddMapping(pUserMappings);
if (pchNewLine) {
pUserMappings = pchNewLine + 1;
} else {
pUserMappings = NULL;
}
}
SDL_free(pTempMappings);
}
}
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
SDL_GameControllerAddMapping
int SDL_GameControllerAddMapping(const char *mappingString)
Definition: SDL_gamecontroller.c:746
SDL_free
void SDL_free(void *mem)
NULL
#define NULL
Definition: begin_code.h:143
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:399
SDL_HINT_GAMECONTROLLERCONFIG
#define SDL_HINT_GAMECONTROLLERCONFIG
A variable that lets you manually hint extra gamecontroller db entries.
Definition: SDL_hints.h:320
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380

char* SDL_GameControllerMapping | ( | SDL_GameController * | gamecontroller | ) |

Get a mapping string for an open GameController

Returns
  the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available

Definition at line 818 of file SDL_gamecontroller.c.

References NULL, and SDL_GameControllerMappingForGUID().

{
if (!gamecontroller) {
return NULL;
}
return SDL_GameControllerMappingForGUID(gamecontroller->mapping.guid);
}
NULL
#define NULL
Definition: begin_code.h:143
SDL_GameControllerMappingForGUID
char * SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid)
Definition: SDL_gamecontroller.c:794

char* SDL_GameControllerMappingForGUID | ( | SDL_JoystickGUID | guid | ) |

Get a mapping string for a GUID

Returns
  the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available

Definition at line 794 of file SDL_gamecontroller.c.

References ControllerMapping_t::mapping, ControllerMapping_t::name, NULL, SDL_JoystickGetGUIDString, SDL_malloc, SDL_OutOfMemory, SDL_PrivateGetControllerMappingForGUID(), SDL_snprintf, and SDL_strlen.

Referenced by SDL_GameControllerMapping().

{
char *pMappingString = NULL;
ControllerMapping_t *mapping = SDL_PrivateGetControllerMappingForGUID(&guid);
if (mapping) {
char pchGUID[33];
size_t needed;
SDL_JoystickGetGUIDString(guid, pchGUID, sizeof(pchGUID));
/* allocate enough memory for GUID + ',' + name + ',' + mapping + \0 */
needed = SDL_strlen(pchGUID) + 1 + SDL_strlen(mapping->name) + 1 + SDL_strlen(mapping->mapping) + 1;
pMappingString = SDL_malloc(needed);
if (!pMappingString) {
SDL_OutOfMemory();
return NULL;
}
SDL_snprintf(pMappingString, needed, "%s,%s,%s", pchGUID, mapping->name, mapping->mapping);
}
return pMappingString;
}
SDL_PrivateGetControllerMappingForGUID
ControllerMapping_t * SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *guid)
Definition: SDL_gamecontroller.c:245
SDL_JoystickGetGUIDString
#define SDL_JoystickGetGUIDString
Definition: SDL_dynapi_overrides.h:207
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
ControllerMapping_t::mapping
char * mapping
Definition: SDL_gamecontroller.c:86
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:399
SDL_snprintf
#define SDL_snprintf
Definition: SDL_dynapi_overrides.h:46
mapping
GLenum GLenum GLenum GLenum mapping
Definition: SDL_opengl_glext.h:9374
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380

const char* SDL_GameControllerName | ( | SDL_GameController * | gamecontroller | ) |

Return the name for this currently opened controller

Definition at line 1071 of file SDL_gamecontroller.c.

References NULL.

{
if (!gamecontroller)
return NULL;
return (gamecontroller->mapping.name);
}
NULL
#define NULL
Definition: begin_code.h:143

const char* SDL_GameControllerNameForIndex | ( | int | joystick_index | ) |

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

Definition at line 897 of file SDL_gamecontroller.c.

References ControllerMapping_t::name, NULL, and SDL_PrivateGetControllerMapping().

{
ControllerMapping_t *pSupportedController = SDL_PrivateGetControllerMapping(device_index);
if (pSupportedController) {
return pSupportedController->name;
}
return NULL;
}
SDL_PrivateGetControllerMapping
ControllerMapping_t * SDL_PrivateGetControllerMapping(int device_index)
Definition: SDL_gamecontroller.c:629
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
NULL
#define NULL
Definition: begin_code.h:143
ControllerMapping_t
Definition: SDL_gamecontroller.c:82

SDL_GameController* SDL_GameControllerOpen | ( | int | joystick_index | ) |

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

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

Definition at line 929 of file SDL_gamecontroller.c.

References ControllerMapping_t::guid, ControllerMapping_t::mapping, ControllerMapping_t::name, NULL, SDL_free(), SDL_gamecontrollers, SDL_JoystickOpen, SDL_malloc, SDL_memset, SDL_NumJoysticks, SDL_OutOfMemory, SDL_PrivateGetControllerMapping(), SDL_PrivateLoadButtonMapping(), SDL_SetError, SDL_SYS_GetInstanceIdOfDeviceIndex(), and SDL_SYS_JoystickUpdate().

{
SDL_GameController *gamecontroller;
SDL_GameController *gamecontrollerlist;
ControllerMapping_t *pSupportedController = NULL;
if ((device_index < 0) || (device_index >= SDL_NumJoysticks())) {
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
return (NULL);
}
gamecontrollerlist = SDL_gamecontrollers;
/* If the controller is already open, return it */
while (gamecontrollerlist) {
if (SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == gamecontrollerlist->joystick->instance_id) {
gamecontroller = gamecontrollerlist;
++gamecontroller->ref_count;
return (gamecontroller);
}
gamecontrollerlist = gamecontrollerlist->next;
}
/* Find a controller mapping */
pSupportedController = SDL_PrivateGetControllerMapping(device_index);
if (!pSupportedController) {
SDL_SetError("Couldn't find mapping for device (%d)", device_index);
return (NULL);
}
/* Create and initialize the joystick */
gamecontroller = (SDL_GameController *) SDL_malloc((sizeof *gamecontroller));
if (gamecontroller == NULL) {
SDL_OutOfMemory();
return NULL;
}
SDL_memset(gamecontroller, 0, (sizeof *gamecontroller));
gamecontroller->joystick = SDL_JoystickOpen(device_index);
if (!gamecontroller->joystick) {
SDL_free(gamecontroller);
return NULL;
}
SDL_PrivateLoadButtonMapping(&gamecontroller->mapping, pSupportedController->guid, pSupportedController->name, pSupportedController->mapping);
/* Add joystick to list */
++gamecontroller->ref_count;
/* Link the joystick in the list */
gamecontroller->next = SDL_gamecontrollers;
SDL_gamecontrollers = gamecontroller;
SDL_SYS_JoystickUpdate(gamecontroller->joystick);
return (gamecontroller);
}
SDL_JoystickOpen
#define SDL_JoystickOpen
Definition: SDL_dynapi_overrides.h:203
SDL_NumJoysticks
#define SDL_NumJoysticks
Definition: SDL_dynapi_overrides.h:201
ControllerMapping_t::guid
SDL_JoystickGUID guid
Definition: SDL_gamecontroller.c:84
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
SDL_free
void SDL_free(void *mem)
SDL_PrivateLoadButtonMapping
void SDL_PrivateLoadButtonMapping(struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping)
Definition: SDL_gamecontroller.c:456
SDL_PrivateGetControllerMapping
ControllerMapping_t * SDL_PrivateGetControllerMapping(int device_index)
Definition: SDL_gamecontroller.c:629
SDL_SYS_JoystickUpdate
void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
Definition: SDL_sysjoystick.m:569
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
ControllerMapping_t::mapping
char * mapping
Definition: SDL_gamecontroller.c:86
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_SYS_GetInstanceIdOfDeviceIndex
SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
Definition: SDL_sysjoystick.m:327
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:392

void SDL_GameControllerQuit | ( | void |  | ) |

Definition at line 1200 of file SDL_gamecontroller.c.

References ControllerMapping_t::mapping, ControllerMapping_t::name, ControllerMapping_t::next, NULL, s_pSupportedControllers, SDL_DelEventWatch, SDL_free(), SDL_GameControllerClose(), SDL_GameControllerEventWatcher(), and SDL_gamecontrollers.

Referenced by SDL_QuitSubSystem().

{
ControllerMapping_t *pControllerMap;
while (SDL_gamecontrollers) {
SDL_gamecontrollers->ref_count = 1;
SDL_GameControllerClose(SDL_gamecontrollers);
}
while (s_pSupportedControllers) {
pControllerMap = s_pSupportedControllers;
s_pSupportedControllers = s_pSupportedControllers->next;
SDL_free(pControllerMap->name);
SDL_free(pControllerMap->mapping);
SDL_free(pControllerMap);
}
SDL_DelEventWatch(SDL_GameControllerEventWatcher, NULL);
}
SDL_DelEventWatch
#define SDL_DelEventWatch
Definition: SDL_dynapi_overrides.h:135
ControllerMapping_t::next
struct _ControllerMapping_t * next
Definition: SDL_gamecontroller.c:87
SDL_GameControllerClose
void SDL_GameControllerClose(SDL_GameController *gamecontroller)
Definition: SDL_gamecontroller.c:1161
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
s_pSupportedControllers
static ControllerMapping_t * s_pSupportedControllers
Definition: SDL_gamecontroller.c:90
SDL_free
void SDL_free(void *mem)
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
ControllerMapping_t::mapping
char * mapping
Definition: SDL_gamecontroller.c:86
NULL
#define NULL
Definition: begin_code.h:143
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_GameControllerEventWatcher
int SDL_GameControllerEventWatcher(void *userdata, SDL_Event *event)
Definition: SDL_gamecontroller.c:111

void SDL_GameControllerUpdate | ( | void |  | ) |

Update the current state of the open game controllers.

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

Definition at line 989 of file SDL_gamecontroller.c.

References SDL_JoystickUpdate.

{
/* Just for API completeness; the joystick API does all the work. */
SDL_JoystickUpdate();
}
SDL_JoystickUpdate
#define SDL_JoystickUpdate
Definition: SDL_dynapi_overrides.h:215

SDL_bool SDL_IsGameController | ( | int | joystick_index | ) |

Is the joystick on this index supported by the game controller interface?

Definition at line 911 of file SDL_gamecontroller.c.

References SDL_FALSE, SDL_PrivateGetControllerMapping(), and SDL_TRUE.

Referenced by SDL_GameControllerEventWatcher(), and SDL_GameControllerInit().

{
ControllerMapping_t *pSupportedController = SDL_PrivateGetControllerMapping(device_index);
if (pSupportedController) {
return SDL_TRUE;
}
return SDL_FALSE;
}
SDL_PrivateGetControllerMapping
ControllerMapping_t * SDL_PrivateGetControllerMapping(int device_index)
Definition: SDL_gamecontroller.c:629
SDL_TRUE
Definition: SDL_stdinc.h:129
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_FALSE
Definition: SDL_stdinc.h:128

static ControllerMapping_t* SDL_PrivateAddMappingForGUID | ( | SDL_JoystickGUID | jGUID,
|  | const char * | mappingString,
|  | SDL_bool * | existing
| ) |  |

static

Definition at line 579 of file SDL_gamecontroller.c.

References ControllerMapping_t::guid, ControllerMapping_t::mapping, ControllerMapping_t::name, ControllerMapping_t::next, NULL, s_pSupportedControllers, SDL_FALSE, SDL_free(), SDL_malloc, SDL_OutOfMemory, SDL_PrivateGameControllerRefreshMapping(), SDL_PrivateGetControllerMappingForGUID(), SDL_PrivateGetControllerMappingFromMappingString(), SDL_PrivateGetControllerNameFromMappingString(), SDL_SetError, and SDL_TRUE.

Referenced by SDL_GameControllerAddMapping(), and SDL_PrivateGetControllerMapping().

{
char *pchName;
char *pchMapping;
ControllerMapping_t *pControllerMapping;
pchName = SDL_PrivateGetControllerNameFromMappingString(mappingString);
if (!pchName) {
SDL_SetError("Couldn't parse name from %s", mappingString);
return NULL;
}
pchMapping = SDL_PrivateGetControllerMappingFromMappingString(mappingString);
if (!pchMapping) {
SDL_free(pchName);
SDL_SetError("Couldn't parse %s", mappingString);
return NULL;
}
pControllerMapping = SDL_PrivateGetControllerMappingForGUID(&jGUID);
if (pControllerMapping) {
/* Update existing mapping */
SDL_free(pControllerMapping->name);
pControllerMapping->name = pchName;
SDL_free(pControllerMapping->mapping);
pControllerMapping->mapping = pchMapping;
/* refresh open controllers */
SDL_PrivateGameControllerRefreshMapping(pControllerMapping);
*existing = SDL_TRUE;
} else {
pControllerMapping = SDL_malloc(sizeof(*pControllerMapping));
if (!pControllerMapping) {
SDL_free(pchName);
SDL_free(pchMapping);
SDL_OutOfMemory();
return NULL;
}
pControllerMapping->guid = jGUID;
pControllerMapping->name = pchName;
pControllerMapping->mapping = pchMapping;
pControllerMapping->next = s_pSupportedControllers;
s_pSupportedControllers = pControllerMapping;
*existing = SDL_FALSE;
}
return pControllerMapping;
}
SDL_PrivateGetControllerMappingFromMappingString
char * SDL_PrivateGetControllerMappingFromMappingString(const char *pMapping)
Definition: SDL_gamecontroller.c:539
ControllerMapping_t::next
struct _ControllerMapping_t * next
Definition: SDL_gamecontroller.c:87
SDL_PrivateGetControllerMappingForGUID
ControllerMapping_t * SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *guid)
Definition: SDL_gamecontroller.c:245
ControllerMapping_t::guid
SDL_JoystickGUID guid
Definition: SDL_gamecontroller.c:84
s_pSupportedControllers
static ControllerMapping_t * s_pSupportedControllers
Definition: SDL_gamecontroller.c:90
SDL_free
void SDL_free(void *mem)
SDL_PrivateGameControllerRefreshMapping
void SDL_PrivateGameControllerRefreshMapping(ControllerMapping_t *pControllerMapping)
Definition: SDL_gamecontroller.c:557
SDL_TRUE
Definition: SDL_stdinc.h:129
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
ControllerMapping_t::mapping
char * mapping
Definition: SDL_gamecontroller.c:86
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_PrivateGetControllerNameFromMappingString
char * SDL_PrivateGetControllerNameFromMappingString(const char *pMapping)
Definition: SDL_gamecontroller.c:512
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380

int SDL_PrivateGameControllerAxis | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerAxis | axis,
|  | Sint16 | value
| ) |  |

Definition at line 1224 of file SDL_gamecontroller.c.

References axis, SDL_CONTROLLERAXISMOTION, SDL_ENABLE, SDL_GetEventState, and SDL_PushEvent.

Referenced by SDL_GameControllerEventWatcher().

{
int posted;
/* translate the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(SDL_CONTROLLERAXISMOTION) == SDL_ENABLE) {
SDL_Event event;
event.type = SDL_CONTROLLERAXISMOTION;
event.caxis.which = gamecontroller->joystick->instance_id;
event.caxis.axis = axis;
event.caxis.value = value;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:718
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:731
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:131
SDL_Event
General event structure.
Definition: SDL_events.h:521
SDL_CONTROLLERAXISMOTION
Definition: SDL_events.h:117

int SDL_PrivateGameControllerButton | ( | SDL_GameController * | gamecontroller,
|  | SDL_GameControllerButton | button,
|  | Uint8 | state
| ) |  |

Definition at line 1248 of file SDL_gamecontroller.c.

References button, SDL_CONTROLLER_BUTTON_INVALID, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_ENABLE, SDL_GetEventState, SDL_PRESSED, SDL_PushEvent, SDL_RELEASED, state, and SDL_Event::type.

Referenced by SDL_GameControllerEventWatcher().

{
int posted;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
if (button == SDL_CONTROLLER_BUTTON_INVALID)
return (0);
switch (state) {
case SDL_PRESSED:
event.type = SDL_CONTROLLERBUTTONDOWN;
break;
case SDL_RELEASED:
event.type = SDL_CONTROLLERBUTTONUP;
break;
default:
/* Invalid state -- bail */
return (0);
}
#endif /* !SDL_EVENTS_DISABLED */
/* translate the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.cbutton.which = gamecontroller->joystick->instance_id;
event.cbutton.button = button;
event.cbutton.state = state;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return (posted);
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
button
SDL_Texture * button
Definition: testgamecontroller.c:67
state
struct xkb_state * state
Definition: SDL_waylandsym.h:97
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:718
SDL_CONTROLLERBUTTONUP
Definition: SDL_events.h:119
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:731
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:131
SDL_CONTROLLERBUTTONDOWN
Definition: SDL_events.h:118
SDL_Event
General event structure.
Definition: SDL_events.h:521
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:523

void SDL_PrivateGameControllerParseButton | ( | const char * | szGameButton,
|  | const char * | szJoystickButton,
|  | struct _SDL_ControllerMapping * | pMapping
| ) |  |

Definition at line 343 of file SDL_gamecontroller.c.

References _SDL_ControllerMapping::axes, _SDL_ControllerMapping::axesasbutton, axis, button, _SDL_ControllerMapping::buttonasaxis, _SDL_ControllerMapping::buttons, _SDL_HatMapping::hat, _SDL_ControllerMapping::hatasbutton, k_nMaxReverseEntries, _SDL_HatMapping::mask, _SDL_ControllerMapping::raxes, _SDL_ControllerMapping::raxesasbutton, _SDL_ControllerMapping::rbuttonasaxis, _SDL_ControllerMapping::rbuttons, _SDL_ControllerMapping::rhatasbutton, SDL_assert, SDL_atoi, SDL_CONTROLLER_AXIS_INVALID, SDL_CONTROLLER_BUTTON_INVALID, SDL_GameControllerGetAxisFromString(), SDL_GameControllerGetButtonFromString(), and SDL_SetError.

Referenced by SDL_PrivateGameControllerParseControllerConfigString().

{
int iSDLButton = 0;
SDL_GameControllerButton button;
SDL_GameControllerAxis axis;
button = SDL_GameControllerGetButtonFromString(szGameButton);
axis = SDL_GameControllerGetAxisFromString(szGameButton);
iSDLButton = SDL_atoi(&szJoystickButton[1]);
if (szJoystickButton[0] == 'a') {
if (iSDLButton >= k_nMaxReverseEntries) {
SDL_SetError("Axis index too large: %d", iSDLButton);
return;
}
if (axis != SDL_CONTROLLER_AXIS_INVALID) {
pMapping->axes[ axis ] = iSDLButton;
pMapping->raxes[ iSDLButton ] = axis;
} else if (button != SDL_CONTROLLER_BUTTON_INVALID) {
pMapping->axesasbutton[ button ] = iSDLButton;
pMapping->raxesasbutton[ iSDLButton ] = button;
} else {
SDL_assert(!"How did we get here?");
}
} else if (szJoystickButton[0] == 'b') {
if (iSDLButton >= k_nMaxReverseEntries) {
SDL_SetError("Button index too large: %d", iSDLButton);
return;
}
if (button != SDL_CONTROLLER_BUTTON_INVALID) {
pMapping->buttons[ button ] = iSDLButton;
pMapping->rbuttons[ iSDLButton ] = button;
} else if (axis != SDL_CONTROLLER_AXIS_INVALID) {
pMapping->buttonasaxis[ axis ] = iSDLButton;
pMapping->rbuttonasaxis[ iSDLButton ] = axis;
} else {
SDL_assert(!"How did we get here?");
}
} else if (szJoystickButton[0] == 'h') {
int hat = SDL_atoi(&szJoystickButton[1]);
int mask = SDL_atoi(&szJoystickButton[3]);
if (hat >= 4) {
SDL_SetError("Hat index too large: %d", iSDLButton);
}
if (button != SDL_CONTROLLER_BUTTON_INVALID) {
int ridx;
pMapping->hatasbutton[ button ].hat = hat;
pMapping->hatasbutton[ button ].mask = mask;
ridx = (hat << 4) | mask;
pMapping->rhatasbutton[ ridx ] = button;
} else if (axis != SDL_CONTROLLER_AXIS_INVALID) {
SDL_assert(!"Support hat as axis");
} else {
SDL_assert(!"How did we get here?");
}
}
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
_SDL_ControllerMapping::hatasbutton
struct _SDL_HatMapping hatasbutton[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:68
_SDL_ControllerMapping::buttons
int buttons[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:66
SDL_GameControllerGetButtonFromString
SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char *pchString)
Definition: SDL_gamecontroller.c:316
button
SDL_Texture * button
Definition: testgamecontroller.c:67
_SDL_HatMapping::hat
int hat
Definition: SDL_gamecontroller.c:44
SDL_GameControllerGetAxisFromString
SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char *pchString)
Definition: SDL_gamecontroller.c:270
_SDL_ControllerMapping::raxes
SDL_GameControllerAxis raxes[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:71
_SDL_ControllerMapping::rbuttons
SDL_GameControllerButton rbuttons[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:74
axis
SDL_Texture * axis
Definition: testgamecontroller.c:67
SDL_GameControllerButton
SDL_GameControllerButton
Definition: SDL_gamecontroller.h:262
_SDL_ControllerMapping::rhatasbutton
SDL_GameControllerButton rhatasbutton[k_nMaxHatEntries]
Definition: SDL_gamecontroller.c:76
_SDL_ControllerMapping::buttonasaxis
int buttonasaxis[SDL_CONTROLLER_AXIS_MAX]
Definition: SDL_gamecontroller.c:64
_SDL_ControllerMapping::raxesasbutton
SDL_GameControllerButton raxesasbutton[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:75
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220
_SDL_ControllerMapping::rbuttonasaxis
SDL_GameControllerAxis rbuttonasaxis[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:72
SDL_atoi
#define SDL_atoi
Definition: SDL_dynapi_overrides.h:416
mask
GLenum GLint GLuint mask
Definition: SDL_opengl_glext.h:657
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
_SDL_HatMapping::mask
Uint8 mask
Definition: SDL_gamecontroller.c:45
_SDL_ControllerMapping::axes
int axes[SDL_CONTROLLER_AXIS_MAX]
Definition: SDL_gamecontroller.c:63
_SDL_ControllerMapping::axesasbutton
int axesasbutton[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:67
k_nMaxReverseEntries
#define k_nMaxReverseEntries
Definition: SDL_gamecontroller.c:48
SDL_GameControllerAxis
SDL_GameControllerAxis
Definition: SDL_gamecontroller.h:218

static void SDL_PrivateGameControllerParseControllerConfigString | ( | struct _SDL_ControllerMapping * | pMapping,
|  | const char * | pchString
| ) |  |

static

Definition at line 407 of file SDL_gamecontroller.c.

References i, SDL_FALSE, SDL_memset, SDL_PrivateGameControllerParseButton(), SDL_SetError, and SDL_TRUE.

Referenced by SDL_PrivateLoadButtonMapping().

{
char szGameButton[20];
char szJoystickButton[20];
SDL_bool bGameButton = SDL_TRUE;
int i = 0;
const char *pchPos = pchString;
SDL_memset(szGameButton, 0x0, sizeof(szGameButton));
SDL_memset(szJoystickButton, 0x0, sizeof(szJoystickButton));
while (pchPos && *pchPos) {
if (*pchPos == ':') {
i = 0;
bGameButton = SDL_FALSE;
} else if (*pchPos == ' ') {
} else if (*pchPos == ',') {
i = 0;
bGameButton = SDL_TRUE;
SDL_PrivateGameControllerParseButton(szGameButton, szJoystickButton, pMapping);
SDL_memset(szGameButton, 0x0, sizeof(szGameButton));
SDL_memset(szJoystickButton, 0x0, sizeof(szJoystickButton));
} else if (bGameButton) {
if (i >= sizeof(szGameButton)) {
SDL_SetError("Button name too large: %s", szGameButton);
return;
}
szGameButton[i] = *pchPos;
i++;
} else {
if (i >= sizeof(szJoystickButton)) {
SDL_SetError("Joystick button name too large: %s", szJoystickButton);
return;
}
szJoystickButton[i] = *pchPos;
i++;
}
pchPos++;
}
SDL_PrivateGameControllerParseButton(szGameButton, szJoystickButton, pMapping);
}
SDL_PrivateGameControllerParseButton
void SDL_PrivateGameControllerParseButton(const char *szGameButton, const char *szJoystickButton, struct _SDL_ControllerMapping *pMapping)
Definition: SDL_gamecontroller.c:343
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_TRUE
Definition: SDL_stdinc.h:129
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:42
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_FALSE
Definition: SDL_stdinc.h:128
x0
GLuint GLfloat x0
Definition: SDL_opengl_glext.h:8583
SDL_memset
#define SDL_memset
Definition: SDL_dynapi_overrides.h:392

void SDL_PrivateGameControllerRefreshMapping | ( | ControllerMapping_t * | pControllerMapping | ) |

Definition at line 557 of file SDL_gamecontroller.c.

References ControllerMapping_t::guid, ControllerMapping_t::mapping, ControllerMapping_t::name, SDL_CONTROLLERDEVICEREMAPPED, SDL_gamecontrollers, SDL_memcmp, SDL_PrivateLoadButtonMapping(), and SDL_PushEvent.

Referenced by SDL_PrivateAddMappingForGUID().

{
SDL_GameController *gamecontrollerlist = SDL_gamecontrollers;
while (gamecontrollerlist) {
if (!SDL_memcmp(&gamecontrollerlist->mapping.guid, &pControllerMapping->guid, sizeof(pControllerMapping->guid))) {
SDL_Event event;
event.type = SDL_CONTROLLERDEVICEREMAPPED;
event.cdevice.which = gamecontrollerlist->joystick->instance_id;
SDL_PushEvent(&event);
/* Not really threadsafe. Should this lock access within SDL_GameControllerEventWatcher? */
SDL_PrivateLoadButtonMapping(&gamecontrollerlist->mapping, pControllerMapping->guid, pControllerMapping->name, pControllerMapping->mapping);
}
gamecontrollerlist = gamecontrollerlist->next;
}
}
ControllerMapping_t::guid
SDL_JoystickGUID guid
Definition: SDL_gamecontroller.c:84
SDL_gamecontrollers
static SDL_GameController * SDL_gamecontrollers
Definition: SDL_gamecontroller.c:39
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:131
SDL_memcmp
#define SDL_memcmp
Definition: SDL_dynapi_overrides.h:395
SDL_PrivateLoadButtonMapping
void SDL_PrivateLoadButtonMapping(struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping)
Definition: SDL_gamecontroller.c:456
SDL_CONTROLLERDEVICEREMAPPED
Definition: SDL_events.h:122
ControllerMapping_t::name
char * name
Definition: SDL_gamecontroller.c:85
ControllerMapping_t::mapping
char * mapping
Definition: SDL_gamecontroller.c:86
SDL_Event
General event structure.
Definition: SDL_events.h:521

char* SDL_PrivateGetControllerGUIDFromMappingString | ( | const char * | pMapping | ) |

Definition at line 492 of file SDL_gamecontroller.c.

References NULL, SDL_malloc, SDL_memcpy, SDL_OutOfMemory, and SDL_strchr.

Referenced by SDL_GameControllerAddMapping().

{
const char *pFirstComma = SDL_strchr(pMapping, ',');
if (pFirstComma) {
char *pchGUID = SDL_malloc(pFirstComma - pMapping + 1);
if (!pchGUID) {
SDL_OutOfMemory();
return NULL;
}
SDL_memcpy(pchGUID, pMapping, pFirstComma - pMapping);
pchGUID[ pFirstComma - pMapping ] = 0;
return pchGUID;
}
return NULL;
}
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380

ControllerMapping_t* SDL_PrivateGetControllerMapping | ( | int | device_index | ) |

Definition at line 629 of file SDL_gamecontroller.c.

References s_pEmscriptenMapping, s_pXInputMapping, SDL_JoystickGetDeviceGUID, SDL_JoystickNameForIndex, SDL_PrivateAddMappingForGUID(), SDL_PrivateGetControllerMappingForGUID(), and SDL_strstr.

Referenced by SDL_GameControllerNameForIndex(), SDL_GameControllerOpen(), and SDL_IsGameController().

{
SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID(device_index);
ControllerMapping_t *mapping;
mapping = SDL_PrivateGetControllerMappingForGUID(&jGUID);
#if SDL_JOYSTICK_XINPUT
if (!mapping && SDL_SYS_IsXInputGamepad_DeviceIndex(device_index)) {
mapping = s_pXInputMapping;
}
#endif
#if defined(SDL_JOYSTICK_EMSCRIPTEN)
if (!mapping && s_pEmscriptenMapping) {
mapping = s_pEmscriptenMapping;
}
#endif
#ifdef __LINUX__
if (!mapping) {
const char *name = SDL_JoystickNameForIndex(device_index);
if (name) {
if (SDL_strstr(name, "Xbox 360 Wireless Receiver")) {
/* The Linux driver xpad.c maps the wireless dpad to buttons */
SDL_bool existing;
mapping = SDL_PrivateAddMappingForGUID(jGUID,
"none,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
&existing);
}
}
}
#endif /* __LINUX__ */
if (!mapping) {
const char *name = SDL_JoystickNameForIndex(device_index);
if (name) {
if (SDL_strstr(name, "Xbox") || SDL_strstr(name, "X-Box")) {
mapping = s_pXInputMapping;
}
}
}
return mapping;
}
SDL_PrivateAddMappingForGUID
static ControllerMapping_t * SDL_PrivateAddMappingForGUID(SDL_JoystickGUID jGUID, const char *mappingString, SDL_bool *existing)
Definition: SDL_gamecontroller.c:579
SDL_PrivateGetControllerMappingForGUID
ControllerMapping_t * SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *guid)
Definition: SDL_gamecontroller.c:245
SDL_JoystickNameForIndex
#define SDL_JoystickNameForIndex
Definition: SDL_dynapi_overrides.h:202
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
s_pEmscriptenMapping
static ControllerMapping_t * s_pEmscriptenMapping
Definition: SDL_gamecontroller.c:92
SDL_JoystickGetDeviceGUID
#define SDL_JoystickGetDeviceGUID
Definition: SDL_dynapi_overrides.h:205
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
ControllerMapping_t
Definition: SDL_gamecontroller.c:82
SDL_JoystickGUID
Definition: SDL_joystick.h:68
s_pXInputMapping
static ControllerMapping_t * s_pXInputMapping
Definition: SDL_gamecontroller.c:91
mapping
GLenum GLenum GLenum GLenum mapping
Definition: SDL_opengl_glext.h:9374
SDL_strstr
#define SDL_strstr
Definition: SDL_dynapi_overrides.h:409

ControllerMapping_t* SDL_PrivateGetControllerMappingForGUID | ( | SDL_JoystickGUID * | guid | ) |

Definition at line 245 of file SDL_gamecontroller.c.

References ControllerMapping_t::guid, ControllerMapping_t::next, NULL, s_pSupportedControllers, and SDL_memcmp.

Referenced by SDL_GameControllerMappingForGUID(), SDL_PrivateAddMappingForGUID(), and SDL_PrivateGetControllerMapping().

{
ControllerMapping_t *pSupportedController = s_pSupportedControllers;
while (pSupportedController) {
if (SDL_memcmp(guid, &pSupportedController->guid, sizeof(*guid)) == 0) {
return pSupportedController;
}
pSupportedController = pSupportedController->next;
}
return NULL;
}
ControllerMapping_t::next
struct _ControllerMapping_t * next
Definition: SDL_gamecontroller.c:87
ControllerMapping_t::guid
SDL_JoystickGUID guid
Definition: SDL_gamecontroller.c:84
s_pSupportedControllers
static ControllerMapping_t * s_pSupportedControllers
Definition: SDL_gamecontroller.c:90
SDL_memcmp
#define SDL_memcmp
Definition: SDL_dynapi_overrides.h:395
NULL
#define NULL
Definition: begin_code.h:143
ControllerMapping_t
Definition: SDL_gamecontroller.c:82

char* SDL_PrivateGetControllerMappingFromMappingString | ( | const char * | pMapping | ) |

Definition at line 539 of file SDL_gamecontroller.c.

References NULL, SDL_strchr, and SDL_strdup.

Referenced by SDL_PrivateAddMappingForGUID().

{
const char *pFirstComma, *pSecondComma;
pFirstComma = SDL_strchr(pMapping, ',');
if (!pFirstComma)
return NULL;
pSecondComma = SDL_strchr(pFirstComma + 1, ',');
if (!pSecondComma)
return NULL;
return SDL_strdup(pSecondComma + 1); /* mapping is everything after the 3rd comma */
}
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
NULL
#define NULL
Definition: begin_code.h:143
SDL_strdup
#define SDL_strdup
Definition: SDL_dynapi_overrides.h:403

char* SDL_PrivateGetControllerNameFromMappingString | ( | const char * | pMapping | ) |

Definition at line 512 of file SDL_gamecontroller.c.

References NULL, SDL_malloc, SDL_memcpy, SDL_OutOfMemory, and SDL_strchr.

Referenced by SDL_PrivateAddMappingForGUID().

{
const char *pFirstComma, *pSecondComma;
char *pchName;
pFirstComma = SDL_strchr(pMapping, ',');
if (!pFirstComma)
return NULL;
pSecondComma = SDL_strchr(pFirstComma + 1, ',');
if (!pSecondComma)
return NULL;
pchName = SDL_malloc(pSecondComma - pFirstComma);
if (!pchName) {
SDL_OutOfMemory();
return NULL;
}
SDL_memcpy(pchName, pFirstComma + 1, pSecondComma - pFirstComma);
pchName[ pSecondComma - pFirstComma - 1 ] = 0;
return pchName;
}
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380

void SDL_PrivateLoadButtonMapping | ( | struct _SDL_ControllerMapping * | pMapping,
|  | SDL_JoystickGUID | guid,
|  | const char * | pchName,
|  | const char * | pchMapping
| ) |  |

Definition at line 456 of file SDL_gamecontroller.c.

References _SDL_ControllerMapping::axes, _SDL_ControllerMapping::axesasbutton, _SDL_ControllerMapping::buttonasaxis, _SDL_ControllerMapping::buttons, _SDL_ControllerMapping::guid, _SDL_HatMapping::hat, _SDL_ControllerMapping::hatasbutton, j, k_nMaxHatEntries, k_nMaxReverseEntries, _SDL_ControllerMapping::name, _SDL_ControllerMapping::raxes, _SDL_ControllerMapping::raxesasbutton, _SDL_ControllerMapping::rbuttonasaxis, _SDL_ControllerMapping::rbuttons, _SDL_ControllerMapping::rhatasbutton, SDL_CONTROLLER_AXIS_INVALID, SDL_CONTROLLER_AXIS_MAX, SDL_CONTROLLER_BUTTON_INVALID, SDL_CONTROLLER_BUTTON_MAX, and SDL_PrivateGameControllerParseControllerConfigString().

Referenced by SDL_GameControllerOpen(), and SDL_PrivateGameControllerRefreshMapping().

{
int j;
pMapping->guid = guid;
pMapping->name = pchName;
/* set all the button mappings to non defaults */
for (j = 0; j < SDL_CONTROLLER_AXIS_MAX; j++) {
pMapping->axes[j] = -1;
pMapping->buttonasaxis[j] = -1;
}
for (j = 0; j < SDL_CONTROLLER_BUTTON_MAX; j++) {
pMapping->buttons[j] = -1;
pMapping->axesasbutton[j] = -1;
pMapping->hatasbutton[j].hat = -1;
}
for (j = 0; j < k_nMaxReverseEntries; j++) {
pMapping->raxes[j] = SDL_CONTROLLER_AXIS_INVALID;
pMapping->rbuttonasaxis[j] = SDL_CONTROLLER_AXIS_INVALID;
pMapping->rbuttons[j] = SDL_CONTROLLER_BUTTON_INVALID;
pMapping->raxesasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID;
}
for (j = 0; j < k_nMaxHatEntries; j++) {
pMapping->rhatasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID;
}
SDL_PrivateGameControllerParseControllerConfigString(pMapping, pchMapping);
}
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
_SDL_ControllerMapping::hatasbutton
struct _SDL_HatMapping hatasbutton[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:68
_SDL_ControllerMapping::buttons
int buttons[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:66
_SDL_HatMapping::hat
int hat
Definition: SDL_gamecontroller.c:44
_SDL_ControllerMapping::guid
SDL_JoystickGUID guid
Definition: SDL_gamecontroller.c:59
_SDL_ControllerMapping::raxes
SDL_GameControllerAxis raxes[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:71
_SDL_ControllerMapping::rbuttons
SDL_GameControllerButton rbuttons[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:74
k_nMaxHatEntries
#define k_nMaxHatEntries
Definition: SDL_gamecontroller.c:54
SDL_CONTROLLER_AXIS_MAX
Definition: SDL_gamecontroller.h:227
_SDL_ControllerMapping::rhatasbutton
SDL_GameControllerButton rhatasbutton[k_nMaxHatEntries]
Definition: SDL_gamecontroller.c:76
_SDL_ControllerMapping::buttonasaxis
int buttonasaxis[SDL_CONTROLLER_AXIS_MAX]
Definition: SDL_gamecontroller.c:64
_SDL_ControllerMapping::raxesasbutton
SDL_GameControllerButton raxesasbutton[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:75
_SDL_ControllerMapping::name
const char * name
Definition: SDL_gamecontroller.c:60
SDL_CONTROLLER_BUTTON_MAX
Definition: SDL_gamecontroller.h:280
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220
_SDL_ControllerMapping::rbuttonasaxis
SDL_GameControllerAxis rbuttonasaxis[k_nMaxReverseEntries]
Definition: SDL_gamecontroller.c:72
_SDL_ControllerMapping::axes
int axes[SDL_CONTROLLER_AXIS_MAX]
Definition: SDL_gamecontroller.c:63
_SDL_ControllerMapping::axesasbutton
int axesasbutton[SDL_CONTROLLER_BUTTON_MAX]
Definition: SDL_gamecontroller.c:67
k_nMaxReverseEntries
#define k_nMaxReverseEntries
Definition: SDL_gamecontroller.c:48
SDL_PrivateGameControllerParseControllerConfigString
static void SDL_PrivateGameControllerParseControllerConfigString(struct _SDL_ControllerMapping *pMapping, const char *pchString)
Definition: SDL_gamecontroller.c:407
j
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 int in j)
Definition: SDL_x11sym.h:42

## Variable Documentation

const char* map_StringForControllerAxis[]

static

Initial value:
= {
"leftx",
"lefty",
"rightx",
"righty",
"lefttrigger",
"righttrigger",
NULL
}
NULL
#define NULL
Definition: begin_code.h:143

Definition at line 257 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerGetAxisFromString(), and SDL_GameControllerGetStringForAxis().

const char* map_StringForControllerButton[]

static

Initial value:
= {
"a",
"b",
"x",
"y",
"back",
"guide",
"start",
"leftstick",
"rightstick",
"leftshoulder",
"rightshoulder",
"dpup",
"dpdown",
"dpleft",
"dpright",
NULL
}
NULL
#define NULL
Definition: begin_code.h:143

Definition at line 294 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerGetButtonFromString(), and SDL_GameControllerGetStringForButton().

ControllerMapping_t* s_pEmscriptenMapping = NULL

static

Definition at line 92 of file SDL_gamecontroller.c.

Referenced by SDL_PrivateGetControllerMapping().

ControllerMapping_t* s_pSupportedControllers = NULL

static

Definition at line 90 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerQuit(), SDL_PrivateAddMappingForGUID(), and SDL_PrivateGetControllerMappingForGUID().

ControllerMapping_t* s_pXInputMapping = NULL

static

Definition at line 91 of file SDL_gamecontroller.c.

Referenced by SDL_PrivateGetControllerMapping().

SDL_GameController* SDL_gamecontrollers = NULL

static

Definition at line 39 of file SDL_gamecontroller.c.

Referenced by SDL_GameControllerClose(), SDL_GameControllerEventWatcher(), SDL_GameControllerFromInstanceID(), SDL_GameControllerOpen(), SDL_GameControllerQuit(), and SDL_PrivateGameControllerRefreshMapping().