Преглед на файлове

Sometimes the HID open doesn't succeed immediately after being notified about the device

Tested on Steam Link hardware with the Nintendo Switch Pro controller, which will occasionally take 2 attempts to open.
Sam Lantinga преди 2 години
родител
ревизия
b75d318776
променени са 1 файла, в които са добавени 10 реда и са изтрити 1 реда
  1. 10 1
      src/joystick/hidapi/SDL_hidapijoystick.c

+ 10 - 1
src/joystick/hidapi/SDL_hidapijoystick.c

@@ -368,6 +368,8 @@ HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device, SDL_bool *removed)
              *
              * See https://github.com/libsdl-org/SDL/issues/6347 for details
              */
+            const int MAX_ATTEMPTS = 3;
+            int attempt;
             int lock_count = 0;
             SDL_HIDAPI_Device *curr;
             SDL_hid_device *dev;
@@ -378,7 +380,14 @@ HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device, SDL_bool *removed)
                 ++lock_count;
                 SDL_UnlockJoysticks();
             }
-            dev = SDL_hid_open_path(path, 0);
+            for (attempt = 0; attempt < MAX_ATTEMPTS; ++attempt) {
+                dev = SDL_hid_open_path(path, 0);
+                if (dev != NULL) {
+                    break;
+                }
+                /* Wait a bit and try again */
+                SDL_Delay(30);
+            }
             while (lock_count > 0) {
                 --lock_count;
                 SDL_LockJoysticks();