电源管理的实现

上传人:shaoy****1971 文档编号:108283174 上传时间:2019-10-23 格式:DOC 页数:19 大小:117.50KB
返回 下载 相关 举报
电源管理的实现_第1页
第1页 / 共19页
电源管理的实现_第2页
第2页 / 共19页
电源管理的实现_第3页
第3页 / 共19页
电源管理的实现_第4页
第4页 / 共19页
电源管理的实现_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《电源管理的实现》由会员分享,可在线阅读,更多相关《电源管理的实现(19页珍藏版)》请在金锄头文库上搜索。

1、四极管:电源管理的实现电源管理模块实体是一个动态链接库pm.dll,在WinCE系统中实现电源管理主要有三步,添加Power Manager组件,在驱动中实现电源管理的接口,在应用程序中通过调用电源管理的API控制各设备和系统的工作状态。第一步:添加Power Manager组件,如图所示:其中Power Management(Minimal)管理架构,及使用在C:WINCE500PUBLICCOMMONOAKDRIVERSPMPMSTUBS中的代码,在这种架构下,应用程序的API即PmRequestPowerNotifications和PmStopPowerNotifications,且Pm

2、SetSystemPowerState里面只做了Suspended/Resuming的简单处理。另外一个是Full的电源管理结构,在C:WINCE500PUBLICCOMMONOAKDRIVERSPM下的MDD和PDD目录下,用SYSGEN_PM环境变量去使能这个架构,在这种架构下支持所有类型的电源管理API,在这个架构下,(来源于larry_liang_cn)又支持两种版本,一种是DEFAUL,另外一种是PDA.这两个版本的主要区别在于对系统电源状态的定义上面:Default版本定义了4种状态:On,Userldle,Systemldle,Suspend;PDA版本定义了On,Screeno

3、ff,Unattended,Resume,Suspend。Default版本的简单描述:Userldle状态是描述用户在使用但没有操作,比如阅读:Systemldle状态描述用户停止使用,但系统任然工作,比如文件传输。(来源于mikenoodles home)PDA版本的简单描述:ScreenOff状态描述用户请求把屏幕背灯关闭。是用户主动关闭的情况,区别于Userldle,Userldle是自动的,Unattended状态表示后台工作,用户不会对其察觉的情景,比如ActiveSync每五分钟唤醒系统同步,然后继续supend;Resume状态描述唤醒后情景。比如唤醒后在指定的时间内转到那个状

4、态,否则继续suspend。微软为我们提供了2个选择,第一个是完整功能,所有的API都可以实现,第二个代表空实现(形式上提供接口,但是接口内是空函数)。添加后如图所示:写到这,发现larry_liang_cn兄已经做了很好的分析。借用larry_liang_cn的文章,仔细学习一下,如有冒犯,可立即删除。一、PowerManagement Architecture在/PUBLIC/COMMON/OAK/DRIVERS/PM下的代码有两套电源管理机制:一种是Minimal的电源管理架构,在/PUBLIC/COMMON/OAK/DRIVERS/PM/PMSTUBS/下,用SYSGEN_PMSTUB

5、S环境变量去使能这个架构;在这种架构下只支持消息接口类的电源管理API即PmRequestPowerNotifications和PmStopPowerNotifications,且PmSetSystemPowerState里面只做了Suspended/Resuming的简单处理。另一种是Full的电源管理架构,在/PUBLIC/COMMON/OAK/DRIVERS/PM/下的MDD和PDD目录,用SYSGEN_PM环境变量去使能这个架构;在这种架构下支持所有类型的电源管理API。在Full的电源管理架构中,又分两个子类DEFAULT和PDA。在用SYSGEN_PM环境变量启用这个架构后默认使用

6、DEFAULT,用SYSGEN_PM_PDA可以使能PDA这个子类。在Windows Mobile 6(wince 5.0核心)中,无论是Windows Mobile 6 Professional/ Windows Mobile 6 Classic (在/PUBLIC/WPC/OAK/MISC/wpc.bat)还是Windows Mobile 6 Standard(在/PUBLIC/SMARTFON/OAK/MISC/smartfon.bat)都设置了SYSGEN_PM = 1,SYSGEN_PM_PDA = 1;下面我将详细讨论PDA子类。系统电源状态共有九种:On,UserIdle,Bac

7、klightOff,ScreenOff,Unattended,Resuming,Suspended,ColdReboot,Reboot.ColdReboot,Reboot这两个状态不能在电源管理的状态机中自由迁移,它们只能通过调用SetSystemPowerState来进入。此外,Windows Mobile 6 Professional和Windows Mobile 6 Classic (即PPC)在/PUBLIC/WPC/OAK/FILES/下的project.reg里面做了如下设置HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Po

