From 34faeadf8cda15393f15753475532057fbdebb72 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 30 Apr 2010 00:39:31 -0400 Subject: [PATCH] Implemented SDL power APIs for iPhoneOS. --- .../SDL/SDLiPhoneOS.xcodeproj/project.pbxproj | 24 +++++ .../TestiPhoneOS.xcodeproj/project.pbxproj | 102 ++++++++++++++++++ include/SDL_config_iphoneos.h | 2 +- src/power/SDL_power.c | 6 +- src/power/uikit/SDL_syspower.m | 100 +++++++++++++++++ src/video/uikit/SDL_uikitopengles.m | 5 + 6 files changed, 237 insertions(+), 2 deletions(-) create mode 100644 src/power/uikit/SDL_syspower.m diff --git a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj index a4b3ffa2d..ad8698b95 100755 --- a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj +++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj @@ -65,6 +65,8 @@ 04EC8B521025D12900431D42 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = 04EC8B501025D12900431D42 /* SDL_config_iphoneos.h */; }; 04F2AF541104ABC300D6DDF7 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F2AF531104ABC300D6DDF7 /* SDL_assert.h */; }; 04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */; }; + 56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E0118A8EE200A56AA6 /* SDL_power.c */; }; + 56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */; }; FD24846D0E5655AE0021E198 /* SDL_uikitkeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FD24846B0E5655AE0021E198 /* SDL_uikitkeyboard.h */; }; FD3F495C0DEA5B2100C5B771 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = FD99B8CC0DD52EB400FB1D6B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; }; FD3F495D0DEA5B2100C5B771 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = FD99B8CD0DD52EB400FB1D6B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -247,6 +249,8 @@ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 56ED04E0118A8EE200A56AA6 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_power.c; path = ../../src/power/SDL_power.c; sourceTree = SOURCE_ROOT; }; + 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_syspower.m; path = ../../src/power/uikit/SDL_syspower.m; sourceTree = SOURCE_ROOT; }; FD0BBFEF0E3933DD00D833B1 /* SDL_uikitview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitview.h; sourceTree = ""; }; FD24846B0E5655AE0021E198 /* SDL_uikitkeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitkeyboard.h; sourceTree = ""; }; FD3F4A700DEA620800C5B771 /* SDL_getenv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_getenv.c; sourceTree = ""; }; @@ -488,6 +492,23 @@ name = Frameworks; sourceTree = ""; }; + 56ED04DE118A8E9A00A56AA6 /* power */ = { + isa = PBXGroup; + children = ( + 56ED04E0118A8EE200A56AA6 /* SDL_power.c */, + 56ED04DF118A8EB700A56AA6 /* uikit */, + ); + name = power; + sourceTree = ""; + }; + 56ED04DF118A8EB700A56AA6 /* uikit */ = { + isa = PBXGroup; + children = ( + 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */, + ); + name = uikit; + sourceTree = ""; + }; FD3F4A6F0DEA620800C5B771 /* stdlib */ = { isa = PBXGroup; children = ( @@ -642,6 +663,7 @@ 047677B60EA769DF008ABAF1 /* haptic */, FD5F9D080E0E08B3008E885B /* joystick */, FD8BD8150E27E25900B52CD5 /* loadso */, + 56ED04DE118A8E9A00A56AA6 /* power */, FD3F4A6F0DEA620800C5B771 /* stdlib */, FD99B9E00DD52EDC00FB1D6B /* thread */, FD99BA1E0DD52EDC00FB1D6B /* timer */, @@ -1103,6 +1125,8 @@ 043DD77110FD8A0000DED673 /* SDL_blendfillrect.c in Sources */, 043DD77210FD8A0000DED673 /* SDL_drawrect.c in Sources */, 04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */, + 56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */, + 56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Xcode-iPhoneOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj b/Xcode-iPhoneOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj index 79517ddf8..6cf2ad995 100755 --- a/Xcode-iPhoneOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj +++ b/Xcode-iPhoneOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj @@ -7,6 +7,16 @@ objects = { /* Begin PBXBuildFile section */ + 56ED04FE118A8FE400A56AA6 /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; + 56ED0502118A8FE400A56AA6 /* libSDLiPhoneOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDLiPhoneOS.a */; }; + 56ED0503118A8FE400A56AA6 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; + 56ED0504118A8FE400A56AA6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; + 56ED0505118A8FE400A56AA6 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; + 56ED0506118A8FE400A56AA6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; + 56ED0507118A8FE400A56AA6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; + 56ED0508118A8FE400A56AA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; + 56ED0509118A8FE400A56AA6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; + 56ED0511118A904200A56AA6 /* testpower.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ED0510118A904200A56AA6 /* testpower.c */; }; FDA8A79B0E2D0F8B00EA573E /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7840E2D0F1F00EA573E /* common.c */; }; FDA8A79C0E2D0F9300EA573E /* testwm2.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A75F0E2D0F1600EA573E /* testwm2.c */; }; FDA8A89F0E2D111A00EA573E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; @@ -288,6 +298,10 @@ /* Begin PBXFileReference section */ 1D6058910D05DD3D006BFB54 /* testwm2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testwm2.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 56ED04F7118A8FCC00A56AA6 /* testpower-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "testpower-Info.plist"; sourceTree = ""; }; + 56ED050D118A8FE400A56AA6 /* testpower.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testpower.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 56ED050F118A8FE400A56AA6 /* Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy.plist"; sourceTree = ""; }; + 56ED0510118A904200A56AA6 /* testpower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testpower.c; path = ../../test/testpower.c; sourceTree = SOURCE_ROOT; }; FD1B48AC0E3131CA007AB34E /* SDLiPhoneOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDLiPhoneOS.xcodeproj; path = ../SDL/SDLiPhoneOS.xcodeproj; sourceTree = SOURCE_ROOT; }; FDA8A7400E2D0F1600EA573E /* testalpha.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testalpha.c; path = ../../test/testalpha.c; sourceTree = SOURCE_ROOT; }; FDA8A7410E2D0F1600EA573E /* testaudioinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testaudioinfo.c; path = ../../test/testaudioinfo.c; sourceTree = SOURCE_ROOT; }; @@ -386,6 +400,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 56ED0501118A8FE400A56AA6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 56ED0502118A8FE400A56AA6 /* libSDLiPhoneOS.a in Frameworks */, + 56ED0503118A8FE400A56AA6 /* AudioToolbox.framework in Frameworks */, + 56ED0504118A8FE400A56AA6 /* QuartzCore.framework in Frameworks */, + 56ED0505118A8FE400A56AA6 /* OpenGLES.framework in Frameworks */, + 56ED0506118A8FE400A56AA6 /* CoreGraphics.framework in Frameworks */, + 56ED0507118A8FE400A56AA6 /* UIKit.framework in Frameworks */, + 56ED0508118A8FE400A56AA6 /* Foundation.framework in Frameworks */, + 56ED0509118A8FE400A56AA6 /* CoreAudio.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; FDA8A9220E2D1C0B00EA573E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -824,6 +853,7 @@ FDD2C6B30E2E92D200B7A85F /* threadwin.app */, FDD2C6F40E2E959E00B7A85F /* torturethread.app */, FDC430000F0D866D009C87E1 /* torturethread.app */, + 56ED050D118A8FE400A56AA6 /* testpower.app */, ); name = Products; sourceTree = ""; @@ -831,11 +861,14 @@ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( + 56ED0510118A904200A56AA6 /* testpower.c */, FD1B48AC0E3131CA007AB34E /* SDLiPhoneOS.xcodeproj */, FDA8AAD60E2D339A00EA573E /* Resources */, FDA8A7C30E2D10FA00EA573E /* Linked Frameworks */, FDA8A73B0E2D0F0400EA573E /* src */, 19C28FACFE9D520D11CA2CBB /* Products */, + 56ED04F7118A8FCC00A56AA6 /* testpower-Info.plist */, + 56ED050F118A8FE400A56AA6 /* Info copy.plist */, ); name = CustomTemplate; sourceTree = ""; @@ -941,6 +974,23 @@ productReference = 1D6058910D05DD3D006BFB54 /* testwm2.app */; productType = "com.apple.product-type.application"; }; + 56ED04FC118A8FE400A56AA6 /* testpower */ = { + isa = PBXNativeTarget; + buildConfigurationList = 56ED050A118A8FE400A56AA6 /* Build configuration list for PBXNativeTarget "testpower" */; + buildPhases = ( + 56ED04FD118A8FE400A56AA6 /* Resources */, + 56ED04FF118A8FE400A56AA6 /* Sources */, + 56ED0501118A8FE400A56AA6 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testpower; + productName = TestiPhoneOS; + productReference = 56ED050D118A8FE400A56AA6 /* testpower.app */; + productType = "com.apple.product-type.application"; + }; FDA8A91D0E2D1C0B00EA573E /* graywin */ = { isa = PBXNativeTarget; buildConfigurationList = FDA8A92C0E2D1C0B00EA573E /* Build configuration list for PBXNativeTarget "graywin" */; @@ -1437,6 +1487,7 @@ FDD2C46B0E2E77D700B7A85F /* testlock */, FDD2C4A60E2E79C300B7A85F /* testpalette */, FDD2C4F90E2E7F4800B7A85F /* testplatform */, + 56ED04FC118A8FE400A56AA6 /* testpower */, FDD2C5170E2E807600B7A85F /* testsem */, FDD2C53D0E2E80E400B7A85F /* testsprite2 */, FDD2C5740E2E8C7400B7A85F /* testtimer */, @@ -1468,6 +1519,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 56ED04FD118A8FE400A56AA6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 56ED04FE118A8FE400A56AA6 /* icon.bmp in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; FDA8A91E0E2D1C0B00EA573E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1681,6 +1740,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 56ED04FF118A8FE400A56AA6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 56ED0511118A904200A56AA6 /* testpower.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; FDA8A91F0E2D1C0B00EA573E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1929,6 +1996,32 @@ }; name = Release; }; + 56ED050B118A8FE400A56AA6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + INFOPLIST_FILE = "Info copy.plist"; + PRODUCT_NAME = testpower; + }; + name = Debug; + }; + 56ED050C118A8FE400A56AA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ""; + INFOPLIST_FILE = "Info copy.plist"; + PRODUCT_NAME = testpower; + }; + name = Release; + }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2674,6 +2767,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 56ED050A118A8FE400A56AA6 /* Build configuration list for PBXNativeTarget "testpower" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 56ED050B118A8FE400A56AA6 /* Debug */, + 56ED050C118A8FE400A56AA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TestiPhoneOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/include/SDL_config_iphoneos.h b/include/SDL_config_iphoneos.h index 867e6c471..f9271766c 100644 --- a/include/SDL_config_iphoneos.h +++ b/include/SDL_config_iphoneos.h @@ -142,7 +142,7 @@ typedef unsigned long uintptr_t; #define SDL_VIDEO_RENDER_OGL_ES 1 /* Enable system power support */ -#define SDL_POWER_MACOSX 1 +#define SDL_POWER_UIKIT 1 /* enable iPhone keyboard support */ #define SDL_IPHONE_KEYBOARD 0 diff --git a/src/power/SDL_power.c b/src/power/SDL_power.c index c88935465..d62fa4e9a 100644 --- a/src/power/SDL_power.c +++ b/src/power/SDL_power.c @@ -36,6 +36,7 @@ SDL_bool SDL_GetPowerInfo_Windows(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_MacOSX(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_BeOS(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_NintendoDS(SDL_PowerState *, int *, int *); +SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *, int *, int *); #ifndef SDL_POWER_DISABLED #ifdef SDL_POWER_HARDWIRED @@ -61,7 +62,10 @@ static SDL_GetPowerInfo_Impl implementations[] = { #ifdef SDL_POWER_WINDOWS /* handles Win32, Win64, PocketPC. */ SDL_GetPowerInfo_Windows, #endif -#ifdef SDL_POWER_MACOSX /* handles Mac OS X, Darwin, iPhone. */ +#ifdef SDL_POWER_UIKIT /* handles iPhone/iPad/etc */ + SDL_GetPowerInfo_UIKit, +#endif +#ifdef SDL_POWER_MACOSX /* handles Mac OS X, Darwin. */ SDL_GetPowerInfo_MacOSX, #endif #ifdef SDL_POWER_NINTENDODS /* handles Nintendo DS. */ diff --git a/src/power/uikit/SDL_syspower.m b/src/power/uikit/SDL_syspower.m new file mode 100644 index 000000000..b38858a28 --- /dev/null +++ b/src/power/uikit/SDL_syspower.m @@ -0,0 +1,100 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2010 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#ifndef SDL_POWER_DISABLED +#ifdef SDL_POWER_UIKIT + +#import + +#include "SDL_power.h" +#include "SDL_timer.h" +#include "SDL_assert.h" + +// turn off the battery monitor if it's been more than X ms since last check. +static const int BATTERY_MONITORING_TIMEOUT = 3000; +static Uint32 SDL_UIKitLastPowerInfoQuery = 0; + +void +SDL_UIKit_UpdateBatteryMonitoring(void) +{ + if (SDL_UIKitLastPowerInfoQuery) { + const Uint32 prev = SDL_UIKitLastPowerInfoQuery; + const UInt32 now = SDL_GetTicks(); + const UInt32 ticks = now - prev; + // if timer wrapped (now < prev), shut down, too. + if ((now < prev) || (ticks >= BATTERY_MONITORING_TIMEOUT)) { + UIDevice *uidev = [UIDevice currentDevice]; + SDL_assert([uidev isBatteryMonitoringEnabled] == YES); + [uidev setBatteryMonitoringEnabled:NO]; + SDL_UIKitLastPowerInfoQuery = 0; + } + } +} + +SDL_bool +SDL_GetPowerInfo_UIKit(SDL_PowerState * state, int *seconds, int *percent) +{ + UIDevice *uidev = [UIDevice currentDevice]; + + if (!SDL_UIKitLastPowerInfoQuery) { + SDL_assert([uidev isBatteryMonitoringEnabled] == NO); + [uidev setBatteryMonitoringEnabled:YES]; + } + + // UIKit_GL_SwapWindow() (etc) will check this and disable the battery + // monitoring if the app hasn't queried it in the last X seconds. + // Apparently monitoring the battery burns battery life. :) + // Apple's docs say not to monitor the battery unless you need it. + SDL_UIKitLastPowerInfoQuery = SDL_GetTicks(); + + *seconds = -1; // no API to estimate this in UIKit. + + switch ([uidev batteryState]) + { + case UIDeviceBatteryStateCharging: + *state = SDL_POWERSTATE_CHARGING; + break; + + case UIDeviceBatteryStateFull: + *state = SDL_POWERSTATE_CHARGED; + break; + + case UIDeviceBatteryStateUnplugged: + *state = SDL_POWERSTATE_ON_BATTERY; + break; + + case UIDeviceBatteryStateUnknown: + default: + *state = SDL_POWERSTATE_UNKNOWN; + break; + } + + const float level = [uidev batteryLevel]; + *percent = ( (level < 0.0f) ? -1 : (((int) (level + 0.5f)) * 100) ); + return SDL_TRUE; /* always the definitive answer on iPhoneOS. */ +} + +#endif /* SDL_POWER_UIKIT */ +#endif /* SDL_POWER_DISABLED */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/uikit/SDL_uikitopengles.m b/src/video/uikit/SDL_uikitopengles.m index 8797ffaee..79d551e3c 100644 --- a/src/video/uikit/SDL_uikitopengles.m +++ b/src/video/uikit/SDL_uikitopengles.m @@ -73,9 +73,14 @@ int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) return 0; } +extern void SDL_UIKit_UpdateBatteryMonitoring(void); void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) { + #ifdef SDL_POWER_UIKIT + // Check once a frame to see if we should turn off the battery monitor. + SDL_UIKit_UpdateBatteryMonitoring(); + #endif SDL_WindowData *data = (SDL_WindowData *)window->driverdata;