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,也是坏好之一个例证。以上就点儿单参考代码的框架还基本完善,在做移植时根据现实的事态兑现相应的效力即可。如果成功实现了马上片步,就足以在控制面板的电源属性被看出相应的设施了。如下图所示。

                   

    
第三步要就是于应用程序中经调用电源管理之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);
    }

      
如果实现了HIVE注册表,由于系统启动时PM的起步早文件系统,所以当PM启动时它们还不克念博到文件系统中保留之值,在系统启动完成后呢欲通知一下网重新加载我们设定的值。这个操作可以在驱动或应用程序中。

      应用程序中常用的几乎单电源管理API如下:

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

      需要注意的是,驱动不可知擅自改变自己的电源状态,而得要PM来拍卖。

      PM中通过Timer进行状态切换的经过要下图所显示。

                   

      最后附上M8手机的电源属性图,可以视好之出品针对电源管理做得起差不多细心。

                   

     
电源管理是一个非常复杂也不行主要之情节。以上是我当上过程遭到之一些经历,抛砖引玉,希望大家能发生重多的座谈。

相关文章