解決6410 WINCE6 應用程式層調用SetSystemPowerState api關機無效的問題

來源:互聯網
上載者:User

6410平台下的wince6系統,在應用程式層中使用SetSystemPowerState api函數關機發現無效。

應用程式層調用如下:

[cpp] view
plaincopy

  1. SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE);  


註:該調用需要引用pm.h標頭檔,該標頭檔在wince600目錄下可找到,同時需要使用#pragma comment(lib, "coredll.lib")來引用靜態庫

跟蹤pm電源管理驅動發現,傳進來的POWER_STATE_OFF的參數在某個地方被屏蔽掉了,沒有接著往下走。由於跳轉調用的太多了,無法準確定位到哪裡屏蔽掉了。而且就算是定位到了要修改PM驅動也會很麻煩。所以就找到了PlatformSendSystemPowerState()這個位置。只要在這下面,針對POWER_STATE_OFF的情況進行處理即可。我的處理方法是,直接在這個地方調用到PowerButton的驅動,去進行關機處理。因為在這個PM驅動下無法控制到GPIO,所以就打算直接調用驅動介面來控制。

具體修改如下:

1、修改C:\WINCE600\public\common\oak\drivers\pm\pdd\default\platform.cpp檔案中的DWORD WINAPI PlatformSendSystemPowerState(LPCWSTR pwsState, DWORD dwStateHint, DWORD dwOptions)函數。

在return之前加上這麼一段:

[cpp] view
plaincopy

  1. if(dwStateHint == POWER_STATE_OFF){  
  2.         HANDLE h = CreateFile(L"PWR1:",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,0 );  
  3.         if(h != INVALID_HANDLE_VALUE){  
  4.             DeviceIoControl(h, 0x0, NULL, 0, NULL, 0, NULL, NULL);  
  5.             CloseHandle(h);  
  6.         }  
  7.     }  


2、在PowerButton驅動中添加相應的關機控制處理:

修改C:\WINCE600\PLATFORM\SMDK6410\src\drivers\PowerButton\PowerButton.c檔案中的PWR_IOControl()函數。

在return之前添加以下處理:

[cpp] view
plaincopy

  1. if(dwCode == 0x0){// power off  
  2.         RETAILMSG(1, (TEXT("*** [PWR] PWR_IOControl dwCode:%#x ***\r\n"), dwCode) );  
  3.         pSysConReg->INFORM2 = 0x55555555;        //flag indicate entering sleep mode   
  4.         SetSystemPowerState(NULL, POWER_STATE_SUSPEND, 0);  
  5.         return TRUE;  
  6.     }  


上述都修改完後,把這兩個驅動rebuild以下,然後再對整個工程進行build and sysgen。

已經測試通過,使用者可以在應用程式層通過SetSystemPowerState 來進行關機

在此記錄一下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.