4679|9

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Power键点亮屏幕的问题 [复制链接]

我在程序里面成队使用了:
PowerPolicyNotify(PPN_UNATTENDEDMODE,TRUE);
PowerPolicyNotify(PPN_UNATTENDEDMODE,FALSE);
为什么要点两次power键才能点亮屏幕?

最新回复

这个问题差不多已经解决了, 谢谢  详情 回复 发表于 2008-11-24 17:39
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
系统状态的on和suspend是最基本的状态,对于CPU一般就是on和sleep两个状态,因此很容易理解。

Backlight off就是关掉背光灯,其他设备都正常运转,此时用户的所有活动(按键,点击触摸屏等)都会通知到pm.dll,使系统状态变回on,同时也由pm.dll调用ioctl的IOCTL_POWER_SET把每个设备的状态设置一次。我们可以在控制面板中设置什么时候关掉背光。

Backlight off超时,就会suspend,此时所有的设备进入D3,CPU进入等待中断的节能状态。我们可以SystemIdleTimerReset()间隔一段时间重置一下timeout时间,使系统永远都不能suspend,这就是为什么media player可以连续播放音乐,而不至于sleep。你可以注意到这种对电源的需求是由应用程序提出的,而不是驱动程序。

系统一但进入suspend,只有靠hardware中断才能唤醒CPU core,驱动程序可以调用KernelIoControl(IOCTL_HAL_ENABLE_WAKE)来宣告自己是唤醒系统的中断源。我要强调一下,这里的“唤醒”不是使系统变为on,而是系统由suspend变为resuming,resuming对应D2,作为用户或者开发者的你,在外面是看不见任何现象的(不会有背光被打开)。如果你想要如SD卡插入系统被唤醒(即系统进入on的状态),需应用程序或驱动程序监视系统进入resuming状态,此时查看唤醒源是什么中断,如果是SD,可以模拟一次application button press,发送PowerPolicyNotify(PPN_APPBUTTONPRESSED,0),即可以完全唤醒系统。

Resuming被定义为“最不稳定”的状态。因为当处于其他的任何状态,都可以通过间隔性的调用SystemIdleTimerReset()来保持住当前状态,唯独resuming不可以被保持,15秒之后系统会睡眠。

那么来假想一种需求,如果某个应用程序每隔5分钟需要做一些例如同步的事情。5分钟很长,这个程序还想为系统考虑,节约用电,那么5分钟之内系统可以suspend来节电,5分钟之后通过RTC中断将系统唤醒,做一些“后台”同步的事情,因此这个事不需要用户参与(也就是背光和屏幕可以关闭,同时声音关闭)。这个需求导致了unattended电源状态的产生。在进入resuming状态15秒以后,如果系统发现有程序提出unattended的需求,
PowerPolicyNotify( PPN_UNATTENDEDMODE,TRUE)
PowerPolicyNotify( PPN_UNATTENDEDMODE,FALSE)
那么系统进入unattended电源状态,使机器在不打扰用户的情况下运行。
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
补充一下, 我想关机的时候, 也需长按两次power键, 这是为啥子呢?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
你这是CE还是Mobile的机器?
不过无论是哪一种机器都可以自己定制的,以前我们的做法是检测一下是什么唤醒的,如果是PowerKey或者是SD卡之类的,直接让系统回到On
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 song_alone 的回复:
补充一下, 我想关机的时候, 也需长按两次power键, 这是为啥子呢?

你可能要提供信息说明按第一次后系统有什么变化,进入什么状态,按第2次后又是什么样的变化?是进Suspend还是关机,还是别的状态?
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

6
 
第一次长按power键之后, 弹出"please confirm you wish to power off you device"的对话框, 我选择"ok", 背光被关闭, 再一次长按power键, 再弹出对话框 .....重复之前的操作.这样操作两次之后, 再按power键, 系统才被重新启动.由于对电源管理不是很了解, 所以会进入什么状态, 我也不是很清楚. 但是我不使用
PowerPolicyNotify(PPN_UNATTENDEDMODE,TRUE);
PowerPolicyNotify(PPN_UNATTENDEDMODE,FALSE); 的时候, 就不会出现这样的情况.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
哪个程序弹出对话框?点OK后去做什么事情了?
背光关闭后再弹出对话框,你能看到吗?还是说背光又亮起来了?
你使用这两个函数在什么地方?为什么会跟你使用这两个函数有关系?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
应该是device.exe弹出的对话框, 点ok之后系统应该做的事情是进入off状态
问题就出在这里, 我需要的是系统只弹出一次对话框.
两个函数用在power状态监控进程里面, 我也不知道为什么为跟我使用它们有关, 莫非是UNATTENDEDMODE的引用计数不对? 可是TRUR和FALSE我是成队调用的啊......
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
device.exe怎么可能会弹出这对话框?从来没有听说过
肯定是你们的驱动程序弹出的或者是一个后台的程序弹出来的吧,找一下相关的代码,然后看看它要切换到什么状态
或者你直接调用下面的函数试试看:
SetSystemPowerState(NULL, POWER_STATE_SUSPEND, POWER_FORCE);
看系统会不会直接进入suspend?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
这个问题差不多已经解决了, 谢谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表