20 #if defined(SDL_PLATFORM_IOS)
22 #import <UIKit/UIDevice.h>
26 #import <Foundation/Foundation.h>
27 #import <IOKit/ps/IOPowerSources.h>
28 #import <IOKit/ps/IOPSKeys.h>
29 #import <IOKit/pwr_mgt/IOPM.h>
34 namespace battery_info {
38 #if defined(SDL_PLATFORM_IOS)
39 UIDevice.currentDevice.batteryMonitoringEnabled = YES;
40 if (UIDevice.currentDevice.batteryState == UIDeviceBatteryStateUnknown) {
54 #if !defined(SDL_PLATFORM_IOS)
55 inline NSDictionary* get_iops_battery_info() {
57 CFTypeRef
info = IOPSCopyPowerSourcesInfo();
63 CFArrayRef list = IOPSCopyPowerSourcesList(
info);
65 if (list == NULL || !CFArrayGetCount(list)) {
73 CFDictionaryRef battery = CFDictionaryCreateCopy(NULL, IOPSGetPowerSourceDescription(
info, CFArrayGetValueAtIndex(list, 0)));
78 return static_cast<NSDictionary*
>(battery);
83 #if defined(SDL_PLATFORM_IOS)
84 return UIDevice.currentDevice.batteryLevel * 100;
87 NSDictionary* battery = get_iops_battery_info();
89 NSNumber *maxCapacity = [battery objectForKey:@kIOPSMaxCapacityKey];
90 NSNumber *currentCapacity = [battery objectForKey:@kIOPSCurrentCapacityKey];
92 if (maxCapacity && currentCapacity) {
93 return ([currentCapacity doubleValue] / [maxCapacity doubleValue]) * 100;
double get_battery_percentage()
bool does_device_have_battery()