四极管:WinCE 电源管理概述(五)

来源:互联网 发布:mac 终端翻墙工具 编辑:程序博客网 时间:2024/05/22 15:20

二、电源状态

1、设备电源状态

    设备的电源状态定义是静态预定。电源管理器递给一个设备状态给设备驱动,然后这个驱动负责根据设备的能力来映射为相应的电源状态,并且让设备工作在恰当的电源状态下。下表是对各个电源状态的描述。

设备电源状态

注册表键值

描述

Full on

D0

此状态表示设备已开启或正在运行,系统要求设备工作在最大功耗和最高性能的状态

Low on

D1

此状态表示设备已开启或正在运行,但以低于D0状态的功耗及性能运行。D1状态适用于设备已经被使用,但以较低的性能运行

Standby

D2

此状态表示设备部分供电,且设备在需要时可以自动唤醒。

Sleep

D3

睡眠状态。保证唤醒的最小供电,在需要时能自动唤醒并初始化。

Off

D4

关闭状态,不供电

一种设备并不能支持以上所有的设备电源状态。但是所有的设备都支持D0设备电源状态。如果驱动程序收到要求将设备进入它不支持的电源状态的请求,驱动程序将使设备进入下一个支持的电源状态。例如,电源管理器请求设备进入D2电源状态,但是该设备并不支持D2状态,这时如果设备支持D3或者D4状态,那么驱动程序将使设备进入D3或者D4状态。如果某一设备需要进入D3状态,但是该设备却不能唤醒系统,那么该设备将进入D4状态。以简单化驱动程序的执行。

    电源管理器可以适当的将系统电源状态映射为设备电源状态。例如,一个设备支持D0及D4状态,那么电源管理器不会直接请求设备进入D4电源状态。如果D3或者D4将设为此设备的最小电源状态,电源管理器会一直等待直到系统进入D3或者D4状态时,再将设备置为D4状态。如果此设备的最小电源状态被设为D0、D1、或D2,电源管理器将使设备一直运行于D0状态。

    当一个设备驱动被加载,将设备置为D0状态。在卸载驱动程序时,如果可能的话,应将设备置为D4状态。如果设备在启动时进入另一个设备的电源状态(除了D0外的其它状态),它可以在处理IOCTL_POWER_CAPABILITIES时发出DevicePowerNotify请求。

2、系统电源状态

    系统电源状态由OEM定义,他们的名称被OEM定义。例如,SystemIdle,OnBattery,InCradle,OutOfCradle等,这些名称不是系统预定义的,也不是线性排列的,可以再系统配置的注册表键值中定义系统的电源状态名称,有多少个系统电源状态并没有固定的限制。

    也可以创建系统电源状态与预定义的设备电源状态的显示映射关系,显示映射需要在注册表中定义,系统电源状态明确的执行了系统的所有设备所需的最大设备电源状态。

    电源管理器定义了四个系统电源状态,分别是On,Userldle,Systemldle,Suspend。如果用户停止使用,电源状态将被设为Userldle。当用户在一定的周期内不适用系统(如30s),则系统进入Systemldle状态。只要设备处于活动的状态,系统将一直保持在Systemldle状态,如果设备停止活动,系统将进入Suspend状态。

    Userldle状态的目的是当用户正在使用该设备,但是没有操作该设备。例如,用户一直在观看屏幕显示,但是却没有操作,Systemldle状态被用于用户没有直接使用的设备,但是处理器任然继续运行。例如,在传输文件时,设备可能处于空闲状态,但实际上处理器依旧在运行,知道文件传输完成。

    电源管理器根据UserActivity和SystemActivity定时器对用户以及系统的活动进行判定。在定时器超时时,根据系统当前的供电状况进行不同的系统电源状态的转换。

Platform Builder提供的Windows CE运行时image所使用的都是外接电源模式。你可以选择实现一套在使用电池供电时的独立电源状态。复制电源管理器示例代码的PDD目录,并对其做适当的修改即可。

2.1 系统电源状态到设备电源状态的映射

    开发者可以在系统配置中将电源状态名定义为注册键。系统电源状态到设备电源状态的映射被列举为注册表里每一个电源状态名下的值,注册表示例定义如下:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Example]
    Default=dword:0; D0
    Flags=dword:10000; POWER_STATE_ON
    COM1:=dword1; D1

上面的注册表定义了名为Example的系统电源状态,并设置了除COM1:被限制为最高运行于D1设备电源状态外,其他的所有设备最高均可运行于D0设备电源状态。其中Flags列是一个标识码,用于表示Pm.h头文件中定义的POWER_STATE_ON标记。如果需要OEM也可以定义自己的电源状态标记。

下表列出了键值名称及其描述:

注册表值

描述

Name

定义系统的电源状态名

Flags

表示POWER_STATE_XXX值的掩码,在Pm.h中定义;或者是OEM定义的电源状态标识

(Default)

所有设备的默认电源设置。当没有定义默认设置时,电源管理器假定设备的默认电源状态为D0

Dx

设备电源状态,设置为D0、D1、D2、D3或者D4.这是在系统电源状态Name时设备运行的状态

DeviceName

可选,定义除(Default)之外有特定设备电源状态需求的设备,如COM1:dowrd1

电源管理器支持多种设备类型的映射。例如:NDIS迷你接口及块设备驱动器设备类型在Pm.h中会被指定为其自身的GUID类型。其他类型被管理设备的默认值也可以在注册表中指定。例如:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Example\{98C5250D-C29A-4985-AE5F-AFE5367E5006}]
    Default=dword:1; D1
    "CISCO1"=dword:0; D0

上面注册表设置电源管理器限制所有NDIS迷你接口设备在Example系统电源状态下时均运行于D1设备电源状态,只有名为CISCO1的设备最高可运行于D0状态。

原创粉丝点击