Windows CE Windows CE从4.0版本引入电源管理器(Power Manager)来提供管理电源框架。 电源管理器负责管理设备电源,提高操作系统整体能耗效率,并且与不支持电源管理功能的设备和应用兼容,在内核OAL层、设备驱动程序和应用程序之间充当中间人角 {MOD}。电源管理器还严格区分系统的电源状态与设备的电源状态,让一些智能设备可管理自己的电源状态。电源管理器结构
Windows CE电源管理器PM.DLL直接与设备管理器Device.exe链接,并支持三个接口:
Windows CE系统电源状态的改变可以作为一个OEM事件,或者通过OEM的应用程序和工具调用SetPowerState()函数产生。Windows CE支持以下几种电源状态:(1)ON状态,用户在主动使用设备。(2)UserIdle状态,用户与设备停止交互,但仍有可能使用设备。(3)SystemIdle状态,在经过一段时间的UserIdle后进入此状态,但是驱动和系统仍然活动。(4)Suspend状态,当驱动程序和系统进程不再与系统交互时进入此状态。(5)ColdReboot和Reboot状态,冷启动后系统电源状态。
Windows CE设备电源状态管理和系统相分离。驱动程序需要实现:(1)响应电源管理器的请求,报告它的电源能力。(2)处理电源管理器发送的电源请求。(3)启动后给设备加电。(4)关闭时给设备停止供电。(5)如果它可以唤醒系统,则为设备启用唤醒功能。设备还可以通过调用RegisterPower Relationship()函数告诉电源管理器它为独立的子设备驱动处理电源请求。例如总线设备驱动或某些设备驱动代理。 电源管理器和支持电源管理的设备之间的交互包括两种机制:(1)电源管理器到驱动程序,电源管理器使用DeviceIoControl()函数向设备驱动程序发送I/O控制(IOCTLs)。设备必须能响应管理器的电源管理能力查询、状态设置等IOCTLs。(2)驱动程序到电源管理器,驱动程序使用DevicePower Notify()函数与电源管理器交互,请求电源管理器把它的设备置于某种状态。如果电源管理器接受该请求则通过发送IOCTL_POWER_SET等IOCTLS来进行设置。
应用程序与电源管理器交互
Windows CE应用程序与电源管理有两种交互机制:(1)应用程序接口,用以获取当前系统和设备的电源状态;(2)电源事件提醒接口,提供电源事件的提醒。应用程序接口中,GetSystemPowerState()函数用来返回当前系统电源状态。SetSystemPowerState()函数可被OEM程序或者其他应用程序调用,来把系统电源状态设置为需要值。SetDevicePower()用来设置设备电源状态。为了实现提醒接口,应用程序还得通过CreateMsgqueue()函数建立消息队列,将其句柄传给电源管理器。而后电源管理器把提醒发送到消息队列中,调用者可选择可用提醒的一个子集进行响应。