src/joystick/SDL_gamecontroller.c
author Jørgen P. Tjernø <jorgen@valvesoftware.com>
Wed, 03 Apr 2013 16:48:20 -0700
changeset 7055 76323a708ea5
parent 7047 299de3271a7b
child 7080 7353267a2ce2
permissions -rw-r--r--
Add 3 Logitech gamecontroller mappings for Mac OS X.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     1
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     2
  Simple DirectMedia Layer
6885
700f1b25f77f Happy New Year!
Sam Lantinga <slouken@libsdl.org>
parents: 6871
diff changeset
     3
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     4
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     5
  This software is provided 'as-is', without any express or implied
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     6
  warranty.  In no event will the authors be held liable for any damages
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     7
  arising from the use of this software.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     8
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     9
  Permission is granted to anyone to use this software for any purpose,
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    10
  including commercial applications, and to alter it and redistribute it
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    11
  freely, subject to the following restrictions:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    12
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    13
  1. The origin of this software must not be misrepresented; you must not
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    14
     claim that you wrote the original software. If you use this software
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    15
     in a product, an acknowledgment in the product documentation would be
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    16
     appreciated but is not required.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    17
  2. Altered source versions must be plainly marked as such, and must not be
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    18
     misrepresented as being the original software.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    19
  3. This notice may not be removed or altered from any source distribution.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    20
*/
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    21
#include "SDL_config.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    22
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    23
/* This is the game controller API for Simple DirectMedia Layer */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    24
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    25
#include "SDL_events.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    26
#include "SDL_assert.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    27
#include "SDL_sysjoystick.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    28
#include "SDL_hints.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    29
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    30
#if !SDL_EVENTS_DISABLED
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    31
#include "../events/SDL_events_c.h"
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    32
#endif
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    33
#define ABS(_x) ((_x) < 0 ? -(_x) : (_x))
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    34
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    35
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    36
/* a list of currently opened game controllers */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    37
static SDL_GameController *SDL_gamecontrollers = NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    38
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
    39
/* keep track of the hat and mask value that transforms this hat movement into a button/axis press */
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
    40
struct _SDL_HatMapping
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    41
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    42
	int hat;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    43
	Uint8 mask;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    44
};
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    45
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    46
#define k_nMaxReverseEntries 20
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    47
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
    48
/**
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
    49
 * We are encoding the "HAT" as 0xhm. where h == hat ID and m == mask
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
    50
 * MAX 4 hats supported
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
    51
 */
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
    52
#define k_nMaxHatEntries 0x3f + 1
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
    53
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    54
/* our in memory mapping db between joystick objects and controller mappings*/
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    55
struct _SDL_ControllerMapping
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    56
{
6738
b408d5a406a3 Changes from Alfred:
Sam Lantinga <slouken@libsdl.org>
parents: 6708
diff changeset
    57
	SDL_JoystickGUID guid;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    58
	const char *name;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    59
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    60
	// mapping of axis/button id to controller version
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    61
	int axes[SDL_CONTROLLER_AXIS_MAX];
6842
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
    62
	int buttonasaxis[SDL_CONTROLLER_AXIS_MAX];
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
    63
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    64
	int buttons[SDL_CONTROLLER_BUTTON_MAX];
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    65
	int axesasbutton[SDL_CONTROLLER_BUTTON_MAX];
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
    66
	struct _SDL_HatMapping hatasbutton[SDL_CONTROLLER_BUTTON_MAX];
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    67
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    68
	// reverse mapping, joystick indices to buttons
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
    69
	SDL_GameControllerAxis raxes[k_nMaxReverseEntries];
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
    70
	SDL_GameControllerAxis rbuttonasaxis[k_nMaxReverseEntries];
6842
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
    71
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
    72
	SDL_GameControllerButton rbuttons[k_nMaxReverseEntries];
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
    73
	SDL_GameControllerButton raxesasbutton[k_nMaxReverseEntries];
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
    74
	SDL_GameControllerButton rhatasbutton[k_nMaxHatEntries];
6842
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
    75
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    76
};
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    77
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    78
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    79
/* our hard coded list of mapping support */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    80
typedef struct _ControllerMapping_t
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    81
{
6738
b408d5a406a3 Changes from Alfred:
Sam Lantinga <slouken@libsdl.org>
parents: 6708
diff changeset
    82
	SDL_JoystickGUID guid;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    83
	char *name;
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
    84
	char *mapping;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    85
	struct _ControllerMapping_t *next;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    86
} ControllerMapping_t;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    87
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    88
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    89
/* default mappings we support */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    90
const char *s_ControllerMappings [] =
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    91
{
6701
91160c9b35da The XInput code is only available in the DirectInput joystick driver.
Sam Lantinga <slouken@libsdl.org>
parents: 6690
diff changeset
    92
#ifdef SDL_JOYSTICK_DINPUT
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    93
	"xinput,X360 Controller,a:b10,b:b11,y:b13,x:b12,start:b4,guide:b14,back:b5,dpup:b0,dpleft:b2,dpdown:b1,dpright:b3,leftshoulder:b8,rightshoulder:b9,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5",
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    94
	"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",
7047
299de3271a7b Add new controller mappings for Windows.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7037
diff changeset
    95
	"88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,x:b0,y:b3,start:b11,back:b8,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.4,dpdown:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,guide:b12",
299de3271a7b Add new controller mappings for Windows.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7037
diff changeset
    96
	"4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,",
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    97
	"25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,x:b0,y:b3,start:b8,guide:,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.4,dpdown:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5",
7027
b1c25fd3907f Added support for the GameStop Gamepad
Sam Lantinga <slouken@libsdl.org>
parents: 6998
diff changeset
    98
    "ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,y:b3,x:b2,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
7047
299de3271a7b Add new controller mappings for Windows.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7037
diff changeset
    99
    "6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   100
#elif defined(__MACOSX__)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   101
	"5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftshoulder:b4,rightshoulder:b5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5",
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   102
	"4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,x:b12,y:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b6,dpdown:b7,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9",
7027
b1c25fd3907f Added support for the GameStop Gamepad
Sam Lantinga <slouken@libsdl.org>
parents: 6998
diff changeset
   103
    "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,y:b3,x:b2,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
7055
76323a708ea5 Add 3 Logitech gamecontroller mappings for Mac OS X.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7047
diff changeset
   104
    "6d040000000000001fc2000000000000,Logitech F710 Gamepad Controller (XInput),a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
76323a708ea5 Add 3 Logitech gamecontroller mappings for Mac OS X.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7047
diff changeset
   105
    "6d0400000000000016c2000000000000,Logitech F310 Gamepad Controller (DInput),a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", // Guide button doesn't seem to be sent in DInput mode.
76323a708ea5 Add 3 Logitech gamecontroller mappings for Mac OS X.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 7047
diff changeset
   106
    "6d0400000000000019c2000000000000,Logitech Wireless Gamepad Controller (DInput),a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", // This includes F710 in DInput mode and the "Logitech Cordless RumblePad 2", at the very least.
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   107
#elif defined(__LINUX__)
6912
8264db362231 Added an X360 game controller config for Linux.
Ryan C. Gordon <icculus@icculus.org>
parents: 6885
diff changeset
   108
	"030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5",
6997
0f91d1be17a4 Add GameController mappings for popular controllers.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6980
diff changeset
   109
    "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
0f91d1be17a4 Add GameController mappings for popular controllers.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6980
diff changeset
   110
    "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
6915
d58bf9cfd709 Added PS3 game controller config for Linux.
Ryan C. Gordon <icculus@icculus.org>
parents: 6913
diff changeset
   111
	"030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,x:b15,y:b12,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9",
6997
0f91d1be17a4 Add GameController mappings for popular controllers.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6980
diff changeset
   112
    "030000006d0400001fc2000005030000,Logitech F710 Gamepad Controller (XInput),a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
6998
f7faeaa02efb Missing comma in one gamepad mapping.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6997
diff changeset
   113
    "030000006d04000019c2000011010000,Logitech F710 Gamepad Controller (DInput),a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", // Guide button doesn't seem to be sent in DInput mode.
6997
0f91d1be17a4 Add GameController mappings for popular controllers.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6980
diff changeset
   114
    "030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
6998
f7faeaa02efb Missing comma in one gamepad mapping.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6997
diff changeset
   115
    "030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
7027
b1c25fd3907f Added support for the GameStop Gamepad
Sam Lantinga <slouken@libsdl.org>
parents: 6998
diff changeset
   116
    "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,y:b3,x:b2,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   117
#endif
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   118
	NULL
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   119
};
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   120
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   121
static ControllerMapping_t *s_pSupportedControllers = NULL;
6708
1fa41febb331 Fixed compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents: 6702
diff changeset
   122