8、wer/TimeoutsACUserIdle=dword:0 ; in secondsBattUserIdle=dword:0 ; in secondsBattSuspendTimeout=dword:3c ; in seconds这样就把自动超时进入UserIdle状态的方式给屏蔽了,无法在PPC里面自动超时迁移到UserIdle这个电源状态。Windows Mobile 6 Standard(即SmartPhone)在/PUBLIC/SMARTFON/OAK/FILES/下的project.reg里面做了如下设置HKEY_LOCAL_MACHINE/SYSTEM/CurrentContro

9、lSet/Control/Power/TimeoutsACSuspendTimeout=dword:0 ; in secondsBattSuspendTimeout=dword:0 ; in seconds这样就把自动超时进入Suspended状态的方式给屏蔽了,无法在SmartPhone里面自动超时迁移到Suspended这个电源状态。根据文档:Windows Mobile 6 Professional和Windows Mobile 6 Classic (即PPC) 不支持UserIdle这个状态,Windows Mobile 6 Standard(即SmartPhone)不支持Unatte

10、nded,Resuming,Suspended三个状态。影响系统电源状态变迁的事件共有以下十一种:Wake source event:这是OEM自己定义的唤醒事件,它们都是特定选择的一些硬件中断(例如USB线或是充电器的插入拔出中断,Baseband的中断,键盘中断,闹钟中断等)。在PPC中这些唤醒事件用来把系统从Suspended状态变到Resuming状态。在SmartPhone中没有Suspended状态,相应的低功耗模式是进入OEMIdle()。在有些特定硬件平台中,为了降低功耗往往在OEMIdle()里将CPU配置进低功耗模式或者Stop掉。例如PXA27X,PXA3XX的Smart

11、Phone平台下,在OEMIdle()里让CPU进Standby模式,把一些硬件中断配置为Wake source event以唤醒CPU并退出OEMIdle()。在PPC里进入Suspended状态或是关机都会调用OEMPowerOff(),但在SmartPhone里OEMPowerOff()只在关机时被调用。On/off event:Power Button被按下。这个事件只在PPC里有效。在Resuming,Unattended,ScreenOff状态下,按下Power Button将系统迁移到On状态。在On,BacklightOff,UserIdle状态下,按下Power Button

12、将系统迁移到Unattended状态。On event:Application Buttons被按下。这个事件也只在PPC里有效。在On,BacklightOff,UserIdle,Resuming,Unattended,ScreenOff状态下,按下Application Buttons都会将系统迁移到On状态。Enter unattended:调用PowerPolicyNotify(PPN_UNATTENDEDMODE,TRUE)让系统进入unattended模式。这时候m_dwUnattendedModeRef加一。Leave unattended:调用PowerPolicyNotify

13、(PPN_UNATTENDEDMODE,FALSE)让系统离开unattended模式。这时候m_dwUnattendedModeRef加一。任何状态要迁移到Suspended状态肯定会先迁移unattended状态。如果m_dwUnattendedModeRef为0则直接进入Suspended状态。不为0时会将SystemIdleTimeout定时器复位,在SystemIdle Timeout后才会进入Suspended状态。下面接下来是四个Timeout事件:15-second timeout(即ResumingSuspendTimeout):15S超时其实是代码中的ResumingSus

14、pendTimeout,这是专门用于Resuming状态的。当系统从Suspended唤醒到Resuming状态时,如果15s内没有人系统迁移出这状态,则系统电源状态就会变到Unattended状态。这个15s的时间是系统默认的(在PUBLIC/COMMON/OAK/DRIVERS/PM/PDD/PDA/下的pwstates.h定义的),但它也是可以被改变的。修改TEXT(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Power/Timeouts)下面的_T(Batt ResumingSuspendTimeout)的值可以改变没有使用外

15、部电源时的超时时间。修改TEXT(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Power/Timeouts)下面的_T(ACResumingSuspendTimeout)的值可以改变使用外部电源时的超时时间。SystemIdle Timeout(即SuspendTimeout):系统自动进入Suspended状态的超时时间,用户可以通过控制面板去改变它。在On,BacklightOff,UserIdle,ScreenOff状态下SystemIdle Timeout会让系统进入Unattended状态,在Unattended状态下SystemIdle Timeout会让系统进入Suspended状态。这个SystemIdle Timeout时间也是可以通过修改注册表去改变的。这个时间分两个,在不使用外部电源时是m_dwBattSuspendTimeout,使用外部电源时是m_dwACSuspendTimeout。从代码上看,m_dwBattSuspendTimeout的默认值是300s,m_dwACSuspendTimeout的默认值是600s.然后在/PUBLIC/WPC/OAK/FILES/下(适用于PPC)或是/PUBLIC/SMARTFON/OA

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号