From 6b62494ee487eded3960c1c7e0a02fcb142642a9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 13 Oct 2020 21:08:15 -0700 Subject: [PATCH] Added support for controller battery status on iOS 14 --- src/joystick/iphoneos/SDL_sysjoystick.m | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/joystick/iphoneos/SDL_sysjoystick.m b/src/joystick/iphoneos/SDL_sysjoystick.m index 55374f593..d956f82b0 100644 --- a/src/joystick/iphoneos/SDL_sysjoystick.m +++ b/src/joystick/iphoneos/SDL_sysjoystick.m @@ -768,6 +768,40 @@ IOS_MFIJoystickUpdate(SDL_Joystick * joystick) } joystick->hwdata->num_pause_presses = 0; } + + if (@available(iOS 14.0, tvOS 14.0, *)) { + GCDeviceBattery *battery = controller.battery; + if (battery) { + SDL_JoystickPowerLevel ePowerLevel = SDL_JOYSTICK_POWER_UNKNOWN; + + switch (battery.batteryState) { + case GCDeviceBatteryStateDischarging: + { + float power_level = battery.batteryLevel; + if (power_level <= 0.05f) { + ePowerLevel = SDL_JOYSTICK_POWER_EMPTY; + } else if (power_level <= 0.20f) { + ePowerLevel = SDL_JOYSTICK_POWER_LOW; + } else if (power_level <= 0.70f) { + ePowerLevel = SDL_JOYSTICK_POWER_MEDIUM; + } else { + ePowerLevel = SDL_JOYSTICK_POWER_FULL; + } + } + break; + case GCDeviceBatteryStateCharging: + ePowerLevel = SDL_JOYSTICK_POWER_WIRED; + break; + case GCDeviceBatteryStateFull: + ePowerLevel = SDL_JOYSTICK_POWER_FULL; + break; + default: + break; + } + + SDL_PrivateJoystickBatteryLevel(joystick, ePowerLevel); + } + } } #endif /* SDL_JOYSTICK_MFI */ }