22 #ifndef SDL_JOYSTICK_DISABLED
25 #define DEBUG_CONTROLLERMAP
27 #define SCREEN_WIDTH 512
28 #define SCREEN_HEIGHT 320
30 #define MARKER_BUTTON 1
48 #define BINDING_COUNT (SDL_CONTROLLER_BUTTON_MAX + SDL_CONTROLLER_BINDING_AXIS_MAX)
232 for (iIndex = 0; iIndex <
s_nNumAxes; ++iIndex) {
260 return (minA <= minB && maxA >= maxB);
264 return SDL_memcmp(pBindingA, pBindingB,
sizeof(*pBindingA)) == 0;
296 #ifdef DEBUG_CONTROLLERMAP
324 if (bNativeDPad && bCurrentDPad) {
331 if (bNativeAxis == bCurrentAxis &&
339 *pCurrent = *pBinding;
397 SDL_Log(
"Joystick has %d axes, %d hats, %d balls, and %d buttons\n",
402 ====================================================================================\n\
403 Press the buttons on your controller when indicated\n\
404 (Your controller may look different than the picture)\n\
405 If you want to correct a mistake, press backspace or the back button on your device\n\
406 To skip a button, press SPACE or click/touch the screen\n\
407 To exit, press ESC\n\
408 ====================================================================================\n");
464 switch (
event.type) {
466 if (
event.jaxis.which == nJoystickID) {
471 if (
event.jaxis.which == nJoystickID) {
474 int nValue =
event.jaxis.value;
475 int nCurrentDistance, nFarthestDistance;
489 if (nCurrentDistance > nFarthestDistance) {
494 #ifdef DEBUG_CONTROLLERMAP
495 SDL_Log(
"AXIS %d nValue %d nCurrentDistance %d nFarthestDistance %d\n",
event.jaxis.axis, nValue, nCurrentDistance, nFarthestDistance);
497 if (nFarthestDistance >= 16000) {
503 binding.
value.
axis.axis =
event.jaxis.axis;
512 if (
event.jhat.which == nJoystickID) {
516 #ifdef DEBUG_CONTROLLERMAP
521 binding.
value.
hat.hat =
event.jhat.hat;
522 binding.
value.
hat.hat_mask =
event.jhat.value;
531 if (
event.jbutton.which == nJoystickID) {
534 #ifdef DEBUG_CONTROLLERMAP
583 char trimmed_name[128];
593 trimmed_name[
SDL_strlen(trimmed_name) - 1] =
'\0';
618 const char *pszAxisName;
671 pszElement[0] =
'\0';
744 switch (
event.type) {
771 guid,
sizeof (guid));
801 main(
int argc,
char *argv[])
#define SDL_INIT_JOYSTICK
#define SDL_assert(condition)
#define SDL_SetTextureAlphaMod
#define SDL_RenderPresent
#define SDL_DestroyWindow
#define SDL_JoystickNumAxes
#define SDL_DestroyRenderer
#define SDL_SetRenderDrawColor
#define SDL_CreateTextureFromSurface
#define SDL_JoystickGetGUID
#define SDL_JoystickNumHats
#define SDL_JoystickNameForIndex
#define SDL_JoystickClose
#define SDL_RenderSetLogicalSize
#define SDL_JoystickGetGUIDString
#define SDL_GameControllerGetStringForButton
#define SDL_CreateRenderer
#define SDL_JoystickNumButtons
#define SDL_LogSetPriority
#define SDL_JoystickGetVendor
#define SDL_JoystickNumBalls
#define SDL_JoystickGetAxisInitialState
#define SDL_GameControllerGetStringForAxis
#define SDL_SetTextureColorMod
#define SDL_JoystickInstanceID
#define SDL_QuitSubSystem
#define SDL_JoystickGetProduct
@ SDL_CONTROLLER_AXIS_LEFTX
@ SDL_CONTROLLER_AXIS_TRIGGERRIGHT
@ SDL_CONTROLLER_AXIS_RIGHTY
@ SDL_CONTROLLER_AXIS_RIGHTX
@ SDL_CONTROLLER_AXIS_TRIGGERLEFT
@ SDL_CONTROLLER_AXIS_LEFTY
@ SDL_CONTROLLER_BUTTON_B
@ SDL_CONTROLLER_BUTTON_BACK
@ SDL_CONTROLLER_BUTTON_LEFTSTICK
@ SDL_CONTROLLER_BUTTON_START
@ SDL_CONTROLLER_BUTTON_PADDLE2
@ SDL_CONTROLLER_BUTTON_PADDLE1
@ SDL_CONTROLLER_BUTTON_DPAD_LEFT
@ SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
@ SDL_CONTROLLER_BUTTON_DPAD_DOWN
@ SDL_CONTROLLER_BUTTON_DPAD_UP
@ SDL_CONTROLLER_BUTTON_MAX
@ SDL_CONTROLLER_BUTTON_LEFTSHOULDER
@ SDL_CONTROLLER_BUTTON_GUIDE
@ SDL_CONTROLLER_BUTTON_DPAD_RIGHT
@ SDL_CONTROLLER_BUTTON_MISC1
@ SDL_CONTROLLER_BUTTON_X
@ SDL_CONTROLLER_BUTTON_RIGHTSTICK
@ SDL_CONTROLLER_BUTTON_PADDLE3
@ SDL_CONTROLLER_BUTTON_Y
@ SDL_CONTROLLER_BUTTON_A
@ SDL_CONTROLLER_BUTTON_PADDLE4
SDL_GameControllerBindType
@ SDL_CONTROLLER_BINDTYPE_AXIS
@ SDL_CONTROLLER_BINDTYPE_HAT
@ SDL_CONTROLLER_BINDTYPE_NONE
@ SDL_CONTROLLER_BINDTYPE_BUTTON
#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK
A variable controlling whether the Android / iOS built-in accelerometer should be listed as a joystic...
#define SDL_JOYSTICK_AXIS_MIN
#define SDL_JOYSTICK_AXIS_MAX
@ SDL_LOG_CATEGORY_APPLICATION
GLuint const GLchar * name
GLenum GLenum GLenum GLenum mapping
GLenum GLenum GLuint texture
GLfloat GLfloat GLfloat alpha
GLsizei const GLfloat * value
#define SDL_arraysize(array)
#define SDL_LoadBMP(file)
Uint32 SDL_GetTicks(void)
Get the number of milliseconds since the SDL library initialization.
#define SDL_WINDOWPOS_CENTERED
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)
int main(int argc, char *argv[])
static struct @459 s_arrBindingDisplay[BINDING_COUNT]
static void WatchJoystick(SDL_Joystick *joystick)
static SDL_bool s_bBindingComplete
static SDL_bool BBindingContainsBinding(const SDL_GameControllerExtendedBind *pBindingA, const SDL_GameControllerExtendedBind *pBindingB)
@ SDL_CONTROLLER_BINDING_AXIS_TRIGGERRIGHT
@ SDL_CONTROLLER_BINDING_AXIS_MAX
@ SDL_CONTROLLER_BINDING_AXIS_LEFTX_POSITIVE
@ SDL_CONTROLLER_BINDING_AXIS_TRIGGERLEFT
@ SDL_CONTROLLER_BINDING_AXIS_RIGHTX_POSITIVE
@ SDL_CONTROLLER_BINDING_AXIS_RIGHTY_POSITIVE
@ SDL_CONTROLLER_BINDING_AXIS_RIGHTY_NEGATIVE
@ SDL_CONTROLLER_BINDING_AXIS_LEFTY_NEGATIVE
@ SDL_CONTROLLER_BINDING_AXIS_LEFTX_NEGATIVE
@ SDL_CONTROLLER_BINDING_AXIS_LEFTY_POSITIVE
@ SDL_CONTROLLER_BINDING_AXIS_RIGHTX_NEGATIVE
static int s_arrBindingOrder[BINDING_COUNT]
static AxisState * s_arrAxisState
static SDL_bool BMergeAxisBindings(int iIndex)
static SDL_GameControllerExtendedBind s_arrBindings[BINDING_COUNT]
static SDL_Window * window
static int StandardizeAxisValue(int nValue)
static void ConfigureBinding(const SDL_GameControllerExtendedBind *pBinding)
SDL_Texture * LoadTexture(SDL_Renderer *renderer, const char *file, SDL_bool transparent)
static void SetCurrentBinding(int iBinding)
static int s_iCurrentBinding
static Uint32 s_unPendingAdvanceTime
EGLSurface EGLNativeWindowType * window
union SDL_GameControllerExtendedBind::@460 value
SDL_GameControllerBindType bindType
A rectangle, with the origin at the upper left (integer).
A collection of pixels used in software blitting.
The type used to identify a window.
static SDL_Renderer * renderer
SDL_Texture * background_front
SDL_Texture * background_back
static SDL_Joystick * joystick