最近在調wince6 0的電源管理

2021-05-24 14:04:37 字數 2789 閱讀 6268

在platform.reg裡對timerout賦值成零,發現生成的登錄檔是更新了,但是值沒有起作用。

在common.reg裡對timerout賦值成零,可以生效。感覺還是很奇怪。

最後再網上查詢了,發現pm正常啟動讀到的是預設值,沒有讀取到登錄檔的值。

說明:wince 的電源管理module就是pm.dll,其**定位在public/common/oak/driver/pm下面。

wince啟動時,pm將在register下讀取使用者設定的timeout vaule(如題),登錄檔位置和我設定的demo值為:

hkey_local_machine/system/currentcontrolset/control/power/timeouts]

"acuseridle"=dword:0a               ; in seconds

"acsystemidle"=dword:20    ; in seconds

"acsuspend"=dword:3c                ; in seconds

"battuseridle"=dword:0a            ; in seconds

"battsystemidle"=dword:20   ; in seconds

"battsuspend"=dword:3c            ; in seconds

pm預設的休眠時間為(ac,battery都一樣)

#define def_timeouttouseridle           60          // in seconds, 0 to disable

#define def_timeouttosystemidle         300         // in seconds, 0 to disable

#define def_timeouttosuspend            600         // in seconds, 0 to disable

m_dwacsuspendtimeout = def_timeouttosuspend * 1000;   

m_dwactimeouttosystemidle = def_timeouttosystemidle * 1000 ;

m_dwacuseridletimeout = def_timeouttouseridle * 1000;

m_dwbattsuspendtimeout = def_timeouttosuspend * 1000;

m_dwbatttimeouttosystemidle = def_timeouttosystemidle * 1000 ;

m_dwbattuseridletimeout = def_timeouttouseridle * 1000;

在pm裝載時,函式platformloadtimeouts將從登錄檔中得到這個時間。

這裡,pm module存在乙個bug,不管你在 電源=》方案 中設定各種空閒time為多少,重新啟動系統之後,platformloadtimeouts讀取到的是預設值60,300,600。而我們的登錄檔中明明就是我們設定的值啊!

通過將pm porting 到bsp中來編譯,發現在 電源=》方案 設定完成後,pm的platformloadtimeouts重新被呼叫,這樣就有效了,而在os 啟動時platformloadtimeouts

m_dwacsuspendtimeout = regreadstatetimeout(hk, _t("acsuspend"), def_timeouttosuspend);

m_dwactimeouttosystemidle = regreadstatetimeout(hk, _t("acsystemidle"), def_timeouttosystemidle);

m_dwacuseridletimeout = regreadstatetimeout(hk, _t("acuseridle"), def_timeouttouseridle);

m_dwbattsuspendtimeout = regreadstatetimeout(hk, _t("battsuspend"), def_timeouttouseridle);

m_dwbatttimeouttosystemidle = regreadstatetimeout(hk, _t("battsystemidle"), def_timeouttosystemidle);

m_dwbattuseridletimeout = regreadstatetimeout(hk, _t("battuseridle"), def_timeouttosuspend);

返回夜沒有錯誤,確實是60,300,600。查詢發現這時候使用者登錄檔還沒有裝入,其就讀出了預設值。

知道問題的所在,我們只需要在登錄檔裝入之後再invoke 一下platformloadtimeouts就ok了,

跟蹤 platformloadtimeouts的invoke,有pmreloadactivitytimeouts《==pm_reload_activity_timeouts_event 《== m_hevreloadactivitytimeouts 《== _t("powermanager/reloadactivitytimeouts")

我們就可以用 乙個全域性事件名 _t("powermanager/reloadactivitytimeouts") 來在想發起乙個platformloadtimeouts的動作就ok了。將下面的**放入合適的位置

handle hevent = createevent(null, false, false,_t("powermanager/reloadactivitytimeouts"));

if(hevent != null)

wince6 0 電源管理 遇到 問題與解決

1.在做wince6.0 電源管理的時候 無法呼叫到 oempoweroff 這個函式,搞我一天時間沒想到是因為實現xip所以沒呼叫到 先解決方法如下 說起來很簡單吧 因為用的是multi bin,沒有將gwes.dll devmgr.dll servicesenum.dll servicesd.e...

wince 6 0 的編譯錯誤

剛才新增wince6.0 對mfc的支援,只是在platform.bib中增加了幾個mfc相關的dll而已,按照wince5.0 經驗,就是執copy file to release directory就可以了,但是我執行它之後去工程目錄下看並沒有更新platform.bib,不知道咋回事,後來我手...

wince6 0的編譯命令分析

下面從csdn幫助文件簡要說明vs2005下面的系統編譯命令,這些命令位於build advanced build commonds 一共有六條命令,分別是 1.sysgen 2.clean sysgen 3.build and sysgen 4.rebuild and clean sysgen 5...