From 8b20b568b0104cf1695a5a35c5e24110fe34d4c0 Mon Sep 17 00:00:00 2001 From: Sam Lantinga 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 461d99b48..5f6d36a98 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 4b9558145..c882a1a40 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 120a361f1..fc738b07f 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;