2.26.2008

battery driver - notify and state change

battery driver竟然用兩個thread (不同步)

一個在 driver interface : init 時 create : Battery

BatteryThreadProc :
BatteryAPIGetSystemPowerStatusEx2(&tmpst);
IfPowerChange ( &tmpst, &pbc->st )
用來比較的另一個變數pbc->是
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
Only Voltage Change的話,不update battery new, old。

當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( )。

沒有留言: