日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

應用層調用如下:

[cpp]view plaincopy
  • 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
  • if(dwStateHint?==?POWER_STATE_OFF){??
  • ????????HANDLE?h?=?CreateFile(L"PWR1:",GENERIC_READ?|?GENERIC_WRITE,?0,NULL,OPEN_EXISTING,0,0?);??
  • ????????if(h?!=?INVALID_HANDLE_VALUE){??
  • ????????????DeviceIoControl(h,?0x0,?NULL,?0,?NULL,?0,?NULL,?NULL);??
  • ????????????CloseHandle(h);??
  • ????????}??
  • ????}??

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

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

    在return之前添加以下處理:

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

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

    已經測試通過,用戶可以在應用層通過SetSystemPowerState 來進行關機


    在此記錄一下

    總結

    以上是生活随笔為你收集整理的解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。