Просмотр исходного кода

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 лет назад
Родитель
Сommit
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();