Browse Source

Actually we need to enumerate the 8BitDo Xbox SKUs

At the point we're calling SDL_IsJoystickXboxSeriesX(), we don't know for sure that the controller is an Xbox controller.

Fixes https://github.com/libsdl-org/SDL/issues/8174

(cherry picked from commit 15bc12165ab56e6fbf93b8f3d18f2a0bb5854d8c)
Sam Lantinga 1 year ago
parent
commit
af7fe2cf9b
2 changed files with 6 additions and 7 deletions
  1. 4 7
      src/joystick/SDL_joystick.c
  2. 2 0
      src/joystick/usb_ids.h

+ 4 - 7
src/joystick/SDL_joystick.c

@@ -2346,13 +2346,10 @@ SDL_bool SDL_IsJoystickXboxSeriesX(Uint16 vendor_id, Uint16 product_id)
         }
     }
     if (vendor_id == USB_VENDOR_8BITDO) {
-        /* 8BitDo started making Xbox form factor controllers after the Series X
-         * release, so we'll assume for now that they all have the share button.
-         *
-         * We know for sure that the Ultimate Wired Controller for Xbox (0x2002)
-         * and the Ultimate Wireless / Pro 2 Wired Controller (0x3106) have them.
-         */
-        return SDL_TRUE;
+        if (product_id == USB_PRODUCT_8BITDO_XBOX_CONTROLLER1 ||
+            product_id == USB_PRODUCT_8BITDO_XBOX_CONTROLLER2) {
+            return SDL_TRUE;
+        }
     }
     return SDL_FALSE;
 }

+ 2 - 0
src/joystick/usb_ids.h

@@ -52,6 +52,8 @@
 #define USB_VENDOR_VALVE        0x28de
 #define USB_VENDOR_ZEROPLUS     0x0c12
 
+#define USB_PRODUCT_8BITDO_XBOX_CONTROLLER1               0x2002 /* Ultimate Wired Controller for Xbox */
+#define USB_PRODUCT_8BITDO_XBOX_CONTROLLER2               0x3106 /* Ultimate Wireless / Pro 2 Wired Controller */
 #define USB_PRODUCT_AMAZON_LUNA_CONTROLLER                0x0419
 #define USB_PRODUCT_ASTRO_C40_XBOX360                     0x0024
 #define USB_PRODUCT_BACKBONE_ONE_IOS                      0x0103