WinCE电源管理

     
对于运动装备来说,电源管理是相比较根本的。为了让设备有更长的待机和劳作时间,实现一个两全的电源管理功能也是必须的。针对移动平台的操作系统WinCE本身包括了一个骨干的电源管理子模块”Powe
Manager”,可以在Catalog中添加至系统。驱动和应用程序将经过它实用的军事管制各种设备或者全部系统的电源工作情景。近年来,在大家TCC8900的平台上贯彻了简约的电源管理,积累了有的经验,在此地跟我们大饱眼福一下。

      在WinCE系统中贯彻电源管理重点有三步,添加”Power
Manager”组件,在驱动中落实电源管理的接口,在应用程序中通过调用电源管理的API控制各装备和连串的做事情状。

     
第一步相比较简单,平常假设在Catalog中添加就足以。倘诺有非凡要求,可以移植C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\PM下的代码到BSP,并做相应的修改。

     
第二步关键是在存活的驱动上添加电源管理的机能。对于驱动来说,并不要求必须概括电源管理的效率,完全可以不落实,具体意况具体分析。为了让Power
Manager知道哪些驱动是帮忙电源管理职能的,需要在注册表中蕴藏相应的键值(IClass)或者在使得开端化时调用AdvertiseInterface()。一般的话,流驱动用注册表键值相比有利一些,而显得驱动日常用AdvertiseInterface()来告诉。流驱动和显示驱动在促成电源管理的功力上也暗淡无光。流驱动紧虽然在XXX_IOControl中,实现IOCTL_POWER_CAPABILITIES、IOCTL_POWER_QUERY、IOCTL_POWER_SET和IOCTL_POWER_GET。具体代码可以参考C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\BACKLIGHT,很是好的一个例证。而显得驱动首假如在DrvEscape中实现以上多少个IoControlCode,其余索要专注在QUERYESCSUPPORT添加对应的IoControlCode。这些代码可以参考C:\WINCE600\PLATFORM\COMMON\SRC\SOC\PXA27X_MS_V1\DISPLAY\PXA27X_LCD,也是非凡好的一个事例。以上这多少个参考代码的框架都基本健全,在做移植时依据具体的景色贯彻相应的功力即可。假设成功实现了这两步,就可以在控制面板的电源属性中看到相应的设备了。如下图所示。

                   
图片 1

    
第三步关键就是在应用程序中通过调用电源管理的API,帮忙系统管理各样设施和成套系统的劳作状态。

     一般的话,外设的办事情景重要有以下多少个Full On 、Low
On、Standby、Sleep
和Off,分别对应D0、D1、D2、D3和D4。他们的炫耀关系和此外部分关于电源管理的布局在注册表[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power]中定义。这里需要留意的是应用程序如何修改系统的晚点时间设置,键值在[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\Timeouts]下,仅仅修改注册表中的键值并不可以实时生效,应用程序通过注册表读写API修改该键下的DWORD值(十六进制以秒为单位),完成修改后,必须通报PM使用新安装的逾期时间,实现的参考代码如下:

    HANDLE hReloadActivityTimeouts;
    hReloadActivityTimeouts = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T(“PowerManager/ReloadActivityTimeouts”));
    if(hReloadActivityTimeouts)
    {
        SetEvent(hReloadActivityTimeouts);
        CloseHandle(hReloadActivityTimeouts);
    }

      
倘诺实现了梅毒E注册表,由于系统启动时PM的启动先于文件系统,所以在PM启动时它还不可以读取到文件系统中保留的值,在系统启动完成后也需要通知一下系统再一次加载大家设定的值。那个操作可以放在驱动或者应用程序中。

      应用程序中常用的多少个电源管理API如下:

  • DevicePowerNotify 用于转移设备的电源状态
  • SetPowerRequirement 用于请求保持装备的电源状态
  • ReleasePowerRequirement 释放已呼吁设备的电源管理
  • SetSystemPowerState 用于安装任何体系的电源状态
  • RequestPowerNotifications 注册一个音信队列接收电源状态变化的布告
  • StopPowerNotifications 截止收取电源变化的布告

      需要小心的是,驱动不能够擅自改变自己的电源状态,而必须请求PM来处理。

      PM中经过提姆(Tim)er举行状态切换的历程如下图所示。

                   
图片 2

      最终附上M8手机的电源属性图,可以见到好的出品对电源管理做得有多细。

                   
图片 3

     
电源管理是一个非凡复杂也充裕紧要的始末。以上是自我在攻读过程中的一些经历,抛砖引玉,希望我们能有更多的商量。

相关文章