Added support for controller battery status on iOS 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
diff --git a/src/joystick/iphoneos/SDL_sysjoystick.m b/src/joystick/iphoneos/SDL_sysjoystick.m
index 55374f5..d956f82 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 */
}