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.
diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c
index 16909a0..aab90ed 100644
--- a/src/joystick/hidapi/SDL_hidapijoystick.c
+++ b/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();