diff --git a/src/joystick/SDL_gamecontroller.c b/src/joystick/SDL_gamecontroller.c index 377803e39..e67bd57a6 100644 --- a/src/joystick/SDL_gamecontroller.c +++ b/src/joystick/SDL_gamecontroller.c @@ -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 */ diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index d70c77908..7502ad178 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -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) { diff --git a/src/joystick/SDL_joystick_c.h b/src/joystick/SDL_joystick_c.h index b99ffb80c..5988364ba 100644 --- a/src/joystick/SDL_joystick_c.h +++ b/src/joystick/SDL_joystick_c.h @@ -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);