Skip to content

Commit

Permalink
Don't add paddle mappings for the Xbox One Elite Series 1 controller,…
Browse files Browse the repository at this point in the history
… since they can't be unmapped and read directly on that controller.
  • Loading branch information
slouken committed Jan 24, 2021
1 parent d789ba8 commit 178ae70
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/joystick/SDL_gamecontroller.c
Expand Up @@ -584,8 +584,11 @@ static ControllerMapping_t *SDL_CreateMappingForHIDAPIController(SDL_JoystickGUI
if (SDL_IsJoystickXboxOneSeriesX(vendor, product)) {
/* XBox One Series X Controllers have a share button under the guide button */
SDL_strlcat(mapping_string, "misc1:b15,", sizeof(mapping_string));
} else if (SDL_IsJoystickXboxOneElite(vendor, product)) {
/* XBox One Elite Controllers have 4 back paddle buttons */
} else if (SDL_IsJoystickXboxOneElite(vendor, product) &&
!SDL_IsJoystickXboxOneEliteSeries1(vendor, product)) {
/* XBox One Elite Controllers have 4 back paddle buttons
* The Series 1 controller has paddles but they can't be unmapped
*/
SDL_strlcat(mapping_string, "paddle1:b15,paddle2:b17,paddle3:b16,paddle4:b18,", sizeof(mapping_string));
} else if (SDL_IsJoystickSteamController(vendor, product)) {
/* Steam controllers have 2 back paddle buttons */
Expand Down
23 changes: 23 additions & 0 deletions src/joystick/SDL_joystick.c
Expand Up @@ -1902,6 +1902,29 @@ SDL_IsJoystickXboxOneElite(Uint16 vendor_id, Uint16 product_id)
return SDL_FALSE;
}

SDL_bool
SDL_IsJoystickXboxOneEliteSeries1(Uint16 vendor_id, Uint16 product_id)
{
if (vendor_id == USB_VENDOR_MICROSOFT) {
if (product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_1) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}

SDL_bool
SDL_IsJoystickXboxOneEliteSeries2(Uint16 vendor_id, Uint16 product_id)
{
if (vendor_id == USB_VENDOR_MICROSOFT) {
if (product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2 ||
product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2_BLUETOOTH) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}

SDL_bool
SDL_IsJoystickXboxOneSeriesX(Uint16 vendor_id, Uint16 product_id)
{
Expand Down
2 changes: 2 additions & 0 deletions src/joystick/SDL_joystick_c.h
Expand Up @@ -64,6 +64,8 @@ extern SDL_GameControllerType SDL_GetJoystickGameControllerType(const char *name

/* Function to return whether a joystick is an Xbox One Elite controller */
extern SDL_bool SDL_IsJoystickXboxOneElite(Uint16 vendor_id, Uint16 product_id);
extern SDL_bool SDL_IsJoystickXboxOneEliteSeries1(Uint16 vendor_id, Uint16 product_id);
extern SDL_bool SDL_IsJoystickXboxOneEliteSeries2(Uint16 vendor_id, Uint16 product_id);

/* Function to return whether a joystick is an Xbox One Series X controller */
extern SDL_bool SDL_IsJoystickXboxOneSeriesX(Uint16 vendor_id, Uint16 product_id);
Expand Down

0 comments on commit 178ae70

Please sign in to comment.