SDL: Don't report battery level for disconnected batteries

From 8b20b568b0104cf1695a5a35c5e24110fe34d4c0 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 21 Nov 2022 07:41:35 -0800
Subject: [PATCH] Don't report battery level for disconnected batteries

Fixes https://github.com/libsdl-org/SDL/issues/6536
---
 src/core/windows/SDL_xinput.h               | 5 ++++-
 src/joystick/SDL_joystick.c                 | 2 +-
 src/joystick/windows/SDL_rawinputjoystick.c | 3 ++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/core/windows/SDL_xinput.h b/src/core/windows/SDL_xinput.h
index 461d99b4853a..5f6d36a98989 100644
--- a/src/core/windows/SDL_xinput.h
+++ b/src/core/windows/SDL_xinput.h
@@ -133,10 +133,13 @@ using namespace XInputOnGameInput;
 #ifndef BATTERY_DEVTYPE_GAMEPAD
 #define BATTERY_DEVTYPE_GAMEPAD         0x00
 #endif
+
+#ifndef BATTERY_TYPE_DISCONNECTED
+#define BATTERY_TYPE_DISCONNECTED       0x00
+#endif
 #ifndef BATTERY_TYPE_WIRED
 #define BATTERY_TYPE_WIRED              0x01
 #endif
-
 #ifndef BATTERY_TYPE_UNKNOWN
 #define BATTERY_TYPE_UNKNOWN            0xFF
 #endif
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
index 4b9558145292..c882a1a40291 100644
--- a/src/joystick/SDL_joystick.c
+++ b/src/joystick/SDL_joystick.c
@@ -2901,7 +2901,7 @@ void SDL_PrivateJoystickBatteryLevel(SDL_Joystick *joystick, SDL_JoystickPowerLe
 {
     CHECK_JOYSTICK_MAGIC(joystick, );
 
-    SDL_assert(joystick->ref_count); /* make sure we are calling this only for update, not for initialisation */
+    SDL_assert(joystick->ref_count); /* make sure we are calling this only for update, not for initialization */
     if (ePowerLevel != joystick->epowerlevel) {
 #if !SDL_EVENTS_DISABLED
         if (SDL_GetEventState(SDL_JOYBATTERYUPDATED) == SDL_ENABLE) {
diff --git a/src/joystick/windows/SDL_rawinputjoystick.c b/src/joystick/windows/SDL_rawinputjoystick.c
index 120a361f1320..fc738b07f377 100644
--- a/src/joystick/windows/SDL_rawinputjoystick.c
+++ b/src/joystick/windows/SDL_rawinputjoystick.c
@@ -1775,7 +1775,8 @@ RAWINPUT_UpdateOtherAPIs(SDL_Joystick *joystick)
             }
             has_trigger_data = SDL_TRUE;
 
-            if (battery_info->BatteryType != BATTERY_TYPE_UNKNOWN) {
+            if (battery_info->BatteryType != BATTERY_TYPE_UNKNOWN &&
+                battery_info->BatteryType != BATTERY_TYPE_DISCONNECTED) {
                 SDL_JoystickPowerLevel ePowerLevel = SDL_JOYSTICK_POWER_UNKNOWN;
                 if (battery_info->BatteryType == BATTERY_TYPE_WIRED) {
                     ePowerLevel = SDL_JOYSTICK_POWER_WIRED;