Board logo

标题: Windows CE 电源管理 06 [打印本页]

作者: samwalton    时间: 2014-5-30 08:37     标题: Windows CE 电源管理 06

对于PBT_POWERINFOCHANGE通知来说,SystemPowerState字段包含一个PPOWER_BROADCAST_POWER_INFO结构:


typedef struct _POWER_BROADCAST_POWER_INFO {


    DWORD       dwNumLevels;


    DWORD       dwBatteryLifeTime;


    DWORD       dwBatteryFullLifeTime;


    DWORD       dwBackupBatteryLifeTime;


    DWORD       dwBackupBatteryFullLifeTime;


    BYTE        bACLineStatus;


    BYTE        bBatteryFlag;


    BYTE        bBatteryLifePercent;


    BYTE        bBackupBatteryFlag;


    BYTE        bBackupBatteryLifePercent;


} POWER_BROADCAST_POWER_INFO, *PPOWER_BROADCAST_POWER_INFO;




注意,这里有一些字段的名字和函数十分相似于前面讨论的SYSTEM_POWER_STATUS_EX2结构。

设置电源状态     电源管理程序提供的函数也允许应用程序来控制电源状态。有两个方式来控制电源。第一个方式是应用程序给定一个电源设定。第二个方式是应用程序请求电源状态不要低于给定的级别。


    一个应用程序通过调用函数SetSystemPowerState可以请求特定的电源状态。这个函数原型如下。

          DWORD SetSystemPowerState (LPCWSTR psState, DWORD StateFlags,


                                    DWORD Options);


电源状态可以被请求通过指定前两个参数。如果第一个参数是非零值,它指向一个字符串标识被请求的状态。这个字符串必须和注册表中列出的电源状态之一相匹配。


如果psState 为 NULL,第二个参数StateFlags,定义了请求的电源状态。这个参数是从POWER_STATE_ON直到POWER_STATE_RESET状态其中之一,这些在前面提到的POWER_BROADCAST结构有描述。


比较特别的是POWER_STATE_RESET标志。这个标志请求系统重起,使用SetSystemPowerState的方法重起比通过直接使用IOCTL_HAL_REBOOT命令来调用KernelIoControl的方法更好。调用 SetSystemPowerState 会让系统在重起设备之前任何还在缓冲中的数据保存到文件系统。


调用SetSystemPowerState是一个直接改变电源状态的方法。更巧妙的方法是通过调用SetPowerRequirement来请求系统维持应用程序所需最低限度的电源状态。SetSystemPowerState是假定应用程序知道所需状态,而调用SetPowerRequirement是允许系统对电源设定做优化以满足应用程序的需要。一个使用SetPowerRequirement会比较方便的例子是,一个使用串口的应用程序需要串口在进行通信时保持住电源状态。SetPowerRequirement被定义如下。


HANDLE SetPowerRequirement (PVOID pvDevice,


                            CEDEVICE_POWER_STATE DeviceState,


                            ULONG DeviceFlags, PVOID pvSystemState,


                        ULONG StateFlags);




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0