From b75d318776c6db59935bd85e71e7bd36101806f5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 31 Oct 2022 13:33:53 -0700 Subject: [PATCH] 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. --- src/joystick/hidapi/SDL_hidapijoystick.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c index 16909a0421..aab90ed7e9 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();