22#ifndef SDL_JOYSTICK_DISABLED
25#define SCREEN_WIDTH 320
26#define SCREEN_HEIGHT 480
28#define SCREEN_WIDTH 512
29#define SCREEN_HEIGHT 320
32#define MARKER_BUTTON 1
50#define BINDING_COUNT (SDL_CONTROLLER_BUTTON_MAX + SDL_CONTROLLER_BINDING_AXIS_MAX)
219 for (iIndex = 0; iIndex <
s_nNumAxes; ++iIndex) {
247 return (minA <= minB && maxA >= maxB);
251 return SDL_memcmp(pBindingA, pBindingB,
sizeof(*pBindingA)) == 0;
283#ifdef DEBUG_CONTROLLERMAP
311 if (bNativeDPad && bCurrentDPad) {
318 if (bNativeAxis == bCurrentAxis &&
326 *pCurrent = *pBinding;
396 SDL_Log(
"Joystick has %d axes, %d hats, %d balls, and %d buttons\n",
401 ====================================================================================\n\
402 Press the buttons on your controller when indicated\n\
403 (Your controller may look different than the picture)\n\
404 If you want to correct a mistake, press backspace or the back button on your device\n\
405 To skip a button, press SPACE or click/touch the screen\n\
406 To exit, press ESC\n\
407 ====================================================================================\n");
413 for (iIndex = 0; iIndex <
s_nNumAxes; ++iIndex) {
460 switch (
event.type) {
462 if (
event.jaxis.which == nJoystickID) {
467 if (
event.jaxis.which == nJoystickID) {
469 int nValue =
event.jaxis.value;
470 int nCurrentDistance, nFarthestDistance;
478 if (nCurrentDistance > nFarthestDistance) {
483#ifdef DEBUG_CONTROLLERMAP
484 SDL_Log(
"AXIS %d nValue %d nCurrentDistance %d nFarthestDistance %d\n",
event.jaxis.axis, nValue, nCurrentDistance, nFarthestDistance);
486 if (nFarthestDistance >= 16000) {
492 binding.
value.
axis.axis =
event.jaxis.axis;
501 if (
event.jhat.which == nJoystickID) {
505#ifdef DEBUG_CONTROLLERMAP
510 binding.
value.
hat.hat =
event.jhat.hat;
511 binding.
value.
hat.hat_mask =
event.jhat.value;
520 if (
event.jbutton.which == nJoystickID) {
523#ifdef DEBUG_CONTROLLERMAP
572 char trimmed_name[128];
582 trimmed_name[
SDL_strlen(trimmed_name) - 1] =
'\0';
607 const char *pszAxisName;
660 pszElement[0] =
'\0';
708 SDL_Joystick *joystick;
725 if (joystick ==
NULL) {
731 guid,
sizeof (guid));
755 if (joystick ==
NULL) {
763 SDL_Log(
"\n\nUsage: ./controllermap number\nFor example: ./controllermap 0\nOr: ./controllermap 0 >> gamecontrollerdb.txt");
773main(
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_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_X
@ SDL_CONTROLLER_BUTTON_RIGHTSTICK
@ SDL_CONTROLLER_BUTTON_Y
@ SDL_CONTROLLER_BUTTON_A
SDL_GameControllerBindType
@ SDL_CONTROLLER_BINDTYPE_AXIS
@ SDL_CONTROLLER_BINDTYPE_HAT
@ SDL_CONTROLLER_BINDTYPE_NONE
@ SDL_CONTROLLER_BINDTYPE_BUTTON
#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 void WatchJoystick(SDL_Joystick *joystick)
static SDL_bool s_bBindingComplete
static SDL_bool BBindingContainsBinding(const SDL_GameControllerExtendedBind *pBindingA, const SDL_GameControllerExtendedBind *pBindingB)
static int s_arrBindingOrder[BINDING_COUNT]
static AxisState * s_arrAxisState
static SDL_bool BMergeAxisBindings(int iIndex)
static SDL_GameControllerExtendedBind s_arrBindings[BINDING_COUNT]
@ 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 struct @281 s_arrBindingDisplay[BINDING_COUNT]
static int StandardizeAxisValue(int nValue)
SDL_Texture * LoadTexture(SDL_Renderer *renderer, const char *file, SDL_bool transparent)
static void ConfigureBinding(const SDL_GameControllerExtendedBind *pBinding)
static void SetCurrentBinding(int iBinding)
static int s_iCurrentBinding
static Uint32 s_unPendingAdvanceTime
EGLSurface EGLNativeWindowType * window
static SDL_AudioDeviceID device
union SDL_GameControllerExtendedBind::@282 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