一個在 driver interface : init 時 create : Battery
BatteryThreadProc :
BatteryAPIGetSystemPowerStatusEx2(&tmpst);用來比較的另一個變數pbc->是
IfPowerChange ( &tmpst, &pbc->st )
pbc = (PBATTERY_CONTEXT) pvParam;pvParma 是ThreadProc的argument :
DWORD WINAPI BatteryThreadProc(PVOID pvParam)在createthread時:
ghtBattery = CreateThread(NULL, 0, BatteryThreadProc, &gBatteryContext, 0, NULL);所以pbc 就是gBatteryContext。
這個variable好像在其他process中沒有人用,所以是給 BatteryThreadProc專用的。
所以 tempst 和pbc->st 的動作,是在 IfPowerChange( )中update的。
但是也不是每次call都update,分成
- Only Voltage Change
- Other Change
當IfPowerChange( ),就用 PowerPolicyNotify(PPN_POWERCHANGE, 0) 通知 Power Management driver。
ToDo : 如果voltage 還沒到 low voltage confirm, 要postmessage的電壓,但是 lifepercentage已經是 0 ,會不會 auto-off ?
結果: 不是kernel 關的,還是battery driver自己關的,在UpdateStatus( )這個Thread中有判斷batterypercentage 和 voltage,都達到 MIN value後,就會postmessage跟call keyboard event.
實際上送出 off message的只有一個地方 : updatestatus( )。
沒有留言:
張貼留言