[计算机软件及应用]翻译msdn WinCE 电源管理.doc
《[计算机软件及应用]翻译msdn WinCE 电源管理.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]翻译msdn WinCE 电源管理.doc(45页珍藏版)》请在三一办公上搜索。
1、翻译msdn WinCE 电源管理 翻译msdn Windows CE 5.0 Documentation中Developing a Device Driver-Power Management内容。 电源管理模块管理设备的电源,并整体改进操作系统的电源使用效率;它提供每一个设备的电源管理,同时能与不支持电源管理的应用程序及驱动程序共存。 使用电源管理模块可以有效的减少目标设备的电源消耗,同时,能在reset(复位)、on(运行)、idle(空闲)、和supend(挂起)的电源状态,并保护RAM中的文件系统。 电源管理具有以下特性: 1、使设备具有自行电源管理功能;2、建立一种在系统中使用设备
2、电源在挂起和恢复状态间切换的机制;3、一个对系统环境、电源状态和设备电源状态有统一认识的模块。你可以自定义电源管理,使全系统的电源分配适合您的设备;4、当系统挂起或者恢复时,使系统跳过所有代码调用PowerOffSystem函数。This API should only be called by the Power Manager, or by the OEM if the Power Manager is not present and after FileSystemPowerFunction is called.一、 电源管理架构在不依赖电源管理器的模型的情况下,只能对设备进行简单的管理
3、。电源管理器为OEM厂商和设备驱动程序的开发提供了较大的灵活性。在电源管理器的模 型下,设备驱动开发人员不用为了兼容电源管理模型而牺牲驱动程序本身的性能。在电源管理器的模型下,操作系统在挂起或者恢复时,设备会收到中断处理时产生 的标识信息,所以在设备挂起状态时可以做的工作和有多长时间做这一工作都被阉割限制,下面的介绍描述了Windows CE的电源管理结构。使用电源管理器时,设备会从I/O控制代码(IOCTLs)收到电源状态改变的通知。因为IOCTLs在线程中执行,这样子驱动开发者就可以更为灵 活的处理电源的状态的改变。使用IOCTLs可以区分系统电源和设备电源在状态。这样子,在系统运行时可以
4、关闭一些设备,而某些设备也可以在系统挂起时任 然开启。 电源管理器除了管理设备电源,还向应用程序通知其他与电源相关发生的事件。例如:当系统从挂起状态恢复时,电源管理器会向应用程序发出相应的通知。电源管理器是一个名为pm.dll的动态链接库(DLL),系统运行时被Device.exe进程直接调用。当电源管理 API被应用程序调用时,Device.exe调用pm.dll的入口函数。在Platform Builder 4.0及其后续版本中提供了Pm.dll的源代码,OEM厂商可以根据其设备修改Pm.dll。电源管理器做为设备,应用程序和定义操作系统电源状态之间的调解者。电源管理器定义了下列规则,使上
5、述三部分进行通信:1)系统电源状态限定了所有设备的最大功耗;2)应用程序以最小功耗来获取指定设备的最低性能等级。3)当设备功耗在其最大功耗与最小功耗范围内时,电源管理器允许设备自行管理电源;4)如果最小功耗高于最大功耗,那么,在应用程序请求设备运行期间,设备电源将持续提升。5)、设备可以在一个或多个电源状态下运行。电源状态以有限的数字表示。详见设备电源状态章节。6)系统转为挂起状态后,对应用程序有用的最小功耗将被取消。系统电源状态是描述所有设备中最大的设备电源状态。系统电源状态由OEM厂商定义,并在注册表中描述,同时,在电源管理器中可以加入部分支持代码。OEM厂商可以定义任意数量的系统电源状态
6、。欲了解更多信息,请参阅系统电源状态章节。在电源管理器框架内部,OEM厂商可以定义系统电源状态来设定最大设备电源状态。设备调用DevicePowerNotify来控制其电源等级,应用程序调用SetPowerRequirement来确认它们所需要的设备运行在一个可以接受的性能水平。分享到: 1、电源管理器和ACPI/APM 电源管理器与高级配置和电源接口(ACPI)或者高级管理(APM)电源管理机制没有关系。ACPI规范定义了操作系统电源从高功耗-高性能到低功耗-低性能的线性集。使OEM厂商能够定义任意数量的系统电源状态,但是并不要求他们线性排列。 这将鼓励广大开发者根据设备或者环境的具体情况定
7、义自己的操作系统电源状态。例如,开发者可以定义操作系统的电源状态等,某些设备如果不在保护状态下就处 于关闭状态,或者当操作系统使用交流外接电源时使设备运行在一个较高的功耗水平。同样的,开发者也可以根据不同的操作系统环境定义不同的空闲或挂起状态。 这对开发者在定制电源管理模块的时候做好各种电源状态之间的切换至关重要。 ACPI模式与系统电源状态的模式有着显著的区别。但是,设备电源状态表面上与ACPI设备的电源状态类似。但是也有一些细微的差别,例如在D3电源状态,被作为操作系统挂起时可以指定设备的唤醒源。分享到: 2、挂起和恢复回调函数 挂起和恢复回调函数与电源管理模块是互相独立的,当CPU停止运
8、行,即操作系统即将进入电源挂起状态时,回调函数被系统调用。并且在 OEMpowerOff被调用前立即执行。在电源管理模块关闭电源并且进入挂起状态之前,电源管理模块会对设备驱动进行调用(IOCTL),(上面的不是 很理解),这种情况并非总是如此,但是电源管理模块允许设备在系统运行时被关闭,允许设备在系统挂起的时候处于开启状态。当设备电源状态为D0,D1或D2,如果掉电事件发生时,开发者可以决定进行何种处理,通常关闭设备电源,然后在加电时 恢复供电。然而,如果设备可以不依赖CPU运行,在挂起状态时或许可以使此设备运行。如果设备在挂起期间处于供电状态,那可能表明,电源管理器配置是不正 确的,或者是应
9、用程序使用POWER_FORCE标记对此设备进行了SetPowerRequirement调用。3、其他电源管理的API 电源管理器是基于标准的Windows CE电源架构的基础上的,不管电源管理器时如何运行,流接口设备驱动程序在系统挂起或者恢复时总是通过XXX_PowerUp(设备管理器)和 XXX_PowerDown(设备管理器)来通知。下表列出了电源管理相关的API.电源管理器创建于标准的Windows CE电源体系结构的上层。所以,不管电源管理器如何运行,流接口设备驱动程序在系统挂起或恢复时总是通过XXX_PowerUp和XXX_PowerDown获取通知。下表列出了与电源管理相关的AP
10、I。函数名描述GetSystemPowerStatusEx2检索电池状态信息PowerPolicyNotify以事件的方式通知电源管理器,以便执行必要的处理,由OEM创建电源政策。OEMldle在没有线程需要运行时将处理器置为空闲状态OEMPowerOff当关机键被按下,或者图形、窗体、事件子系统(GWES)超时时被调用。使处理器进入挂起状态。XXX_PowerDown(Device Manager)挂起电源设备,但是仅用于被软件控制关闭的设备。XXX_PowerUp恢复设备电源二、电源状态1、设备电源状态 设备的电源状态定义是静态预定。电源管理器递给一个设备状态给设备驱动,然后这个驱动负责根
11、据设备的能力来映射为相应的电源状态,并且让设备工作在恰当的电源状态下。下表是对各个电源状态的描述。设备电源状态注册表键值描述Full onD0此状态表示设备已开启或正在运行,系统要求设备工作在最大功耗和最高性能的状态Low onD1此状态表示设备已开启或正在运行,但以低于D0状态的功耗及性能运行。D1状态适用于设备已经被使用,但以较低的性能运行StandbyD2此状态表示设备部分供电,且设备在需要时可以自动唤醒。SleepD3睡眠状态。保证唤醒的最小供电,在需要时能自动唤醒并初始化。OffD4关闭状态,不供电一种设备并不能支持以上所有的设备电源状态。但是所有的设备都支持D0设备电源状态。如果驱
12、动程序收到要求将设备进入它不支持的电源状态的请求,驱 动程序将使设备进入下一个支持的电源状态。例如,电源管理器请求设备进入D2电源状态,但是该设备并不支持D2状态,这时如果设备支持D3或者D4状态, 那么驱动程序将使设备进入D3或者D4状态。如果某一设备需要进入D3状态,但是该设备却不能唤醒系统,那么该设备将进入D4状态。以简单化驱动程序的执 行。 电源管理器可以适当的将系统电源状态映射为设备电源状态。例如,一个设备支持D0及D4状态,那么电源管理器不会直接请求设备进入D4电源状态。如果D3 或者D4将设为此设备的最小电源状态,电源管理器会一直等待直到系统进入D3或者D4状态时,再将设备置为D
13、4状态。如果此设备的最小电源状态被设为 D0、D1、或D2,电源管理器将使设备一直运行于D0状态。 当一个设备驱动被加载,将设备置为D0状态。在卸载驱动程序时,如果可能的话,应将设备置为D4状态。如果设备在启动时进入另一个设备的电源状态(除了 D0外的其它状态),它可以在处理IOCTL_POWER_CAPABILITIES时发出DevicePowerNotify请求。2、系统电源状态 系统电源状态由OEM定义,他们的名称被OEM定义。例如,SystemIdle,OnBattery,InCradle,OutOfCradle等,这 些名称不是系统预定义的,也不是线性排列的,可以再系统配置的注册表键
14、值中定义系统的电源状态名称,有多少个系统电源状态并没有固定的限制。 也可以创建系统电源状态与预定义的设备电源状态的显示映射关系,显示映射需要在注册表中定义,系统电源状态明确的执行了系统的所有设备所需的最大设备电源状态。 电源管理器定义了四个系统电源状态,分别是On,Userldle,Systemldle,Suspend。如果用户停止使用,电源状态将被设为 Userldle。当用户在一定的周期内不适用系统(如30s),则系统进入Systemldle状态。只要设备处于活动的状态,系统将一直保持在 Systemldle状态,如果设备停止活动,系统将进入Suspend状态。 Userldle状态的目的
15、是当用户正在使用该设备,但是没有操作该设备。例如,用户一直在观看屏幕显示,但是却没有操作,Systemldle状态被用 于用户没有直接使用的设备,但是处理器任然继续运行。例如,在传输文件时,设备可能处于空闲状态,但实际上处理器依旧在运行,知道文件传输完成。 电源管理器根据UserActivity和SystemActivity定时器对用户以及系统的活动进行判定。在定时器超时时,根据系统当前的供电状况进行不同的系统电源状态的转换。Platform Builder提供的Windows CE运行时image所使用的都是外接电源模式。你可以选择实现一套在使用电池供电时的独立电源状态。复制电源管理器示例代
16、码的PDD目录,并对其做适当的修改即可。2.1 系统电源状态到设备电源状态的映射 开发者可以在系统配置中将电源状态名定义为注册键。系统电源状态到设备电源状态的映射被列举为注册表里每一个电源状态名下的值,注册表示例定义如下:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateExample Default=dword:0; D0 Flags=dword:10000; POWER_STATE_ON COM1:=dword1; D1上面的注册表定义了名为Example的系统电源状态,并设置了除COM1:被限制为最高运行于D1设备电源状态
17、外,其 他的所有设备最高均可运行于D0设备电源状态。其中Flags列是一个标识码,用于表示Pm.h头文件中定义的POWER_STATE_ON标记。如果需 要OEM也可以定义自己的电源状态标记。下表列出了键值名称及其描述:注册表值描述Name定义系统的电源状态名Flags表示POWER_STATE_XXX值的掩码,在Pm.h中定义;或者是OEM定义的电源状态标识(Default)所有设备的默认电源设置。当没有定义默认设置时,电源管理器假定设备的默认电源状态为D0Dx设备电源状态,设置为D0、D1、D2、D3或者D4.这是在系统电源状态Name时设备运行的状态DeviceName可选,定义除(De
18、fault)之外有特定设备电源状态需求的设备,如COM1:dowrd1电源管理器支持多种设备类型的映射。例如:NDIS迷你接口及块设备驱动器设备类型在Pm.h中会被指定为其自身的GUID类型。其他类型被管理设备的默认值也可以在注册表中指定。例如:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateExample98C5250D-C29A-4985-AE5F-AFE5367E5006 Default=dword:1; D1 CISCO1=dword:0; D0上面注册表设置电源管理器限制所有NDIS迷你接口设备在Example系统电
19、源状态下时均运行于D1设备电源状态,只有名为CISCO1的设备最高可运行于D0状态。2.2系统电源状态转换 在下列情况下电源管理器将对系统电源状态进行转换:一个OEM特定的事件发生时需要做电源状态的切换。应用程序调用SetSystemPowerState。OEM特定的事件可能包括设备供电从外接电源切换为使用电源电池供电,长时间的系统闲置,将设备插入底座,或者电池电量 低等,OEM根据具体情况修改电源管理器,来判断两种电源状态的切换是否合理,并做相应的切换。Platform Builder提供的电源管理器源代码仅支持在设备从外接电源切换为电池供电时进行系统电源状态的转换。应用程序可以调用SetS
20、ystemPowerState来使用电源状态的名称表示系统电源状态的参数,如果OEM应用 程序了解OEM定义的系统电源状态,可以选择使用明确的电源状态名称来调用,即显示调用。独立于平台的应用程序,通常会设置位,并允许电源管理决定如何进 行电源状态映射。电源管理器可以限制应用程序调用SetSystemPowerState的状态。2.3 系统电源状态举例 系统电源状态到设备电源状态的映射示例如下:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateOn Default=dword:0 ; D0 Flags=dword:10000 ;
21、POWER_STATE_ONHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateUserIdle Default=dword:1 ; D1 Flags=dword:0HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateSystemIdle Default=dword:2 ; D2 Flags=dword:0HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateSuspend Default=dword:3
22、; D3 Flags=dword:200000 ; POWER_STATE_SUSPEND; CESYSGEN IF CE_MODULES_NDISHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPowerStateSuspend98C5250D-C29A-4985-AE5F-AFE5367E5006 Default=dword:4 ; D4; CESYSGEN ENDIF CE_MODULES_NDIS下表描述了上面注册表的映射方式。系统电源状态设备电源状态OnD0UserIdleD1SystemIdleD2SuspendD3。NDIS迷你接口
23、单独映射为D4当系统使用上面的注册表配置,并进入Suspend状态,除了NDIS迷你接口会被关闭外,其他可唤醒源都将处于可激活状态。如果有设备不支持D3状态,它将自动进入D4状态。应用程序可以使用SetPowerRequirement创建设备电源要求,当然也可以使用电源管理器控制面板程序创建附加的设备电源要求。3设备和系统状态的名称 电源管理要求的设备和系统电源状态的名称使用小写字母。一些操作,如wsprintf(buf, %u, n)或 不区分大小写的比较,涉及Locale table查表操作。Locale table在Wince.nls内存映射文件中实现。在挂起期间,电源管理器禁止使用Fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件及应用翻译msdn WinCE 电源管理 计算机软件 应用 翻译 msdn 电源 管理
链接地址:https://www.31ppt.com/p-4561942.html