#ifdef SDL_JOYSTICK_DINPUT
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   123
static ControllerMapping_t *s_pXInputMapping = NULL;
6708
1fa41febb331 Fixed compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents: 6702
diff changeset
   124
#endif
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   125
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   126
/* The SDL game controller structure */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   127
struct _SDL_GameController
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   128
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   129
	SDL_Joystick *joystick;	/* underlying joystick device */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   130
	int ref_count;
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   131
	Uint8 hatState[4]; /* the current hat state for this controller */
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   132
	struct _SDL_ControllerMapping mapping; /* the mapping object for this controller */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   133
	struct _SDL_GameController *next; /* pointer to next game controller we have allocated */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   134
};
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   135
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   136
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   137
int SDL_PrivateGameControllerAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis, Sint16 value);
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   138
int	SDL_PrivateGameControllerButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button, Uint8 state);
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   139
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   140
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   141
 * Event filter to fire controller events from joystick ones
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   142
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   143
int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   144
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   145
	switch( event->type )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   146
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   147
	case SDL_JOYAXISMOTION:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   148
		{
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   149
			SDL_GameController *controllerlist;
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   150
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   151
			if ( event->jaxis.axis >= k_nMaxReverseEntries ) break;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   152
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   153
			controllerlist = SDL_gamecontrollers;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   154
			while ( controllerlist )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   155
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   156
				if ( controllerlist->joystick->instance_id == event->jaxis.which )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   157
				{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   158
					if ( controllerlist->mapping.raxes[event->jaxis.axis] >= 0 ) // simple axis to axis, send it through
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   159
					{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   160
						SDL_PrivateGameControllerAxis( controllerlist, controllerlist->mapping.raxes[event->jaxis.axis], event->jaxis.value );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   161
					}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   162
					else if ( controllerlist->mapping.raxesasbutton[event->jaxis.axis] >= 0 ) // simlate an axis as a button
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   163
					{
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   164
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.raxesasbutton[event->jaxis.axis], ABS(event->jaxis.value) > 32768/2 ? SDL_PRESSED : SDL_RELEASED );
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   165
					}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   166
					break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   167
				}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   168
				controllerlist = controllerlist->next;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   169
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   170
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   171
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   172
	case SDL_JOYBUTTONDOWN:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   173
	case SDL_JOYBUTTONUP:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   174
		{
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   175
			SDL_GameController *controllerlist;
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   176
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   177
			if ( event->jbutton.button >= k_nMaxReverseEntries ) break;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   178
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   179
			controllerlist = SDL_gamecontrollers;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   180
			while ( controllerlist )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   181
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   182
				if ( controllerlist->joystick->instance_id == event->jbutton.which )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   183
				{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   184
					if ( controllerlist->mapping.rbuttons[event->jbutton.button] >= 0 ) // simple button as button
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   185
					{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   186
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rbuttons[event->jbutton.button], event->jbutton.state );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   187
					}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   188
					else if ( controllerlist->mapping.rbuttonasaxis[event->jbutton.button] >= 0 ) // an button pretending to be an axis
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   189
					{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   190
						SDL_PrivateGameControllerAxis( controllerlist, controllerlist->mapping.rbuttonasaxis[event->jbutton.button], event->jbutton.state > 0 ? 32768 : 0 );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   191
					}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   192
					break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   193
				}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   194
				controllerlist = controllerlist->next;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   195
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   196
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   197
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   198
	case SDL_JOYHATMOTION:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   199
		{
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   200
			SDL_GameController *controllerlist;
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   201
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   202
			if ( event->jhat.hat >= 4 ) break;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   203
6850
ad3416a14319 Fixed C variable declarations
Sam Lantinga <slouken@libsdl.org>
parents: 6847
diff changeset
   204
			controllerlist = SDL_gamecontrollers;
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   205
			while ( controllerlist )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   206
			{
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   207
				if ( controllerlist->joystick->instance_id == event->jhat.which )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   208
				{
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   209
					Uint8 bSame = controllerlist->hatState[event->jhat.hat] & event->jhat.value;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   210
					// Get list of removed bits (button release)
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   211
					Uint8 bChanged = controllerlist->hatState[event->jhat.hat] ^ bSame;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   212
					// the hat idx in the high nibble
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   213
					int bHighHat = event->jhat.hat << 4;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   214
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   215
					if ( bChanged & SDL_HAT_DOWN )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   216
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_RELEASED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   217
					if ( bChanged & SDL_HAT_UP )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   218
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_RELEASED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   219
					if ( bChanged & SDL_HAT_LEFT )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   220
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_RELEASED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   221
					if ( bChanged & SDL_HAT_RIGHT )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   222
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_RELEASED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   223
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   224
					// Get list of added bits (button press)
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   225
					bChanged = event->jhat.value ^ bSame;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   226
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   227
					if ( bChanged & SDL_HAT_DOWN )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   228
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_PRESSED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   229
					if ( bChanged & SDL_HAT_UP )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   230
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_PRESSED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   231
					if ( bChanged & SDL_HAT_LEFT )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   232
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_PRESSED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   233
					if ( bChanged & SDL_HAT_RIGHT )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   234
						SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_PRESSED );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   235
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   236
					// update our state cache
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   237
					controllerlist->hatState[event->jhat.hat] = event->jhat.value;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   238
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   239
					break;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   240
				}
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   241
				controllerlist = controllerlist->next;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   242
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   243
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   244
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   245
	case SDL_JOYDEVICEADDED:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   246
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   247
			if ( SDL_IsGameController(event->jdevice.which ) )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   248
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   249
				SDL_Event deviceevent;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   250
				deviceevent.type = SDL_CONTROLLERDEVICEADDED;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   251
				deviceevent.cdevice.which = event->jdevice.which;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   252
				SDL_PushEvent(&deviceevent);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   253
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   254
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   255
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   256
	case SDL_JOYDEVICEREMOVED:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   257
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   258
			SDL_GameController *controllerlist = SDL_gamecontrollers;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   259
			while ( controllerlist )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   260
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   261
				if ( controllerlist->joystick->instance_id == event->jdevice.which )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   262
				{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   263
					SDL_Event deviceevent;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   264
					deviceevent.type = SDL_CONTROLLERDEVICEREMOVED;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   265
					deviceevent.cdevice.which = event->jdevice.which;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   266
					SDL_PushEvent(&deviceevent);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   267
					break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   268
				}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   269
				controllerlist = controllerlist->next;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   270
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   271
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   272
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   273
	default:
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   274
		break;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   275
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   276
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   277
	return 1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   278
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   279
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   280
/*
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   281
 * Helper function to scan the mappings database for a controller with the specified GUID
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   282
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   283
ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *guid)
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   284
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   285
	ControllerMapping_t *pSupportedController = s_pSupportedControllers;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   286
	while ( pSupportedController )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   287
	{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   288
		if ( !SDL_memcmp( guid, &pSupportedController->guid, sizeof(*guid) ) )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   289
		{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   290
			return pSupportedController;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   291
		}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   292
		pSupportedController = pSupportedController->next;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   293
	}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   294
        return NULL;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   295
    }
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   296
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   297
/*
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   298
 * Helper function to determine pre-caclulated offset to certain joystick mappings
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   299
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   300
ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   301
{
6701
91160c9b35da The XInput code is only available in the DirectInput joystick driver.
Sam Lantinga <slouken@libsdl.org>
parents: 6690
diff changeset
   302
#ifdef SDL_JOYSTICK_DINPUT
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   303
	if ( SDL_SYS_IsXInputDeviceIndex(device_index) && s_pXInputMapping )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   304
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   305
		return s_pXInputMapping;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   306
	}
6841
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   307
	else
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   308
#endif
6841
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   309
	{
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   310
		SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index );
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   311
		return SDL_PrivateGetControllerMappingForGUID(&jGUID);
6841
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   312
	}
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   313
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   314
	return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   315
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   316
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   317
static const char* map_StringForControllerAxis[] = {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   318
    "leftx",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   319
    "lefty",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   320
    "rightx",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   321
    "righty",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   322
    "lefttrigger",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   323
    "righttrigger",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   324
    NULL
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   325
};
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   326
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   327
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   328
 * convert a string to its enum equivalent
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   329
 */
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   330
SDL_GameControllerAxis SDL_GameControllerGetAxisFromString( const char *pchString )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   331
{
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   332
    int entry;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   333
	if ( !pchString || !pchString[0] )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   334
		return SDL_CONTROLLER_AXIS_INVALID;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   335
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   336
    for ( entry = 0; map_StringForControllerAxis[entry]; ++entry)
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   337
    {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   338
        if ( !SDL_strcasecmp( pchString, map_StringForControllerAxis[entry] ) )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   339
            return entry;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   340
    }
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   341
		return SDL_CONTROLLER_AXIS_INVALID;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   342
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   343
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   344
/*
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   345
 * convert an enum to its string equivalent
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   346
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   347
const char* SDL_GameControllerGetStringForAxis( SDL_GameControllerAxis axis )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   348
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   349
    if (axis > SDL_CONTROLLER_AXIS_INVALID && axis < SDL_CONTROLLER_AXIS_MAX)
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   350
    {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   351
        return map_StringForControllerAxis[axis];
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   352
    }
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   353
    return NULL;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   354
}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   355
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   356
static const char* map_StringForControllerButton[] = {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   357
    "a",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   358
    "b",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   359
    "x",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   360
    "y",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   361
    "back",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   362
    "guide",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   363
    "start",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   364
    "leftstick",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   365
    "rightstick",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   366
    "leftshoulder",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   367
    "rightshoulder",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   368
    "dpup",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   369
    "dpdown",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   370
    "dpleft",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   371
    "dpright",
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   372
    NULL
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   373
};
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   374
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   375
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   376
 * convert a string to its enum equivalent
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   377
 */
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   378
SDL_GameControllerButton SDL_GameControllerGetButtonFromString( const char *pchString )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   379
{
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   380
    int entry;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   381
	if ( !pchString || !pchString[0] )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   382
		return SDL_CONTROLLER_BUTTON_INVALID;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   383
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   384
    for ( entry = 0; map_StringForControllerButton[entry]; ++entry)
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   385
	{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   386
		if ( !SDL_strcasecmp( pchString, map_StringForControllerButton[entry] ) )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   387
		return entry;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   388
	}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   389
	return SDL_CONTROLLER_BUTTON_INVALID;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   390
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   391
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   392
/*
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   393
 * convert an enum to its string equivalent
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   394
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   395
const char* SDL_GameControllerGetStringForButton( SDL_GameControllerButton axis )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   396
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   397
    if (axis > SDL_CONTROLLER_BUTTON_INVALID && axis < SDL_CONTROLLER_BUTTON_MAX)
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   398
    {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   399
        return map_StringForControllerButton[axis];
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   400
    }
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   401
    return NULL;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   402
}
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   403
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   404
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   405
 * given a controller button name and a joystick name update our mapping structure with it
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   406
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   407
void SDL_PrivateGameControllerParseButton( const char *szGameButton, const char *szJoystickButton, struct _SDL_ControllerMapping *pMapping )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   408
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   409
	int iSDLButton = 0;
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   410
	SDL_GameControllerButton button;
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   411
	SDL_GameControllerAxis axis;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   412
	button = SDL_GameControllerGetButtonFromString( szGameButton );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   413
	axis = SDL_GameControllerGetAxisFromString( szGameButton );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   414
	iSDLButton = SDL_atoi( &szJoystickButton[1] );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   415
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   416
	if ( szJoystickButton[0] == 'a' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   417
	{
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   418
		if ( iSDLButton >= k_nMaxReverseEntries )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   419
		{
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   420
			SDL_SetError("Axis index too large: %d", iSDLButton );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   421
			return;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   422
		}
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   423
		if ( axis != SDL_CONTROLLER_AXIS_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   424
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   425
			pMapping->axes[ axis ] = iSDLButton;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   426
			pMapping->raxes[ iSDLButton ] = axis;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   427
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   428
		else if ( button != SDL_CONTROLLER_BUTTON_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   429
		{
6842
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
   430
			pMapping->axesasbutton[ button ] = iSDLButton;
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
   431
			pMapping->raxesasbutton[ iSDLButton ] = button;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   432
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   433
		else
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   434
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   435
			SDL_assert( !"How did we get here?" );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   436
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   437
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   438
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   439
	else if ( szJoystickButton[0] == 'b' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   440
	{
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   441
		if ( iSDLButton >= k_nMaxReverseEntries )
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   442
		{
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   443
			SDL_SetError("Button index too large: %d", iSDLButton );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   444
			return;
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   445
		}
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   446
		if ( button != SDL_CONTROLLER_BUTTON_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   447
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   448
			pMapping->buttons[ button ] = iSDLButton;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   449
			pMapping->rbuttons[ iSDLButton ] = button;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   450
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   451
		else if ( axis != SDL_CONTROLLER_AXIS_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   452
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   453
			pMapping->buttonasaxis[ axis ] = iSDLButton;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   454
			pMapping->rbuttonasaxis[ iSDLButton ] = axis;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   455
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   456
		else
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   457
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   458
			SDL_assert( !"How did we get here?" );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   459
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   460
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   461
	else if ( szJoystickButton[0] == 'h' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   462
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   463
		int hat = SDL_atoi( &szJoystickButton[1] );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   464
		int mask = SDL_atoi( &szJoystickButton[3] );
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   465
		if (hat >= 4) {
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   466
			SDL_SetError("Hat index too large: %d", iSDLButton );
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   467
		}
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   468
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   469
		if ( button != SDL_CONTROLLER_BUTTON_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   470
		{
6854
7b1d78036e84 Hopefully fixed the last of the C variable declaration problems which caused compile failures with Visual Studio.
Sam Lantinga <slouken@libsdl.org>
parents: 6850
diff changeset
   471
            int ridx;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   472
			pMapping->hatasbutton[ button ].hat = hat;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   473
			pMapping->hatasbutton[ button ].mask = mask;
6854
7b1d78036e84 Hopefully fixed the last of the C variable declaration problems which caused compile failures with Visual Studio.
Sam Lantinga <slouken@libsdl.org>
parents: 6850
diff changeset
   474
			ridx = (hat << 4) | mask;
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   475
			pMapping->rhatasbutton[ ridx ] = button;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   476
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   477
		else if ( axis != SDL_CONTROLLER_AXIS_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   478
		{
6913
7e9c4d29e668 Fixed a minor typo.
Ryan C. Gordon <icculus@icculus.org>
parents: 6912
diff changeset
   479
			SDL_assert( !"Support hat as axis" );
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   480
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   481
		else
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   482
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   483
			SDL_assert( !"How did we get here?" );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   484
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   485
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   486
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   487
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   488
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   489
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   490
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   491
 * given a controller mapping string update our mapping object
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   492
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   493
static void
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   494
SDL_PrivateGameControllerParseControllerConfigString( struct _SDL_ControllerMapping *pMapping, const char *pchString )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   495
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   496
	char szGameButton[20];
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   497
	char szJoystickButton[20];
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   498
	SDL_bool bGameButton = SDL_TRUE;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   499
	int i = 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   500
	const char *pchPos = pchString;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   501
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   502
	SDL_memset( szGameButton, 0x0, sizeof(szGameButton) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   503
	SDL_memset( szJoystickButton, 0x0, sizeof(szJoystickButton) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   504
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   505
	while ( pchPos && *pchPos )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   506
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   507
		if ( *pchPos == ':' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   508
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   509
			i = 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   510
			bGameButton = SDL_FALSE;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   511
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   512
		else if ( *pchPos == ' ' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   513
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   514
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   515
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   516
		else if ( *pchPos == ',' )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   517
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   518
			i = 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   519
			bGameButton = SDL_TRUE;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   520
			SDL_PrivateGameControllerParseButton( szGameButton, szJoystickButton, pMapping );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   521
			SDL_memset( szGameButton, 0x0, sizeof(szGameButton) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   522
			SDL_memset( szJoystickButton, 0x0, sizeof(szJoystickButton) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   523
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   524
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   525
		else if ( bGameButton )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   526
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   527
			if ( i >=  sizeof(szGameButton))
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   528
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   529
				SDL_SetError( "Button name too large: %s", szGameButton );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   530
				return;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   531
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   532
			szGameButton[i] = *pchPos;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   533
			i++;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   534
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   535
		else
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   536
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   537
			if ( i >=  sizeof(szJoystickButton))
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   538
			{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   539
				SDL_SetError( "Joystick button name too large: %s", szJoystickButton );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   540
				return;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   541
			}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   542
			szJoystickButton[i] = *pchPos;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   543
			i++;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   544
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   545
		pchPos++;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   546
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   547
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   548
	SDL_PrivateGameControllerParseButton( szGameButton, szJoystickButton, pMapping );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   549
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   550
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   551
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   552
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   553
 * Make a new button mapping struct
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   554
 */
6738
b408d5a406a3 Changes from Alfred:
Sam Lantinga <slouken@libsdl.org>
parents: 6708
diff changeset
   555
void SDL_PrivateLoadButtonMapping( struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   556
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   557
	int j;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   558
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   559
	pMapping->guid = guid;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   560
	pMapping->name = pchName;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   561
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   562
	// set all the button mappings to non defaults
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   563
	for ( j = 0; j < SDL_CONTROLLER_AXIS_MAX; j++ )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   564
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   565
		pMapping->axes[j] = -1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   566
		pMapping->buttonasaxis[j] = -1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   567
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   568
	for ( j = 0; j < SDL_CONTROLLER_BUTTON_MAX; j++ )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   569
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   570
		pMapping->buttons[j] = -1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   571
		pMapping->axesasbutton[j] = -1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   572
		pMapping->hatasbutton[j].hat = -1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   573
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   574
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   575
	for ( j = 0; j < k_nMaxReverseEntries; j++ )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   576
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   577
		pMapping->raxes[j] = SDL_CONTROLLER_AXIS_INVALID;
6842
6ea07537baa2 tree 0c86a223596d
Sam Lantinga <slouken@libsdl.org>
parents: 6841
diff changeset
   578
		pMapping->rbuttonasaxis[j] = SDL_CONTROLLER_AXIS_INVALID;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   579
		pMapping->rbuttons[j] = SDL_CONTROLLER_BUTTON_INVALID;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   580
		pMapping->raxesasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID;
6843
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   581
	}
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   582
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   583
	for (j = 0; j < k_nMaxHatEntries; j++)
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   584
	{
a52016007a7e tree 97aca305664b
Sam Lantinga <slouken@libsdl.org>
parents: 6842
diff changeset
   585
		pMapping->rhatasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   586
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   587
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   588
	SDL_PrivateGameControllerParseControllerConfigString( pMapping, pchMapping );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   589
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   590
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   591
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   592
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   593
 * grab the guid string from a mapping string
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   594
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   595
char *SDL_PrivateGetControllerGUIDFromMappingString( const char *pMapping )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   596
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   597
	const char *pFirstComma = SDL_strchr( pMapping, ',' );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   598
	if ( pFirstComma )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   599
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   600
		char *pchGUID = SDL_malloc( pFirstComma - pMapping + 1 );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   601
		if ( !pchGUID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   602
		{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   603
			SDL_OutOfMemory();
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   604
			return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   605
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   606
		SDL_memcpy( pchGUID, pMapping, pFirstComma - pMapping );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   607
		pchGUID[ pFirstComma - pMapping ] = 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   608
		return pchGUID;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   609
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   610
	return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   611
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   612
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   613
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   614
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   615
 * grab the name string from a mapping string
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   616
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   617
char *SDL_PrivateGetControllerNameFromMappingString( const char *pMapping )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   618
{
6823
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   619
	const char *pFirstComma, *pSecondComma;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   620
    char *pchName;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   621
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   622
    pFirstComma = SDL_strchr( pMapping, ',' );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   623
    if ( !pFirstComma )
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   624
        return NULL;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   625
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   626
	pSecondComma = SDL_strchr( pFirstComma + 1, ',' );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   627
    if ( !pSecondComma )
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   628
        return NULL;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   629
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   630
    pchName = SDL_malloc( pSecondComma - pFirstComma );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   631
    if ( !pchName )
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   632
    {
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   633
        SDL_OutOfMemory();
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   634
        return NULL;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   635
    }
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   636
    SDL_memcpy( pchName, pFirstComma + 1, pSecondComma - pFirstComma );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   637
    pchName[ pSecondComma - pFirstComma - 1 ] = 0;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   638
    return pchName;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   639
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   640
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   641
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   642
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   643
 * grab the button mapping string from a mapping string
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   644
 */
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   645
char *SDL_PrivateGetControllerMappingFromMappingString( const char *pMapping )
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   646
{
6823
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   647
	const char *pFirstComma, *pSecondComma;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   648
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   649
    pFirstComma = SDL_strchr( pMapping, ',' );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   650
    if ( !pFirstComma )
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   651
        return NULL;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   652
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   653
	pSecondComma = SDL_strchr( pFirstComma + 1, ',' );
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   654
    if ( !pSecondComma )
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   655
        return NULL;
e9d312d26979 Fixed crash when the game controller mapping hint is set - the hint was duplicated and not null terminated.
Sam Lantinga <slouken@libsdl.org>
parents: 6738
diff changeset
   656
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   657
    return SDL_strdup(pSecondComma + 1); /* mapping is everything after the 3rd comma */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   658
}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   659
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   660
void SDL_PrivateGameControllerRefreshMapping( ControllerMapping_t *pControllerMapping )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   661
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   662
    SDL_GameController *gamecontrollerlist = SDL_gamecontrollers;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   663
    while ( gamecontrollerlist )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   664
    {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   665
        if ( !SDL_memcmp( &gamecontrollerlist->mapping.guid, &pControllerMapping->guid, sizeof(pControllerMapping->guid) ) )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   666
        {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   667
            SDL_Event event;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   668
            event.type = SDL_CONTROLLERDEVICEREMAPPED;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   669
            event.cdevice.which = gamecontrollerlist->joystick->instance_id;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   670
            SDL_PushEvent(&event);
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   671
            
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   672
            // Not really threadsafe.  Should this lock access within SDL_GameControllerEventWatcher?
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   673
            SDL_PrivateLoadButtonMapping(&gamecontrollerlist->mapping, pControllerMapping->guid, pControllerMapping->name, pControllerMapping->mapping);
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   674
        }
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   675
        
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   676
        gamecontrollerlist = gamecontrollerlist->next;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   677
    }
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   678
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   679
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   680
/*
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   681
 * Add or update an entry into the Mappings Database
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   682
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   683
int
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   684
SDL_GameControllerAddMapping( const char *mappingString )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   685
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   686
	char *pchGUID;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   687
	char *pchName;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   688
	char *pchMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   689
    SDL_JoystickGUID jGUID;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   690
    ControllerMapping_t *pControllerMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   691
#ifdef SDL_JOYSTICK_DINPUT
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   692
    SDL_bool is_xinput_mapping = SDL_FALSE;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   693
#endif
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   694
6975
36145df5a4dc Fixed read after free bug in the game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6964
diff changeset
   695
    pchGUID = SDL_PrivateGetControllerGUIDFromMappingString( mappingString );
36145df5a4dc Fixed read after free bug in the game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6964
diff changeset
   696
    if (!pchGUID) {
36145df5a4dc Fixed read after free bug in the game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6964
diff changeset
   697
        return -1;
36145df5a4dc Fixed read after free bug in the game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6964
diff changeset
   698
    }
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   699
#ifdef SDL_JOYSTICK_DINPUT
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   700
    if ( !SDL_strcasecmp( pchGUID, "xinput" ) ) {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   701
        is_xinput_mapping = SDL_TRUE;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   702
    }
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   703
#endif
6975
36145df5a4dc Fixed read after free bug in the game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6964
diff changeset
   704
    jGUID = SDL_JoystickGetGUIDFromString(pchGUID);
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   705
    SDL_free(pchGUID);
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   706
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   707
	pControllerMapping = SDL_PrivateGetControllerMappingForGUID(&jGUID);
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   708
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   709
	pchName = SDL_PrivateGetControllerNameFromMappingString( mappingString );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   710
	if (!pchName) return -1;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   711
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   712
	pchMapping = SDL_PrivateGetControllerMappingFromMappingString( mappingString );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   713
	if (!pchMapping) {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   714
		SDL_free( pchName );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   715
		return -1;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   716
	}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   717
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   718
	if (pControllerMapping) {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   719
		// Update existing mapping
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   720
		SDL_free( pControllerMapping->name );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   721
		pControllerMapping->name = pchName;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   722
		SDL_free( pControllerMapping->mapping );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   723
		pControllerMapping->mapping = pchMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   724
		// refresh open controllers
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   725
		SDL_PrivateGameControllerRefreshMapping( pControllerMapping );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   726
		return 0;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   727
	} else {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   728
		pControllerMapping = SDL_malloc( sizeof(*pControllerMapping) );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   729
		if (!pControllerMapping) {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   730
			SDL_free( pchName );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   731
			SDL_free( pchMapping );
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7027
diff changeset
   732
			return SDL_OutOfMemory();
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   733
		}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   734
#ifdef SDL_JOYSTICK_DINPUT
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   735
		if ( is_xinput_mapping )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   736
		{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   737
			s_pXInputMapping = pControllerMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   738
		}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   739
#endif
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   740
		pControllerMapping->guid = jGUID;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   741
		pControllerMapping->name = pchName;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   742
		pControllerMapping->mapping = pchMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   743
		pControllerMapping->next = s_pSupportedControllers;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   744
		s_pSupportedControllers = pControllerMapping;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   745
		return 1;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   746
	}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   747
}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   748
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   749
/*
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   750
 * Get the mapping string for this GUID
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   751
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   752
char *
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   753
SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   754
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   755
	char *pMappingString = NULL;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   756
	ControllerMapping_t *mapping = SDL_PrivateGetControllerMappingForGUID(&guid);
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   757
	if (mapping) {
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   758
		char pchGUID[33];
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   759
        size_t needed;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   760
		SDL_JoystickGetGUIDString(guid, pchGUID, sizeof(pchGUID));
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   761
		// allocate enough memory for GUID + ',' + name + ',' + mapping + \0
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   762
		needed = SDL_strlen(pchGUID) + 1 + SDL_strlen(mapping->name) + 1 + SDL_strlen(mapping->mapping) + 1;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   763
		pMappingString = SDL_malloc( needed );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   764
		SDL_snprintf( pMappingString, needed, "%s,%s,%s", pchGUID, mapping->name, mapping->mapping );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   765
	}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   766
	return pMappingString;
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   767
}
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   768
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   769
/*
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   770
 * Get the mapping string for this device
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   771
 */
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   772
char *
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   773
SDL_GameControllerMapping( SDL_GameController * gamecontroller )
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   774
{
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   775
	return SDL_GameControllerMappingForGUID( gamecontroller->mapping.guid );
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   776
}
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   777
6976
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   778
static void
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   779
SDL_GameControllerLoadHints()
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   780
{
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   781
    const char *hint = SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG);
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   782
    if ( hint && hint[0] ) {
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   783
        int nchHints = SDL_strlen( hint );
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   784
        char *pUserMappings = SDL_malloc( nchHints + 1 );
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   785
        char *pTempMappings = pUserMappings;
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   786
        SDL_memcpy( pUserMappings, hint, nchHints );
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   787
        while ( pUserMappings ) {
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   788
            char *pchNewLine = NULL;
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   789
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   790
            pchNewLine = SDL_strchr( pUserMappings, '\n' );
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   791
            if ( pchNewLine )
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   792
                *pchNewLine = '\0';
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   793
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   794
            SDL_GameControllerAddMapping( pUserMappings );
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   795
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   796
            if ( pchNewLine )
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   797
                pUserMappings = pchNewLine + 1;
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   798
            else
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   799
                pUserMappings = NULL;
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   800
        }
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   801
        SDL_free(pTempMappings);
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   802
    }
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   803
}
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   804
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   805
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   806
 * Initialize the game controller system, mostly load our DB of controller config mappings
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   807
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   808
int
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   809
SDL_GameControllerInit(void)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   810
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   811
	int i = 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   812
	const char *pMappingString = NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   813
	s_pSupportedControllers = NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   814
	pMappingString = s_ControllerMappings[i];
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   815
	while ( pMappingString )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   816
	{
6964
c8aa24f05042 add new gamecontroller APIs
Edward Rudd <urkle@outoforder.cc>
parents: 6932
diff changeset
   817
		SDL_GameControllerAddMapping( pMappingString );
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   818
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   819
		i++;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   820
		pMappingString = s_ControllerMappings[i];
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   821
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   822
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   823
	// load in any user supplied config
6976
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   824
    SDL_GameControllerLoadHints();
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   825
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   826
	/* watch for joy events and fire controller ones if needed */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   827
	SDL_AddEventWatch( SDL_GameControllerEventWatcher, NULL );
6976
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   828
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   829
	return (0);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   830
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   831
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   832
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   833
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   834
 * Get the implementation dependent name of a controller
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   835
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   836
const char *
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   837
SDL_GameControllerNameForIndex(int device_index)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   838
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   839
	ControllerMapping_t *pSupportedController =  SDL_PrivateGetControllerMapping(device_index);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   840
	if ( pSupportedController )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   841
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   842
		return pSupportedController->name;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   843
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   844
    return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   845
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   846
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   847
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   848
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   849
 * Return 1 if the joystick at this device index is a supported controller
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   850
 */
6871
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
   851
SDL_bool
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
   852
SDL_IsGameController(int device_index)
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   853
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   854
	ControllerMapping_t *pSupportedController =  SDL_PrivateGetControllerMapping(device_index);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   855
	if ( pSupportedController )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   856
	{
6871
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
   857
		return SDL_TRUE;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   858
	}
6871
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
   859
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
   860
	return SDL_FALSE;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   861
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   862
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   863
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   864
 * Open a controller for use - the index passed as an argument refers to
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   865
 * the N'th controller on the system.  This index is the value which will
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   866
 * identify this controller in future controller events.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   867
 *
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   868
 * This function returns a controller identifier, or NULL if an error occurred.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   869
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   870
SDL_GameController *
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   871
SDL_GameControllerOpen(int device_index)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   872
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   873
    SDL_GameController *gamecontroller;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   874
	SDL_GameController *gamecontrollerlist;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   875
	ControllerMapping_t *pSupportedController = NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   876
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   877
    if ((device_index < 0) || (device_index >= SDL_NumJoysticks())) {
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   878
        SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   879
        return (NULL);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   880
    }
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   881
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   882
	gamecontrollerlist = SDL_gamecontrollers;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   883
    // If the controller is already open, return it 
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   884
	while ( gamecontrollerlist )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   885
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   886
		if ( SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == gamecontrollerlist->joystick->instance_id ) {
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   887
				gamecontroller = gamecontrollerlist;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   888
				++gamecontroller->ref_count;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   889
				return (gamecontroller);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   890
		}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   891
		gamecontrollerlist = gamecontrollerlist->next;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   892
    }
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   893
6976
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   894
	// Find a controller mapping 
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   895
	pSupportedController =  SDL_PrivateGetControllerMapping(device_index);
6976
177d1dc3dba6 Load the game controller mapping hint when opening a game controller.
Sam Lantinga <slouken@libsdl.org>
parents: 6975
diff changeset
   896
	if ( !pSupportedController ) {
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   897
		SDL_SetError("Couldn't find mapping for device (%d)", device_index );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   898
		return (NULL);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   899
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   900
6841
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   901
	// Create and initialize the joystick 
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   902
	gamecontroller = (SDL_GameController *) SDL_malloc((sizeof *gamecontroller));
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   903
	if (gamecontroller == NULL) {
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   904
		SDL_OutOfMemory();
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   905
		return NULL;
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   906
	}
90bba8d8e42a tree 8cbca1e6b293
Sam Lantinga <slouken@libsdl.org>
parents: 6823
diff changeset
   907
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   908
    SDL_memset(gamecontroller, 0, (sizeof *gamecontroller));
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   909
    gamecontroller->joystick = SDL_JoystickOpen(device_index);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   910
	if ( !gamecontroller->joystick ) {
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   911
        SDL_free(gamecontroller);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   912
        return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   913
    }
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   914
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   915
	SDL_PrivateLoadButtonMapping( &gamecontroller->mapping, pSupportedController->guid, pSupportedController->name, pSupportedController->mapping );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   916
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   917
    // Add joystick to list 
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   918
    ++gamecontroller->ref_count;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   919
	// Link the joystick in the list 
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   920
	gamecontroller->next = SDL_gamecontrollers;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   921
	SDL_gamecontrollers = gamecontroller;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   922
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   923
	SDL_SYS_JoystickUpdate( gamecontroller->joystick );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   924
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   925
    return (gamecontroller);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   926
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   927
6919
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   928
/*
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   929
 * Manually pump for controller updates.
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   930
 */
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   931
void
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   932
SDL_GameControllerUpdate(void)
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   933
{
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   934
    /* Just for API completeness; the joystick API does all the work. */
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   935
    SDL_JoystickUpdate();
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   936
}
c9c75d062fa8 Added SDL_GameControllerUpdate().
Ryan C. Gordon <icculus@icculus.org>
parents: 6917
diff changeset
   937
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   938
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   939
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   940
 * Get the current state of an axis control on a controller
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   941
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   942
Sint16
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   943
SDL_GameControllerGetAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis)
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   944
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   945
	if ( !gamecontroller )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   946
		return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   947
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   948
	if (gamecontroller->mapping.axes[axis] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   949
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   950
		return ( SDL_JoystickGetAxis( gamecontroller->joystick, gamecontroller->mapping.axes[axis]) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   951
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   952
	else if (gamecontroller->mapping.buttonasaxis[axis] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   953
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   954
		Uint8 value;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   955
		value = SDL_JoystickGetButton( gamecontroller->joystick, gamecontroller->mapping.buttonasaxis[axis] );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   956
		if ( value > 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   957
			return 32767;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   958
		return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   959
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   960
	return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   961
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   962
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   963
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   964
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   965
 * Get the current state of a button on a controller
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   966
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   967
Uint8
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
   968
SDL_GameControllerGetButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button)
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   969
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   970
	if ( !gamecontroller )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   971
		return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   972
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   973
	if ( gamecontroller->mapping.buttons[button] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   974
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   975
		return ( SDL_JoystickGetButton( gamecontroller->joystick, gamecontroller->mapping.buttons[button] ) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   976
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   977
	else if ( gamecontroller->mapping.axesasbutton[button] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   978
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   979
		Sint16 value;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   980
		value = SDL_JoystickGetAxis( gamecontroller->joystick, gamecontroller->mapping.axesasbutton[button] );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   981
		if ( ABS(value) > 32768/2 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   982
			return 1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   983
		return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   984
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   985
	else if ( gamecontroller->mapping.hatasbutton[button].hat >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   986
	{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   987
		Uint8 value;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   988
		value = SDL_JoystickGetHat( gamecontroller->joystick, gamecontroller->mapping.hatasbutton[button].hat );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   989
		
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   990
		if ( value & gamecontroller->mapping.hatasbutton[button].mask )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   991
			return 1;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   992
		return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   993
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   994
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   995
	return 0;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   996
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   997
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   998
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   999
 * Return if the joystick in question is currently attached to the system,
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1000
 *  \return 0 if not plugged in, 1 if still present.
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1001
 */
6871
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
  1002
SDL_bool
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1003
SDL_GameControllerGetAttached( SDL_GameController * gamecontroller )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1004
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1005
	if ( !gamecontroller )
6871
bd681c870ccf Check bounds in SDL_IsGameController. Switch two functions to SDL_bool.
Jørgen P. Tjernø <jorgen@valvesoftware.com>
parents: 6854
diff changeset
  1006
		return SDL_FALSE;
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1007
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1008
	return SDL_JoystickGetAttached(gamecontroller->joystick);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1009
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1010
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1011
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1012
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1013
 * Get the number of multi-dimensional axis controls on a joystick
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1014
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1015
const char *
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1016
SDL_GameControllerName(SDL_GameController * gamecontroller)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1017
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1018
	if ( !gamecontroller )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1019
		return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1020
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1021
    return (gamecontroller->mapping.name);
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1022
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1023
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1024
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1025
/*
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1026
 * Get the joystick for this controller
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1027
 */
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1028
SDL_Joystick *SDL_GameControllerGetJoystick(SDL_GameController * gamecontroller)
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1029
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1030
	if ( !gamecontroller )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1031
		return NULL;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1032
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1033
	return gamecontroller->joystick;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1034
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1035
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1036
/**
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1037
 *  get the sdl joystick layer binding for this controller axi mapping
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1038
 */
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
  1039
SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis)
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1040
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1041
	SDL_GameControllerButtonBind bind;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1042
	SDL_memset( &bind, 0x0, sizeof(bind) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1043
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1044
	if ( !gamecontroller || axis == SDL_CONTROLLER_AXIS_INVALID )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1045
		return bind;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1046
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1047
	if (gamecontroller->mapping.axes[axis] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1048
	{
6932
361bebe92c66 Fixed gcc pedantic warnings in public headers
Sam Lantinga <slouken@libsdl.org>
parents: 6919
diff changeset
  1049
		bind.bindType = SDL_CONTROLLER_BINDTYPE_AXIS;
361bebe92c66 Fixed gcc pedantic warnings in public headers
Sam Lantinga <slouken@libsdl.org>
parents: 6919
diff changeset
  1050
		bind.value.button = gamecontroller->mapping.axes[axis];
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1051
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1052
	else if (gamecontroller->mapping.buttonasaxis[axis] >= 0 )
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1053
	{
6932
361bebe92c66 Fixed gcc pedantic warnings in public headers
Sam Lantinga <slouken@libsdl.org>
parents: 6919
diff changeset
  1054
		bind.bindType = SDL_CONTROLLER_BINDTYPE_BUTTON;
361bebe92c66 Fixed gcc pedantic warnings in public headers
Sam Lantinga <slouken@libsdl.org>
parents: 6919
diff changeset
  1055
		bind.value.button = gamecontroller->mapping.buttonasaxis[axis];
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1056
	}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1057
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1058
	return bind;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1059
}
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1060
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1061
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1062
/**
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1063
 *  get the sdl joystick layer binding for this controller button mapping
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1064
 */
6917
47dc155b774d Changed the game controller enum types to match SDL naming conventions.
Ryan C. Gordon <icculus@icculus.org>
parents: 6915
diff changeset
  1065
SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button)
6690
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1066
{
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1067
	SDL_GameControllerButtonBind bind;
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
  1068
	SDL_memset( &bind, 0x0, sizeof(bind) );
9548c8a58103 Added hotplug joystick support and simplified game controller API, courtesy of Alfred Reynolds
Sam Lantinga <slouken@libsdl.org>
parents:
diff