diff options
| -rw-r--r-- | backends/wince/CEActions.cpp | 12 | ||||
| -rw-r--r-- | backends/wince/CEActions.h | 3 | ||||
| -rw-r--r-- | backends/wince/CEActionsPocket.cpp | 9 | ||||
| -rw-r--r-- | backends/wince/CEActionsPocket.h | 4 | ||||
| -rw-r--r-- | backends/wince/CEActionsSmartphone.cpp | 54 | ||||
| -rw-r--r-- | backends/wince/CEActionsSmartphone.h | 8 | ||||
| -rw-r--r-- | backends/wince/CEDevice.cpp | 75 | ||||
| -rw-r--r-- | backends/wince/CEDevice.h | 9 | ||||
| -rw-r--r-- | backends/wince/CEScaler.cpp | 4 | ||||
| -rw-r--r-- | backends/wince/CEScaler.h | 4 | 
10 files changed, 136 insertions, 46 deletions
| diff --git a/backends/wince/CEActions.cpp b/backends/wince/CEActions.cpp index a10b056775..078e0f75a1 100644 --- a/backends/wince/CEActions.cpp +++ b/backends/wince/CEActions.cpp @@ -47,17 +47,21 @@ CEActions::~CEActions() {  void CEActions::init(GameDetector &detector) {  	if (!CEDevice::hasSmartphoneResolution())  		CEActionsPocket::init(detector); -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  	else  		CEActionsSmartphone::init(detector); -#endif +//#endif  } -void CEActions::initInstance(OSystem_WINCE3 *mainSystem) { +void CEActions::initInstanceMain(OSystem_WINCE3 *mainSystem) {  	_mainSystem = mainSystem; +} + +void CEActions::initInstanceGame() {  	_instance->_initialized = true;  } +  bool CEActions::initialized() {  	return _initialized;  } @@ -82,7 +86,7 @@ bool CEActions::performMapped(unsigned int keyCode, bool pushed) {  	int i;  	for (i=0; i<size(); i++) { -		if (_action_mapping[i] == keyCode)  +		if (_action_mapping[i] == keyCode && _action_enabled[i])   				return perform((ActionType)i, pushed);  	} diff --git a/backends/wince/CEActions.h b/backends/wince/CEActions.h index 128af42766..be07e558ac 100644 --- a/backends/wince/CEActions.h +++ b/backends/wince/CEActions.h @@ -41,7 +41,8 @@ class CEActions {  	public:  		static CEActions* Instance();  		static void init(GameDetector &detector); -		virtual void initInstance(OSystem_WINCE3 *mainSystem); +		virtual void initInstanceMain(OSystem_WINCE3 *mainSystem); +		virtual void initInstanceGame();  		bool initialized();  		// Actions diff --git a/backends/wince/CEActionsPocket.cpp b/backends/wince/CEActionsPocket.cpp index f382cff80f..06bfc24452 100644 --- a/backends/wince/CEActionsPocket.cpp +++ b/backends/wince/CEActionsPocket.cpp @@ -82,7 +82,12 @@ CEActionsPocket::CEActionsPocket(GameDetector &detector) :  } -void CEActionsPocket::initInstance(OSystem_WINCE3 *mainSystem) { +void CEActionsPocket::initInstanceMain(OSystem_WINCE3 *mainSystem) { +	// Nothing generic to do for Pocket PC +	CEActions::initInstanceMain(mainSystem); +} + +void CEActionsPocket::initInstanceGame() {  	bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0);  	bool is_sword1 = (_detector->_targetName == "sword1");  	bool is_sword2 = (strcmp(_detector->_targetName.c_str(), "sword2") == 0); @@ -90,7 +95,7 @@ void CEActionsPocket::initInstance(OSystem_WINCE3 *mainSystem) {  	bool is_sky = (_detector->_targetName == "sky");  	bool is_comi = (strncmp(_detector->_targetName.c_str(), "comi", 4) == 0); -	CEActions::initInstance(mainSystem); +	CEActions::initInstanceGame();  	// See if a right click mapping could be needed  	if (is_sword1 || is_sword2 || is_sky || is_queen || is_comi || diff --git a/backends/wince/CEActionsPocket.h b/backends/wince/CEActionsPocket.h index 348aba5553..f23937895b 100644 --- a/backends/wince/CEActionsPocket.h +++ b/backends/wince/CEActionsPocket.h @@ -58,8 +58,10 @@ class CEActionsPocket : public CEActions {  		bool perform(ActionType action, bool pushed = true);  		String actionName(ActionType action);  		int size(); +  		static void init(GameDetector &detector); -		void initInstance(OSystem_WINCE3 *mainSystem); +		void initInstanceMain(OSystem_WINCE3 *mainSystem); +		void initInstanceGame();  		// Action domain  		String domain(); diff --git a/backends/wince/CEActionsSmartphone.cpp b/backends/wince/CEActionsSmartphone.cpp index bf5e584412..1dfd7af190 100644 --- a/backends/wince/CEActionsSmartphone.cpp +++ b/backends/wince/CEActionsSmartphone.cpp @@ -19,12 +19,13 @@   *   */ +//#define SIMU_SMARTPHONE 1 -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  #include "stdafx.h" -#include "CEActionsPocket.h" -#include "KeysBuffer.h" +#include "CEActionsSmartphone.h" +#include "EventsBuffer.h"  #include "gui/message.h" @@ -44,6 +45,12 @@ const String smartphoneActionNames[] = {  	"Zone"  }; +#ifdef SIMU_SMARTPHONE +const int ACTIONS_SMARTPHONE_DEFAULT[] = { 0x111, 0x112, 0x114, 0x113, 0x11a, 0x11b, VK_LWIN, VK_ESCAPE, VK_F8 }; +#else +const int ACTIONS_SMARTPHONE_DEFAULT[] = { '4', '6', '8', '2', 0x11a, 0x11b, '0', VK_ESCAPE, VK_F10 }; +#endif +  void CEActionsSmartphone::init(GameDetector &detector) {  	_instance = new CEActionsSmartphone(detector);  } @@ -71,25 +78,15 @@ CEActionsSmartphone::CEActionsSmartphone(GameDetector &detector) :  	int i;  	for (i=0; i<SMARTPHONE_ACTION_LAST; i++) { -		_action_mapping[i] = 0; +		_action_mapping[i] = ACTIONS_SMARTPHONE_DEFAULT[i];  		_action_enabled[i] = false;  	}  } -void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) { -{ -	int i; -	bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0); -	bool is_sky = (_detector->_targetName == "sky"); - -	CEActions::initInstance(mainSystem); - -	// See if a right click mapping could be needed -	if (is_sky || _detector->_targetName == "samnmax") -		_right_click_needed = true; - -	// Initialize keys for different actions +void CEActionsSmartphone::initInstanceMain(OSystem_WINCE3 *mainSystem) { +	CEActions::initInstanceMain(mainSystem); +	  	// Mouse Up  	_action_enabled[SMARTPHONE_ACTION_UP] = true;  	// Mouse Down @@ -101,7 +98,21 @@ void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) {  	// Left Click  	_action_enabled[SMARTPHONE_ACTION_LEFTCLICK] = true;  	// Right Click -	_action_enabled[ACTION_RIGHTCLICK] = true; +	_action_enabled[SMARTPHONE_ACTION_RIGHTCLICK] = true; +} + +void CEActionsSmartphone::initInstanceGame() { +	bool is_simon = (strncmp(_detector->_targetName.c_str(), "simon", 5) == 0); +	bool is_sky = (_detector->_targetName == "sky"); +	bool is_queen = (_detector->_targetName == "queen"); +	 +	CEActions::initInstanceGame(); + +	// See if a right click mapping could be needed +	if (is_sky || _detector->_targetName == "samnmax") +		_right_click_needed = true; + +	// Initialize keys for different actions  	// Save  	if (is_simon)   		_action_enabled[SMARTPHONE_ACTION_SAVE] = false; @@ -133,10 +144,9 @@ void CEActionsSmartphone::initInstance(OSystem_WINCE3 *mainSystem) {  CEActionsSmartphone::~CEActionsSmartphone() {  } -bool CEActionsSmartphone::perform(ActionType action, bool pushed = true) { +bool CEActionsSmartphone::perform(ActionType action, bool pushed) {  	if (!pushed) { -		_mainSystem->clear_key_repeat(); -		return true; +		return false;  	}  	switch (action) { @@ -170,4 +180,4 @@ bool CEActionsSmartphone::perform(ActionType action, bool pushed = true) {  	return false;  } -#endif +//#endif diff --git a/backends/wince/CEActionsSmartphone.h b/backends/wince/CEActionsSmartphone.h index bbb9d244dc..d780121cca 100644 --- a/backends/wince/CEActionsSmartphone.h +++ b/backends/wince/CEActionsSmartphone.h @@ -22,7 +22,7 @@  #ifndef CEACTIONSSMARTPHONE  #define CEACTIONSSMARTPHONE -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  #include "common/stdafx.h"  #include "common/scummsys.h" @@ -59,7 +59,8 @@ class CEActionsSmartphone : public CEActions {  		String actionName(ActionType action);  		int size();  		static void init(GameDetector &detector); -		void initInstance(OSystem_WINCE3 *mainSystem); +		void initInstanceMain(OSystem_WINCE3 *mainSystem); +		void initInstanceGame();  		// Action domain  		String domain(); @@ -68,8 +69,9 @@ class CEActionsSmartphone : public CEActions {  		~CEActionsSmartphone();  	private:  		CEActionsSmartphone(GameDetector &detector); +		bool _right_click_needed;  	};	  #endif -#endif
\ No newline at end of file +//#endif
\ No newline at end of file diff --git a/backends/wince/CEDevice.cpp b/backends/wince/CEDevice.cpp index 0ef165f6f2..05389de03e 100644 --- a/backends/wince/CEDevice.cpp +++ b/backends/wince/CEDevice.cpp @@ -31,7 +31,7 @@  #define KEY_INBOX 0xc3  #define KEY_TASK 0xc4 -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  const char* SMARTPHONE_KEYS_NAME[] = {  	"1", "2", "3","4", "5", "6", "7", "8", "9", "*", "0", "#",  	"Home", "Back", "Up", "Down", "Left", "Right", "Action", "Hang up", "Call", @@ -39,32 +39,99 @@ const char* SMARTPHONE_KEYS_NAME[] = {  	0  }; +// Old mapping from the previous (non SDL) version. To be forgotten. +/*  const int SMARTPHONE_KEYS_MAPPING[] = {          '1', '2', '3', '4', '5', '6', '7', '8', '9', VK_F8, '0', VK_F9,          VK_LWIN, VK_ESCAPE, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_RETURN, VK_F4, VK_F3,          VK_F1, VK_F2, VK_F18, VK_F6, VK_F7, VK_F10, 0xff, 0  }; -#endif +*/ + +// FIXME : Home and Record are not mapped +const int SMARTPHONE_KEYS_MAPPING[] = { +		'1', '2', '3', '4', '5', '6', '7', '8', '9', VK_F9, '0', VK_F10, +		0xFF, VK_ESCAPE, 0x113, 0x114, 0x111, 0x112, VK_RETURN, 0x11D, 0x11C, +		0x11A, 0x11B, 0x11D, 0x11F, 0x120, 0xFF, 0 +}; + +static void (WINAPI* _SHIdleTimerReset)(void) = NULL; +static HANDLE (WINAPI* _SetPowerRequirement)(PVOID,int,ULONG,PVOID,ULONG) = NULL; +static DWORD (WINAPI* _ReleasePowerRequirement)(HANDLE) = NULL; +static HANDLE _hPowerManagement = NULL; +static DWORD _lastTime = 0; + +#define TIMER_TRIGGER 9000 + +//#endif + +// Power management code borrowed from MoDaCo & Betaplayer. Thanks ! +void CEDevice::init() { +	HINSTANCE dll = LoadLibrary(TEXT("aygshell.dll")); +	if (dll) { +		*(FARPROC*)&_SHIdleTimerReset = GetProcAddress(dll, MAKEINTRESOURCE(2006)); +	} +	dll = LoadLibrary(TEXT("coredll.dll")); +	if (dll) { +		*(FARPROC*)&_SetPowerRequirement = GetProcAddress(dll, TEXT("SetPowerRequirement")); +		*(FARPROC*)&_ReleasePowerRequirement = GetProcAddress(dll, TEXT("ReleasePowerRequirement")); + +	} +	if (_SetPowerRequirement) +		_hPowerManagement = _SetPowerRequirement(TEXT("BKL1:"), 0, 1, NULL, 0); +	_lastTime = GetTickCount(); +} + +void CEDevice::end() { +	if (_ReleasePowerRequirement && _hPowerManagement) { +		_ReleasePowerRequirement(_hPowerManagement); +	} +} +void CEDevice::wakeUp() { +	DWORD currentTime = GetTickCount(); +	if (currentTime > _lastTime + TIMER_TRIGGER) { +		_lastTime = currentTime; +		SystemIdleTimerReset(); +		if (_SHIdleTimerReset) +			_SHIdleTimerReset(); +	} +}  bool CEDevice::hasPocketPCResolution() { +#ifdef SIMU_SMARTPHONE +	return false; +#else  	if (OSystem_WINCE3::isOzone() && hasWideResolution())  		return true;  	return (OSystem_WINCE3::getScreenWidth() < 320 && OSystem_WINCE3::getScreenWidth() >= 240); +#endif  }  bool CEDevice::hasDesktopResolution() { +#ifdef SIMU_SMARTPHONE +	return false; +#else  	if (OSystem_WINCE3::isOzone() && hasWideResolution())  		return true;  	return (OSystem_WINCE3::getScreenWidth() >= 320); +#endif  }  bool CEDevice::hasWideResolution() { +#ifdef SIMU_SMARTPHONE +	return false; +#else  	return (OSystem_WINCE3::getScreenWidth() >= 640 || OSystem_WINCE3::getScreenHeight() >= 640); +#endif  }  bool CEDevice::hasSmartphoneResolution() { +#ifdef SIMU_SMARTPHONE +	return true; +#else  	return (OSystem_WINCE3::getScreenWidth() < 240); +#endif  }  Common::String CEDevice::getKeyName(unsigned int keyCode) { @@ -90,7 +157,7 @@ Common::String CEDevice::getKeyName(unsigned int keyCode) {  	if (keyCode == SDLK_F4)   		return "F4 (hard 4)"; -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  	if (hasSmartphoneResolution()) {  		int i = 0;  		while (SMARTPHONE_KEYS_MAPPING[i]) { @@ -99,7 +166,7 @@ Common::String CEDevice::getKeyName(unsigned int keyCode) {  			i++;  		}  	} -#endif +//#endif  	sprintf(key_name, "Key %.4x", keyCode);  	return key_name;	 diff --git a/backends/wince/CEDevice.h b/backends/wince/CEDevice.h index b8b0dd3f8f..d32b19d7d1 100644 --- a/backends/wince/CEDevice.h +++ b/backends/wince/CEDevice.h @@ -31,15 +31,14 @@  class CEDevice {  	public: +		static void init(); +		static void end(); +		static void wakeUp();  		static bool hasPocketPCResolution();  		static bool hasDesktopResolution();  		static bool hasWideResolution();  		static bool hasSmartphoneResolution(); -		static Common::String getKeyName(unsigned int keyCode); -	private: -		typedef int (*tGXVoidFunction)(void); -		typedef struct GXKeyList (*tGXGetDefaultKeys)(int); - +		static Common::String getKeyName(unsigned int keyCode);	  };  #endif diff --git a/backends/wince/CEScaler.cpp b/backends/wince/CEScaler.cpp index 189abe0134..e1cda2fd1b 100644 --- a/backends/wince/CEScaler.cpp +++ b/backends/wince/CEScaler.cpp @@ -120,7 +120,7 @@ void PocketPCHalfZoom(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint3  	}  } -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {  	uint8 *work;  	int i; @@ -151,5 +151,5 @@ void SmartphoneLandscape(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, ui  		}  	}  }	 -#endif +//#endif diff --git a/backends/wince/CEScaler.h b/backends/wince/CEScaler.h index df6d2364ce..0b41fa3fc5 100644 --- a/backends/wince/CEScaler.h +++ b/backends/wince/CEScaler.h @@ -31,9 +31,9 @@  DECLARE_SCALER(PocketPCPortrait);  DECLARE_SCALER(PocketPCHalf);  DECLARE_SCALER(PocketPCHalfZoom); -#ifdef WIN32_PLATFORM_WFSP +//#ifdef WIN32_PLATFORM_WFSP  DECLARE_SCALER(SmartphoneLandscape); -#endif +//#endif  void initCEScaler(void); | 
