Commit 1af31a26d180e8c92610f2abd90e8581f59cf4e5

Sam Lantinga 2020-02-27T13:53:32

Fixed trying to handle the HORI Wireless Switch Pad when connected via USB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c
index 29a05bf..302d89c 100644
--- a/src/joystick/hidapi/SDL_hidapi_switch.c
+++ b/src/joystick/hidapi/SDL_hidapi_switch.c
@@ -245,6 +245,15 @@ static SDL_bool IsGameCubeFormFactor(int vendor_id, int product_id)
 static SDL_bool
 HIDAPI_DriverSwitch_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
 {
+    /* The HORI Wireless Switch Pad enumerates as a HID device when connected via USB
+       with the same VID/PID as when connected over Bluetooth but doesn't actually
+       support communication over USB. The most reliable way to block this without allowing the
+       controller to continually attempt to reconnect is to filter it out by manufactuer/product string.
+       Note that the controller does have a different product string when connected over Bluetooth.
+     */
+    if (SDL_strcmp( name, "HORI Wireless Switch Pad" ) == 0) {
+        return SDL_FALSE;
+    }
     return (type == SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO);
 }