关于电源管理和 硬关机 POWER_STATE_OFF 问题~

wolong98 2009-05-19 12:00:32
电源管理中 有些不明白的地方请教大家:
一: 我将 系统进入ueseridle和systemidle以及suspend的时间 之类时间都设置为0了, 控制面板也是 从不。
可系统还是自动进入 useridel -> systemidle ->suspend 状态?
为何?

二: 关于硬关机
我参考下面文章修改pm后, 可是调用 SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); 更本不进入 PlatformMapPowerStateHint和PlatformSetSystemPowerState 函数, 如果调用 POWER_STATE_ON POWER_STATE_SUSPEND 之类变量则可以?

平台是 pxa270+wince6.0

在Wince5.0中实现关机功能

wince5.0带的电源管理驱动只实现了“休眠(SUSPEND)”功能,未实现“关机(SHUT_DOWN)”功能。调用函数 SetSystemPowerState()时,无论参数是POWRE_STATE_OFF还是POWRE_STATE_SUSPEND,最终均为 SUSPEND。如果需要关机,还需要其他的办法。

我看过有人专门写了一个PowerKey的驱动,用来实现关机。但是这种方法的问题在于,关机时系统不会通知应用程序,往往需要自己设计一套消息由PowerKey驱动来通知应用程序,在很多时候非常的不方便。

我使用的方法是利用Wince自身的电源管理驱动,与系统结合的比较紧密

1. 建立新的PM PDD(platform.cpp),系统自带的PDD在WINCE500/PUBLIC/COMMON/OAK/DRIVERS/PM/PDD目录,可以选取一个作为修改的模板.同时,修改电源管理的SOURCE文件,使用新的PDD。

2.PlatformMapPowerStateHint()函数负责把电源状态标记映射为电源状态的名称,在此函数中做如下修改:

把POWER_STATE_OFF映射为shutdown而不是suspend

3. PlatformSetSystemPowerState()函数负责设置电源的状态,函数中有这么一句

if((dwNewStateFlags & POWER_STATE_RESET) != 0)

这一句监测是否用户准备RESET系统,并在后面做相应的RESET动作。

在此之前,增加if((dwNewStateFlags & POWER_STATE_OFF) != 0){关机代码}

4. 在注册表文件中增加

; wwwwww, the following key is added to impliment the shut down function(not suspend)

; the application should deal with the POWER_BROADCAST(to POWER_STATE_OFF)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\ShutDown]

"Default"=dword:4 ; D4

"Flags"=dword:20000 ; POWER_STATE_OFF
...全文
680 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolong98 2009-05-19
  • 打赏
  • 举报
回复
回楼上,
1, 电池和外电2个供电发案都修改过了,,,自己编写的驱动没有设置电源状态的修改,
我在检测pm.dll 动态库,我看它的代码也是读取上面修改的注册表值

2,硬关机是可以,只是想 用 power_state_off 来做一些通知, 实在找不到pm.dll 那个地方将 power_state_off 给过滤掉了,更本没调用到 pm.dll 内部的 PmSetSystemPowerState 函数,。
shuiyan 2009-05-19
  • 打赏
  • 举报
回复
1.这个地方的修改涉及“电池供电”和“外电供电”两种方案,你修改的是你使用的供电方式吗?另外,是否有驱动修改了系统的电源状态?逐个检查一下。

2.硬关机一定需要硬件支持,wince默认设备是不需要硬关机的。你如果想实现硬关机,就直接关得了。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