From c27f3ead7c37bcbef608f385baa9fce7232efc6d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 21 Jun 2023 14:11:41 -0700 Subject: [PATCH] Removed 100 ms hitch when querying third party Nintendo Switch controllers that don't respond to request for info (cherry picked from commit 8acf72965031a5101f478eccd69d092001134184) --- src/joystick/hidapi/SDL_hidapi_switch.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c index f53857ccc6..9544806e29 100644 --- a/src/joystick/hidapi/SDL_hidapi_switch.c +++ b/src/joystick/hidapi/SDL_hidapi_switch.c @@ -998,7 +998,9 @@ static ESwitchDeviceInfoControllerType ReadJoyConControllerType(SDL_HIDAPI_Devic ctx->m_bSyncWrite = SDL_TRUE; ctx->m_nMaxWriteAttempts = GetMaxWriteAttempts(device); - for (attempts = 0; attempts < MAX_ATTEMPTS; ++attempts) { + for ( ; ; ) { + ++attempts; + device->is_bluetooth = SDL_FALSE; if (WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_Status, NULL, 0, SDL_TRUE)) { SwitchProprietaryStatusPacket_t *status = (SwitchProprietaryStatusPacket_t *)&ctx->m_rgucReadBuffer[0]; @@ -1011,13 +1013,12 @@ static ESwitchDeviceInfoControllerType ReadJoyConControllerType(SDL_HIDAPI_Devic eControllerType = CalculateControllerType(ctx, (ESwitchDeviceInfoControllerType)reply->deviceInfo.ucDeviceType); } } - if (eControllerType == k_eSwitchDeviceInfoControllerType_Unknown) { + if (eControllerType == k_eSwitchDeviceInfoControllerType_Unknown && attempts < MAX_ATTEMPTS) { /* Wait a bit and try again */ SDL_Delay(100); continue; - } else { - break; } + break; } SDL_free(ctx); }