From 67db8a9103030ee1a3a54053381b4074ffe0c099 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 26 Sep 2022 20:41:51 -0700 Subject: [PATCH] Wait for input before reconnecting a Bluetooth device On Windows, the Bluetooth device can remain in a connected state if the controller just shut down. It won't return any errors, but it also won't generate any input reports in this state, so wait until we know for sure that the Bluetooth controller is sending data before letting the application know it's available. --- src/joystick/hidapi/SDL_hidapi_ps4.c | 4 +++- src/joystick/hidapi/SDL_hidapi_ps5.c | 4 +++- src/joystick/hidapi/SDL_hidapi_switch.c | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/joystick/hidapi/SDL_hidapi_ps4.c b/src/joystick/hidapi/SDL_hidapi_ps4.c index c9c24a3817..7aefd79483 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps4.c +++ b/src/joystick/hidapi/SDL_hidapi_ps4.c @@ -961,7 +961,9 @@ HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device) if (device->num_joysticks == 0 && device->is_bluetooth && !HIDAPI_HasConnectedUSBDevice(device->serial)) { - HIDAPI_JoystickConnected(device, NULL); + if (SDL_hid_read_timeout(device->dev, data, sizeof(data), 0) > 0) { + HIDAPI_JoystickConnected(device, NULL); + } } if (device->num_joysticks > 0) { diff --git a/src/joystick/hidapi/SDL_hidapi_ps5.c b/src/joystick/hidapi/SDL_hidapi_ps5.c index 423d4e9edb..1bd1a2669d 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps5.c +++ b/src/joystick/hidapi/SDL_hidapi_ps5.c @@ -1269,7 +1269,9 @@ HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device) if (device->num_joysticks == 0 && device->is_bluetooth && !HIDAPI_HasConnectedUSBDevice(device->serial)) { - HIDAPI_JoystickConnected(device, NULL); + if (SDL_hid_read_timeout(device->dev, data, sizeof(data), 0) > 0) { + HIDAPI_JoystickConnected(device, NULL); + } } if (device->num_joysticks > 0) { diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c index 5c542b3ffb..62e826c41e 100644 --- a/src/joystick/hidapi/SDL_hidapi_switch.c +++ b/src/joystick/hidapi/SDL_hidapi_switch.c @@ -2089,7 +2089,9 @@ HIDAPI_DriverSwitch_UpdateDevice(SDL_HIDAPI_Device *device) if (device->num_joysticks == 0 && device->is_bluetooth && !HIDAPI_HasConnectedUSBDevice(device->serial)) { - HIDAPI_JoystickConnected(device, NULL); + if (ReadInput(ctx) > 0) { + HIDAPI_JoystickConnected(device, NULL); + } } if (device->num_joysticks > 0) {