Browse Source

The HIDAPI driver takes precedence over the GameInput driver

The HIDAPI driver has more functionality for supported controllers.
Sam Lantinga 1 year ago
parent
commit
fbe4153214
1 changed files with 13 additions and 8 deletions
  1. 13 8
      src/joystick/gdk/SDL_gameinputjoystick.c

+ 13 - 8
src/joystick/gdk/SDL_gameinputjoystick.c

@@ -85,6 +85,19 @@ static int GAMEINPUT_InternalAddOrFind(IGameInputDevice *pDevice)
         return SDL_SetError("GAMEINPUT_InternalAddOrFind GetDeviceInfo returned NULL");
     }
 
+    if (devinfo->capabilities & GameInputDeviceCapabilityWireless) {
+        bus = SDL_HARDWARE_BUS_BLUETOOTH;
+    } else {
+        bus = SDL_HARDWARE_BUS_USB;
+    }
+    vendor = devinfo->vendorId;
+    product = devinfo->productId;
+    version = (devinfo->firmwareVersion.major << 8) | devinfo->firmwareVersion.minor;
+
+    if (SDL_JoystickHandledByAnotherDriver(&SDL_GAMEINPUT_JoystickDriver, vendor, product, version, "")) {
+        return 0;
+    }
+
     for (idx = 0; idx < g_GameInputList.count; ++idx) {
         elem = g_GameInputList.devices[idx];
         if (elem && elem->device == pDevice) {
@@ -109,14 +122,6 @@ static int GAMEINPUT_InternalAddOrFind(IGameInputDevice *pDevice)
         SDL_snprintf(tmp, SDL_arraysize(tmp), "%02hhX", devinfo->deviceId.value[idx]);
         SDL_strlcat(elem->path, tmp, SDL_arraysize(tmp));
     }
-    if (devinfo->capabilities & GameInputDeviceCapabilityWireless) {
-        bus = SDL_HARDWARE_BUS_BLUETOOTH;
-    } else {
-        bus = SDL_HARDWARE_BUS_USB;
-    }
-    vendor = devinfo->vendorId;
-    product = devinfo->productId;
-    version = (devinfo->firmwareVersion.major << 8) | devinfo->firmwareVersion.minor;
 
     g_GameInputList.devices = devicelist;
     IGameInputDevice_AddRef(pDevice);