Added SDL_GameControllerMappingForDeviceIndex() to get the mapping for a controller before it's opened
parent
9e651b6915
commit
a8ac588549
|
@ -1,6 +1,14 @@
|
||||||
|
|
||||||
This is a list of major changes in SDL's version history.
|
This is a list of major changes in SDL's version history.
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.9:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* Added SDL_GameControllerMappingForDeviceIndex() to get the mapping for a controller before it's opened
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
2.0.8:
|
2.0.8:
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
|
@ -175,6 +175,14 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index);
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index);
|
extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mapping of a game controller.
|
||||||
|
* This can be called before any controllers are opened.
|
||||||
|
*
|
||||||
|
* \return the mapping string. Must be freed with SDL_free(). Returns NULL if no mapping is available
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open a game controller for use.
|
* Open a game controller for use.
|
||||||
* The index passed as an argument refers to the N'th game controller on the system.
|
* The index passed as an argument refers to the N'th game controller on the system.
|
||||||
|
|
|
@ -669,3 +669,4 @@
|
||||||
#define SDL_WinRTGetDeviceFamily SDL_WinRTGetDeviceFamily_REAL
|
#define SDL_WinRTGetDeviceFamily SDL_WinRTGetDeviceFamily_REAL
|
||||||
#define SDL_log10 SDL_log10_REAL
|
#define SDL_log10 SDL_log10_REAL
|
||||||
#define SDL_log10f SDL_log10f_REAL
|
#define SDL_log10f SDL_log10f_REAL
|
||||||
|
#define SDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex_REAL
|
||||||
|
|
|
@ -707,3 +707,4 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_IsAndroidTV,(void),(),return)
|
||||||
#endif
|
#endif
|
||||||
SDL_DYNAPI_PROC(double,SDL_log10,(double a),(a),return)
|
SDL_DYNAPI_PROC(double,SDL_log10,(double a),(a),return)
|
||||||
SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
|
SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
|
||||||
|
SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForDeviceIndex,(int a),(a),return)
|
||||||
|
|
|
@ -425,6 +425,12 @@ static ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickG
|
||||||
}
|
}
|
||||||
pSupportedController = pSupportedController->next;
|
pSupportedController = pSupportedController->next;
|
||||||
}
|
}
|
||||||
|
#if SDL_JOYSTICK_XINPUT
|
||||||
|
if (guid->data[14] == 'x') {
|
||||||
|
/* This is an XInput device */
|
||||||
|
return s_pXInputMapping;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1033,11 +1039,6 @@ static ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index)
|
||||||
name = SDL_JoystickNameForIndex(device_index);
|
name = SDL_JoystickNameForIndex(device_index);
|
||||||
guid = SDL_JoystickGetDeviceGUID(device_index);
|
guid = SDL_JoystickGetDeviceGUID(device_index);
|
||||||
mapping = SDL_PrivateGetControllerMappingForNameAndGUID(name, guid);
|
mapping = SDL_PrivateGetControllerMappingForNameAndGUID(name, guid);
|
||||||
#if SDL_JOYSTICK_XINPUT
|
|
||||||
if (!mapping && SDL_SYS_IsXInputGamepad_DeviceIndex(device_index)) {
|
|
||||||
mapping = s_pXInputMapping;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
SDL_UnlockJoysticks();
|
SDL_UnlockJoysticks();
|
||||||
return mapping;
|
return mapping;
|
||||||
}
|
}
|
||||||
|
@ -1374,6 +1375,40 @@ SDL_GameControllerNameForIndex(int device_index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mapping of a game controller.
|
||||||
|
* This can be called before any controllers are opened.
|
||||||
|
* If no mapping can be found, this function returns NULL.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
SDL_GameControllerMappingForDeviceIndex(int joystick_index)
|
||||||
|
{
|
||||||
|
char *pMappingString = NULL;
|
||||||
|
ControllerMapping_t *mapping;
|
||||||
|
|
||||||
|
SDL_LockJoysticks();
|
||||||
|
mapping = SDL_PrivateGetControllerMapping(joystick_index);
|
||||||
|
if (mapping) {
|
||||||
|
SDL_JoystickGUID guid;
|
||||||
|
char pchGUID[33];
|
||||||
|
size_t needed;
|
||||||
|
guid = SDL_JoystickGetDeviceGUID(joystick_index);
|
||||||
|
SDL_JoystickGetGUIDString(guid, pchGUID, sizeof(pchGUID));
|
||||||
|
/* allocate enough memory for GUID + ',' + name + ',' + mapping + \0 */
|
||||||
|
needed = SDL_strlen(pchGUID) + 1 + SDL_strlen(mapping->name) + 1 + SDL_strlen(mapping->mapping) + 1;
|
||||||
|
pMappingString = SDL_malloc(needed);
|
||||||
|
if (!pMappingString) {
|
||||||
|
SDL_OutOfMemory();
|
||||||
|
SDL_UnlockJoysticks();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
SDL_snprintf(pMappingString, needed, "%s,%s,%s", pchGUID, mapping->name, mapping->mapping);
|
||||||
|
}
|
||||||
|
SDL_UnlockJoysticks();
|
||||||
|
return pMappingString;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return 1 if the joystick with this name and GUID is a supported controller
|
* Return 1 if the joystick with this name and GUID is a supported controller
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -121,11 +121,6 @@ extern SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int device_index);
|
||||||
/* Function to return the stable GUID for a opened joystick */
|
/* Function to return the stable GUID for a opened joystick */
|
||||||
extern SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick);
|
extern SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick);
|
||||||
|
|
||||||
#if SDL_JOYSTICK_XINPUT
|
|
||||||
/* Function returns SDL_TRUE if this device is an XInput gamepad */
|
|
||||||
extern SDL_bool SDL_SYS_IsXInputGamepad_DeviceIndex(int device_index);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* SDL_sysjoystick_h_ */
|
#endif /* SDL_sysjoystick_h_ */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -464,18 +464,6 @@ SDL_XINPUT_JoystickQuit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool
|
|
||||||
SDL_SYS_IsXInputGamepad_DeviceIndex(int device_index)
|
|
||||||
{
|
|
||||||
JoyStick_DeviceData *device = SYS_Joystick;
|
|
||||||
int index;
|
|
||||||
|
|
||||||
for (index = device_index; index > 0; index--)
|
|
||||||
device = device->pNext;
|
|
||||||
|
|
||||||
return device->bXInputDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* !SDL_JOYSTICK_XINPUT */
|
#else /* !SDL_JOYSTICK_XINPUT */
|
||||||
|
|
||||||
typedef struct JoyStick_DeviceData JoyStick_DeviceData;
|
typedef struct JoyStick_DeviceData JoyStick_DeviceData;
|
||||||
|
|
Loading…
Reference in New Issue