SDL: Clarify when we want to auto-enable Apex 5 enhanced functionality

From 889e4787d6a348f59f3b4eae26837617900e481f Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 2 Nov 2025 11:14:41 -0800
Subject: [PATCH] Clarify when we want to auto-enable Apex 5 enhanced
 functionality

---
 src/joystick/hidapi/SDL_hidapi_flydigi.c |  9 +++++----
 src/joystick/hidapi/SDL_hidapi_flydigi.h |  4 ++++
 src/joystick/hidapi/SDL_hidapijoystick.c | 11 ++++++++++-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/joystick/hidapi/SDL_hidapi_flydigi.c b/src/joystick/hidapi/SDL_hidapi_flydigi.c
index 73b185becfa8c..deb4da588baf6 100644
--- a/src/joystick/hidapi/SDL_hidapi_flydigi.c
+++ b/src/joystick/hidapi/SDL_hidapi_flydigi.c
@@ -294,9 +294,7 @@ static bool HIDAPI_DriverFlydigi_InitControllerV2(SDL_HIDAPI_Device *device)
     if (data[10] == 1) {
         ctx->available = true;
     } else {
-#ifdef SDL_PLATFORM_WINDOWS
-        // Click "Allow third-party apps to take over mappings" in the FlyDigi Space Station app
-#else
+#ifdef SDL_AUTO_ENABLE_ENHANCED_FLYDIGI
         // The FlyDigi Space Station app isn't available, we need to enable this ourselves
         Uint8 enable_acquire[] = {
             FLYDIGI_V2_CMD_REPORT_ID,
@@ -308,7 +306,10 @@ static bool HIDAPI_DriverFlydigi_InitControllerV2(SDL_HIDAPI_Device *device)
         if (SDL_hid_write(device->dev, enable_acquire, sizeof(enable_acquire)) < 0) {
             return SDL_SetError("Couldn't set controller status");
         }
-#endif // SDL_PLATFORM_WINDOWS
+#else
+        // Click "Allow third-party apps to take over mappings" in the FlyDigi Space Station app
+
+#endif // SDL_AUTO_ENABLE_ENHANCED_FLYDIGI
     }
     return true;
 }
diff --git a/src/joystick/hidapi/SDL_hidapi_flydigi.h b/src/joystick/hidapi/SDL_hidapi_flydigi.h
index 42d6ef7ee257b..fc685bea54bc4 100644
--- a/src/joystick/hidapi/SDL_hidapi_flydigi.h
+++ b/src/joystick/hidapi/SDL_hidapi_flydigi.h
@@ -36,3 +36,7 @@ typedef enum
     SDL_FLYDIGI_VADER4_PRO,
 } SDL_FlyDigiControllerType;
 
+#ifndef SDL_PLATFORM_WINDOWS
+// The FlyDigi Space Station app isn't available on this platform
+#define SDL_AUTO_ENABLE_ENHANCED_FLYDIGI
+#endif
diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c
index 137822b4ad3ce..0ec47acefb17c 100644
--- a/src/joystick/hidapi/SDL_hidapijoystick.c
+++ b/src/joystick/hidapi/SDL_hidapijoystick.c
@@ -1305,10 +1305,19 @@ bool HIDAPI_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version,
      */
     SDL_LockJoysticks();
     for (device = SDL_HIDAPI_devices; device; device = device->next) {
+#ifdef SDL_AUTO_ENABLE_ENHANCED_FLYDIGI
+        // The HIDAPI functionality will always be available, so ignore the XInput interface
+#else
+        // The HIDAPI functionality will be available when the FlyDigi Space Station app has
+        // enabled third party controller mapping, so the driver needs to be active to watch
+        // for that change. Since this is dynamic and we don't have a way to re-trigger device
+        // changes when that happens, we'll pretend the driver isn't available so the XInput
+        // interface will always show up (but won't have any input when the controller is in
+        // enhanced mode)
         if (device->vendor_id == USB_VENDOR_FLYDIGI_V2) {
-            // Ignore the Apex 5, as it can dynamically switch between Xbox and HIDAPI mode
             continue;
         }
+#endif // SDL_AUTO_ENABLE_ENHANCED_FLYDIGI
 
         if (device->driver &&
             HIDAPI_IsEquivalentToDevice(vendor_id, product_id, device)) {