aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKostas Nakos2007-05-01 20:10:56 +0000
committerKostas Nakos2007-05-01 20:10:56 +0000
commit546d9cb01baf04c6acae43b80db10b50c8d8b697 (patch)
treeb26e938a1c4a03c54f7021741169ea941808522d
parent727867c66f5d856a848bbb6bb67543342dd0c63b (diff)
downloadscummvm-rg350-546d9cb01baf04c6acae43b80db10b50c8d8b697.tar.gz
scummvm-rg350-546d9cb01baf04c6acae43b80db10b50c8d8b697.tar.bz2
scummvm-rg350-546d9cb01baf04c6acae43b80db10b50c8d8b697.zip
added code to supress the backlight in older devices, fixed a little oops :-)
svn-id: r26728
-rw-r--r--backends/platform/wince/CEDevice.cpp62
-rw-r--r--backends/platform/wince/CEDevice.h4
2 files changed, 60 insertions, 6 deletions
diff --git a/backends/platform/wince/CEDevice.cpp b/backends/platform/wince/CEDevice.cpp
index e789c5edb6..5a60c76bfe 100644
--- a/backends/platform/wince/CEDevice.cpp
+++ b/backends/platform/wince/CEDevice.cpp
@@ -32,16 +32,58 @@ static HANDLE (WINAPI* _SetPowerRequirement)(PVOID,int,ULONG,PVOID,ULONG) = NULL
static DWORD (WINAPI* _ReleasePowerRequirement)(HANDLE) = NULL;
static HANDLE _hPowerManagement = NULL;
static DWORD _lastTime = 0;
+static DWORD REG_bat = 0, REG_ac = 0, REG_disp = 0, bat_timeout = 0;
#ifdef __GNUC__
extern "C" void WINAPI SystemIdleTimerReset(void);
-#define SPI_GETPLATFORMTYPE 257
+#define SPI_GETPLATFORMTYPE 257
+#define SPI_SETBATTERYIDLETIMEOUT 251
+#define SPI_GETBATTERYIDLETIMEOUT 252
#endif
-
#define TIMER_TRIGGER 9000
-// Power management code borrowed from MoDaCo & Betaplayer. Thanks !
+DWORD CEDevice::reg_access(TCHAR *key, TCHAR *val, DWORD data) {
+ HKEY regkey;
+ DWORD tmpval, cbdata;
+
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, 0, &regkey) != ERROR_SUCCESS)
+ return data;
+
+ cbdata = sizeof(DWORD);
+ if (RegQueryValueEx(regkey, val, NULL, NULL, (LPBYTE) &tmpval, &cbdata) != ERROR_SUCCESS)
+ {
+ RegCloseKey(regkey);
+ return data;
+ }
+
+ cbdata = sizeof(DWORD);
+ if (RegSetValueEx(regkey, val, 0, REG_DWORD, (LPBYTE) &data, cbdata) != ERROR_SUCCESS)
+ {
+ RegCloseKey(regkey);
+ return data;
+ }
+
+ RegCloseKey(regkey);
+ return tmpval;
+}
+
+void CEDevice::backlight_xchg() {
+ HANDLE h;
+
+ REG_bat = reg_access(TEXT("ControlPanel\\BackLight"), TEXT("BatteryTimeout"), REG_bat);
+ REG_ac = reg_access(TEXT("ControlPanel\\BackLight"), TEXT("ACTimeout"), REG_ac);
+ REG_disp = reg_access(TEXT("ControlPanel\\Power"), TEXT("Display"), REG_disp);
+
+ h = CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
+ if (h)
+ {
+ SetEvent(h);
+ CloseHandle(h);
+ }
+}
+
void CEDevice::init() {
+ // 2003+ power management code borrowed from MoDaCo & Betaplayer. Thanks !
HINSTANCE dll = LoadLibrary(TEXT("aygshell.dll"));
if (dll) {
*(FARPROC*)&_SHIdleTimerReset = GetProcAddress(dll, MAKEINTRESOURCE(2006));
@@ -55,12 +97,20 @@ void CEDevice::init() {
if (_SetPowerRequirement)
_hPowerManagement = _SetPowerRequirement((PVOID) TEXT("BKL1:"), 0, 1, (PVOID) NULL, 0);
_lastTime = GetTickCount();
+
+ // older devices
+ REG_bat = REG_ac = REG_disp = 2 * 60 * 60 * 1000; // 2hrs should do it
+ backlight_xchg();
+ SystemParametersInfo(SPI_GETBATTERYIDLETIMEOUT, 0, (void *) &bat_timeout, 0);
+ SystemParametersInfo(SPI_SETBATTERYIDLETIMEOUT, 60 * 60 * 2, NULL, SPIF_SENDCHANGE);
}
void CEDevice::end() {
- if (_ReleasePowerRequirement && _hPowerManagement) {
+ if (_ReleasePowerRequirement && _hPowerManagement)
_ReleasePowerRequirement(_hPowerManagement);
- }
+
+ backlight_xchg();
+ SystemParametersInfo(SPI_SETBATTERYIDLETIMEOUT, bat_timeout, NULL, SPIF_SENDCHANGE);
}
void CEDevice::wakeUp() {
@@ -74,7 +124,7 @@ void CEDevice::wakeUp() {
}
bool CEDevice::hasSquareQVGAResolution() {
- return (OSystem_WINCE3::getScreenWidth() == 240 && OSystem_WINCE3::getScreenWidth() == 240);
+ return (OSystem_WINCE3::getScreenWidth() == 240 && OSystem_WINCE3::getScreenHeight() == 240);
}
bool CEDevice::hasPocketPCResolution() {
diff --git a/backends/platform/wince/CEDevice.h b/backends/platform/wince/CEDevice.h
index 56de506ed1..4dd86f1619 100644
--- a/backends/platform/wince/CEDevice.h
+++ b/backends/platform/wince/CEDevice.h
@@ -40,6 +40,10 @@ class CEDevice {
static bool hasSmartphoneResolution();
static bool isSmartphone();
static Common::String getKeyName(unsigned int keyCode);
+
+ private:
+ static DWORD reg_access(TCHAR *key, TCHAR *val, DWORD data);
+ static void backlight_xchg();
};
#endif