window mobile power management关于device power state的管理
2010-08-22 13:11:00 来源:WEB开发网ceilingDx=D1
floorDx=D3
那么D0,D4就是power manager不用考虑的状态,D1,D2,D3就是有效的电源状态。
setDx是最厉害的一个状态,它默认是PwrDeviceUnspecified,只要它不是PwrDeviceUnspecified,那么这个设备的最终状态就等于setDx。
那么setDx是谁设置的呢?
从名字我们一猜就知道,那就是SetDevicePower()。也就是说,只要这个函数一出马,那么不管系统当前是什么状态,或者这个设备是什么状态,这个对应的设备会立即切换到你指定的状态。因此,call这个函数的时候一定要三思而后行。白屏现象就很有可能是他造成的。
例如:
SetDevicePower(_T("BKL1:"),POWER_NAME,D4);
这句话就好像在说:“power manager,我命令你把BKL1:变成D4!!”
如果setDx是PwrDeviceUnspecified,那么power manager就开始考虑lastReqDx。lastReqDx的气势就要虚弱很多,也正如microsoft的文档所说,如果你想改变一个设备的系统状态,同时还想争得power manager的同意,不想太强制,那么call DevicePowerNotify()是再合适不过的了。
例如:
DevicePowerNotify(_T("BKL1:"),D4,POWER_NAME);
这句话就好像在说:“power manager,你看我现在把BKL1:变成D4如何?!”
power manager接到这样的请求,它也是需要掂量一下的,那么它的原则是什么呢?只要是有效状态就可以啦!也就是说ceilingDx〈 lastReqDx〈floorDx。
如果ceilingDx=D1,lastReqDx=D0,那么设备最终也只能是D1。
再如floorDx=D3,astReqDx=D4,那么设备最终也只能是D3。
如果 ceilingDx=D1,floorDx=D3,你请求D2,那么设备最终就是D2。
以上原则很简单吧!可是你有没有注意到我没有提到ceilingDx与floorDx是如何确定的。说到这个就不得不说说SetPowerRequirement()和
ReleasePowerRequirement()两个函数。
例如:
SetPowerRequirement(_T("BKL1:"),D1,POWER_NAME,NULL,0);
好像再说在说:“power manager,帮我把BKL1:变成D1”。你觉得呢?当然不是!
其实你的真正意思是在说:“power manager,至少帮我把BKL1:变成D1”。
然后power manager问你,“D0可以么?(背光更亮一点可以么?)”。
然后你会说,“当然也可以。”
更多精彩
赞助商链接