SDL: Wii: don't bother reading the extension type for the Wii U Pro controller, we already know what it is

From a35642fa3e63ff8d23e54a3eb9bdd20328acc588 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Fri, 2 Sep 2022 08:58:21 -0700
Subject: [PATCH] Wii: don't bother reading the extension type for the Wii U
 Pro controller, we already know what it is

---
 src/joystick/hidapi/SDL_hidapi_wii.c | 35 +++++++++++++++++-----------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/joystick/hidapi/SDL_hidapi_wii.c b/src/joystick/hidapi/SDL_hidapi_wii.c
index 45d2fadce19..ed42c4d5338 100644
--- a/src/joystick/hidapi/SDL_hidapi_wii.c
+++ b/src/joystick/hidapi/SDL_hidapi_wii.c
@@ -501,7 +501,7 @@ static void SDLCALL SDL_PlayerLEDHintChanged(void *userdata, const char *name, c
 }
 
 static EWiiExtensionControllerType
-ReadControllerType(SDL_HIDAPI_Device *device)
+ReadExtensionControllerType(SDL_HIDAPI_Device *device)
 {
     EWiiExtensionControllerType eExtensionControllerType = k_eWiiExtensionControllerType_Unknown;
 
@@ -572,7 +572,13 @@ static SDL_bool
 HIDAPI_DriverWii_InitDevice(SDL_HIDAPI_Device *device)
 {
     if (device->vendor_id == USB_VENDOR_NINTENDO) {
-        EWiiExtensionControllerType eExtensionControllerType = ReadControllerType(device);
+        EWiiExtensionControllerType eExtensionControllerType;
+
+        if (device->product_id == USB_PRODUCT_NINTENDO_WII_PRO) {
+            eExtensionControllerType = k_eWiiExtensionControllerType_WiiUPro;
+        } else {
+            eExtensionControllerType = ReadExtensionControllerType(device);
+        }
         device->guid.data[15] = eExtensionControllerType;
         UpdateDeviceIdentity(device);
     }
@@ -1125,8 +1131,6 @@ static void HandleInput(SDL_DriverWii_Context *ctx, SDL_Joystick *joystick)
     }
 }
 
-static const Uint32 FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;
-
 static SDL_bool
 HIDAPI_DriverWii_UpdateDevice(SDL_HIDAPI_Device *device)
 {
@@ -1160,19 +1164,22 @@ HIDAPI_DriverWii_UpdateDevice(SDL_HIDAPI_Device *device)
             /* Bluetooth may have disconnected, try reopening the controller */
             size = -1;
         }
-    }
 
-    /* Request a status update periodically to make sure our battery value is up to date */
-    if (!ctx->m_unLastStatus ||
-        SDL_TICKS_PASSED(now, ctx->m_unLastStatus + FIFTEEN_MINUTES_IN_MS) ||
-        ctx->m_eCommState == k_eWiiCommunicationState_Error) {
-        Uint8 data[2];
+    } else {
+        const Uint32 FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;
 
-        data[0] = k_eWiiOutputReportIDs_StatusRequest;
-        data[1] = ctx->m_bRumbleActive;
-        WriteOutput(ctx, data, sizeof(data), SDL_FALSE);
+        /* Request a status update periodically to make sure our battery value is up to date */
+        if (!ctx->m_unLastStatus ||
+            SDL_TICKS_PASSED(now, ctx->m_unLastStatus + FIFTEEN_MINUTES_IN_MS) ||
+            ctx->m_eCommState == k_eWiiCommunicationState_Error) {
+            Uint8 data[2];
 
-        ctx->m_unLastStatus = now;
+            data[0] = k_eWiiOutputReportIDs_StatusRequest;
+            data[1] = ctx->m_bRumbleActive;
+            WriteOutput(ctx, data, sizeof(data), SDL_FALSE);
+
+            ctx->m_unLastStatus = now;
+        }
     }
 
     if (size < 0) {