Преглед изворни кода

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();