最近在做電源管理,初識 WINCE 對電源管理只知道 ON????? ?UserIdle????? SystemIdle??? Suspend? 這幾種狀態(tài)(初學,寫錯希望高手指點)。
?
最初的想法是在?? UserIdle 的地方只關背光,但是不知道如何下手,還是 GOOGLE 幫了大忙,不斷的 GOGO 哈哈。
最后發(fā)現(xiàn)
建立支持電源管理的設備驅動
為了建立一個能夠對設備進行電源管理的驅動程序,我們必須首先建立一個支持non-COM-related設備接口的驅動程序。non-COM-related設備接口標明這個設備是支持電源管理的??梢杂靡韵路绞浇⑦@種接口:
????l????????? 可以在注冊表中,用激活設備所用的IClass值定義接口;
????l????????? 可以在驅動程序的Init函數中,設置注冊表中的IClass值;
????l????????? 可以使用ActivateDeviceEx的參數REGINI設置IClass值;
????l????????? 可以在驅動程序中顯示地調用AdvertiseInterface函數。
電源管理器通過IOCTL代碼來和驅動通信。通常情況下,當一個驅動程序聲明為支持電源管理時,驅動只需要在DeviceIoControl中實現(xiàn)電源的管理即可。下面是電源管理器用來與驅動通信的IOCTL代碼:
????l????????? IOCTL_POWER_CAPABILITIES:代表電源管理器請求設備驅動返回設備支持的電源狀態(tài)及相關特征;
????l????????? IOCTL_POWER_SET:請求驅動更新設備的電源狀態(tài);
????l????????? IOCTL_POWER_QUERY:電源管理器詢問設備是否準備好進行狀態(tài)切換;
????l????????? IOCTL_POWER_GET:請求驅動返回當前設備的電源狀態(tài);
????l????????? IOCTL_REGISTER_POWER_RELATIONSHIP:通知父設備注冊所有它所控制的設備。
其中IOCTL_POWER_CAPABILITIES和IOCTL_POWER_SET是支持電源管理的設備驅動必須實現(xiàn)的。
?
?
可以知道系統(tǒng)在進入 UserIdle 的時候會給流驅動發(fā)一個IOCTL_POWER_SET消息,通過IOCTL 來接收。
但是只設置 IOCTL 的 IOCTL_POWER_SET 消息是不夠的,
在流驅動的注冊表里面需要加入 PM類入口 "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
這樣基本 OK 了, 有待測試,
現(xiàn)介紹到這里,睡覺啦,
明天繼續(xù)。
?
?
?
?