SDL_gamecontroller.h File Reference
`#include "SDL_stdinc.h"`
`#include "SDL_error.h"`
`#include "SDL_rwops.h"`
`#include "SDL_joystick.h"`
`#include "begin_code.h"`
`#include "close_code.h"`
Include dependency graph for SDL_gamecontroller.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | SDL_GameControllerButtonBind

## Macros

#define | SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1)

## Enumerations

enum | SDL_GameControllerBindType { SDL_CONTROLLER_BINDTYPE_NONE = 0, SDL_CONTROLLER_BINDTYPE_BUTTON, SDL_CONTROLLER_BINDTYPE_AXIS, SDL_CONTROLLER_BINDTYPE_HAT }
enum | SDL_GameControllerAxis { SDL_CONTROLLER_AXIS_INVALID = -1, SDL_CONTROLLER_AXIS_LEFTX, SDL_CONTROLLER_AXIS_LEFTY, SDL_CONTROLLER_AXIS_RIGHTX, SDL_CONTROLLER_AXIS_RIGHTY, SDL_CONTROLLER_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, SDL_CONTROLLER_AXIS_MAX }

enum

SDL_GameControllerButton {
SDL_CONTROLLER_BUTTON_INVALID = -1,
SDL_CONTROLLER_BUTTON_A,
SDL_CONTROLLER_BUTTON_B,
SDL_CONTROLLER_BUTTON_X,
SDL_CONTROLLER_BUTTON_Y,
SDL_CONTROLLER_BUTTON_BACK,
SDL_CONTROLLER_BUTTON_GUIDE,
SDL_CONTROLLER_BUTTON_START,
SDL_CONTROLLER_BUTTON_LEFTSTICK,
SDL_CONTROLLER_BUTTON_RIGHTSTICK,
SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
SDL_CONTROLLER_BUTTON_DPAD_UP,
SDL_CONTROLLER_BUTTON_DPAD_DOWN,
SDL_CONTROLLER_BUTTON_DPAD_LEFT,
SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
SDL_CONTROLLER_BUTTON_MAX
}

## Functions

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)
SDL_bool | SDL_IsGameController (int joystick_index)
const char * | SDL_GameControllerNameForIndex (int joystick_index)
SDL_GameController * | SDL_GameControllerOpen (int joystick_index)
SDL_GameController * | SDL_GameControllerFromInstanceID (SDL_JoystickID joyid)
const char * | SDL_GameControllerName (SDL_GameController *gamecontroller)
SDL_bool | SDL_GameControllerGetAttached (SDL_GameController *gamecontroller)
SDL_Joystick * | SDL_GameControllerGetJoystick (SDL_GameController *gamecontroller)
int | SDL_GameControllerEventState (int state)
void | SDL_GameControllerUpdate (void)
SDL_GameControllerAxis | SDL_GameControllerGetAxisFromString (const char *pchString)
const char * | SDL_GameControllerGetStringForAxis (SDL_GameControllerAxis axis)
SDL_GameControllerButtonBind | SDL_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis)
Sint16 | SDL_GameControllerGetAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis)
SDL_GameControllerButton | SDL_GameControllerGetButtonFromString (const char *pchString)
const char * | SDL_GameControllerGetStringForButton (SDL_GameControllerButton button)
SDL_GameControllerButtonBind | SDL_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button)
Uint8 | SDL_GameControllerGetButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button)
void | SDL_GameControllerClose (SDL_GameController *gamecontroller)

## Detailed Description

Include file for SDL game controller event handling

In order to use these functions, SDL_Init() must have been called with the SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system for game controllers, and load appropriate drivers.

If you would like to receive controller updates while the application is in the background, you should set the following hint before calling SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS

Definition in file SDL_gamecontroller.h.

## Macro Definition Documentation

#define SDL_GameControllerAddMappingsFromFile | ( |  | file | ) | SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1)

Load a set of mappings from a file, filtered by the current SDL_GetPlatform()

Convenience macro.

Definition at line 127 of file SDL_gamecontroller.h.

Referenced by main().

## Enumeration Type Documentation

enum SDL_GameControllerAxis

The list of axes available from a controller

Enumerator
SDL_CONTROLLER_AXIS_INVALID |
SDL_CONTROLLER_AXIS_LEFTX |
SDL_CONTROLLER_AXIS_LEFTY |
SDL_CONTROLLER_AXIS_RIGHTX |
SDL_CONTROLLER_AXIS_RIGHTY |
SDL_CONTROLLER_AXIS_TRIGGERLEFT |
SDL_CONTROLLER_AXIS_TRIGGERRIGHT |
SDL_CONTROLLER_AXIS_MAX |

Definition at line 218 of file SDL_gamecontroller.h.

{
SDL_CONTROLLER_AXIS_INVALID = -1,
SDL_CONTROLLER_AXIS_LEFTX,
SDL_CONTROLLER_AXIS_LEFTY,
SDL_CONTROLLER_AXIS_RIGHTX,
SDL_CONTROLLER_AXIS_RIGHTY,
SDL_CONTROLLER_AXIS_TRIGGERLEFT,
SDL_CONTROLLER_AXIS_TRIGGERRIGHT,
SDL_CONTROLLER_AXIS_MAX
} SDL_GameControllerAxis;
SDL_CONTROLLER_AXIS_LEFTY
Definition: SDL_gamecontroller.h:222
SDL_CONTROLLER_AXIS_RIGHTY
Definition: SDL_gamecontroller.h:224
SDL_CONTROLLER_AXIS_MAX
Definition: SDL_gamecontroller.h:227
SDL_CONTROLLER_AXIS_LEFTX
Definition: SDL_gamecontroller.h:221
SDL_CONTROLLER_AXIS_INVALID
Definition: SDL_gamecontroller.h:220
SDL_CONTROLLER_AXIS_TRIGGERRIGHT
Definition: SDL_gamecontroller.h:226
SDL_CONTROLLER_AXIS_TRIGGERLEFT
Definition: SDL_gamecontroller.h:225
SDL_CONTROLLER_AXIS_RIGHTX
Definition: SDL_gamecontroller.h:223
SDL_GameControllerAxis
SDL_GameControllerAxis
Definition: SDL_gamecontroller.h:218

enum SDL_GameControllerBindType

Enumerator
SDL_CONTROLLER_BINDTYPE_NONE |
SDL_CONTROLLER_BINDTYPE_BUTTON |
SDL_CONTROLLER_BINDTYPE_AXIS |
SDL_CONTROLLER_BINDTYPE_HAT |

Definition at line 59 of file SDL_gamecontroller.h.

{
SDL_CONTROLLER_BINDTYPE_NONE = 0,
SDL_CONTROLLER_BINDTYPE_BUTTON,
SDL_CONTROLLER_BINDTYPE_AXIS,
SDL_CONTROLLER_BINDTYPE_HAT
} SDL_GameControllerBindType;
SDL_GameControllerBindType
SDL_GameControllerBindType
Definition: SDL_gamecontroller.h:59
SDL_CONTROLLER_BINDTYPE_BUTTON
Definition: SDL_gamecontroller.h:62
SDL_CONTROLLER_BINDTYPE_HAT
Definition: SDL_gamecontroller.h:64
SDL_CONTROLLER_BINDTYPE_AXIS
Definition: SDL_gamecontroller.h:63
SDL_CONTROLLER_BINDTYPE_NONE
Definition: SDL_gamecontroller.h:61

enum SDL_GameControllerButton

The list of buttons available from a controller

