Sfoglia il codice sorgente

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 anni fa
parent
commit
b75d318776
1 ha cambiato i file con 10 aggiunte e 1 eliminazioni
  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();