Enumerator
SDL_CONTROLLER_BUTTON_INVALID |
SDL_CONTROLLER_BUTTON_A |
SDL_CONTROLLER_BUTTON_B |
SDL_CONTROLLER_BUTTON_X |
SDL_CONTROLLER_BUTTON_Y |
SDL_CONTROLLER_BUTTON_BACK |
SDL_CONTROLLER_BUTTON_GUIDE |
SDL_CONTROLLER_BUTTON_START |
SDL_CONTROLLER_BUTTON_LEFTSTICK |
SDL_CONTROLLER_BUTTON_RIGHTSTICK |
SDL_CONTROLLER_BUTTON_LEFTSHOULDER |
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER |
SDL_CONTROLLER_BUTTON_DPAD_UP |
SDL_CONTROLLER_BUTTON_DPAD_DOWN |
SDL_CONTROLLER_BUTTON_DPAD_LEFT |
SDL_CONTROLLER_BUTTON_DPAD_RIGHT |
SDL_CONTROLLER_BUTTON_MAX |

Definition at line 262 of file SDL_gamecontroller.h.

{
SDL_CONTROLLER_BUTTON_INVALID = -1,
SDL_CONTROLLER_BUTTON_A,
SDL_CONTROLLER_BUTTON_B,
SDL_CONTROLLER_BUTTON_X,
SDL_CONTROLLER_BUTTON_Y,
SDL_CONTROLLER_BUTTON_BACK,
SDL_CONTROLLER_BUTTON_GUIDE,
SDL_CONTROLLER_BUTTON_START,
SDL_CONTROLLER_BUTTON_LEFTSTICK,
SDL_CONTROLLER_BUTTON_RIGHTSTICK,
SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
SDL_CONTROLLER_BUTTON_DPAD_UP,
SDL_CONTROLLER_BUTTON_DPAD_DOWN,
SDL_CONTROLLER_BUTTON_DPAD_LEFT,
SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
SDL_CONTROLLER_BUTTON_MAX
} SDL_GameControllerButton;
SDL_CONTROLLER_BUTTON_INVALID
Definition: SDL_gamecontroller.h:264
SDL_CONTROLLER_BUTTON_BACK
Definition: SDL_gamecontroller.h:269
SDL_CONTROLLER_BUTTON_GUIDE
Definition: SDL_gamecontroller.h:270
SDL_CONTROLLER_BUTTON_A
Definition: SDL_gamecontroller.h:265
SDL_CONTROLLER_BUTTON_DPAD_RIGHT
Definition: SDL_gamecontroller.h:279
SDL_CONTROLLER_BUTTON_B
Definition: SDL_gamecontroller.h:266
SDL_GameControllerButton
SDL_GameControllerButton
Definition: SDL_gamecontroller.h:262
SDL_CONTROLLER_BUTTON_START
Definition: SDL_gamecontroller.h:271
SDL_CONTROLLER_BUTTON_RIGHTSTICK
Definition: SDL_gamecontroller.h:273
SDL_CONTROLLER_BUTTON_LEFTSHOULDER
Definition: SDL_gamecontroller.h:274
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
Definition: SDL_gamecontroller.h:275
SDL_CONTROLLER_BUTTON_MAX
Definition: SDL_gamecontroller.h:280
SDL_CONTROLLER_BUTTON_DPAD_UP
Definition: SDL_gamecontroller.h:276
SDL_CONTROLLER_BUTTON_X
Definition: SDL_gamecontroller.h:267
SDL_CONTROLLER_BUTTON_DPAD_LEFT
Definition: SDL_gamecontroller.h:278
SDL_CONTROLLER_BUTTON_Y
Definition: SDL_gamecontroller.h:268
SDL_CONTROLLER_BUTTON_LEFTSTICK
Definition: SDL_gamecontroller.h:272
SDL_CONTROLLER_BUTTON_DPAD_DOWN
Definition: SDL_gamecontroller.h:277

## 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:155
SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:121
state
struct xkb_state * state
Definition: SDL_waylandsym.h:94
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

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 button mapping

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

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_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