关于背光不能自动关闭的问题

xajhuang 2009-09-19 10:52:03
我在控制面板中设置了 1分钟自动关闭背光, 但是始终没有关闭背光。背光驱动支持电源管理,支持
IOCTL_POWER_CAPABILITIES,IOCTL_POWER_QUERY,IOCTL_POWER_SET,IOCTL_POWER_GET。系统启动时 BKL_IOControl 函数会收到一个 IOCTL 请求,然后就再也收不到任何 IOCTL 请求了。所以导致背光驱动收不到系统发出的关闭背光的通知。
背光驱动的注册表配置如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Backlight]
"Prefix"="BKL"
"Dll"="backlight.dll"
"Index"=dword:1
"Order"=dword:25
"Level"=dword:A
"PowerMask"=dword:1F ;support d0, d1, d2, d3, d4
"IClass"=multi_sz:"{A32942B7-920C-486b-B0E6-92A702A99B35}"
系统超时配置的注册表配置如下:
[HKEY_CURRENT_USER\ControlPanel\Backlight]
"BatteryTimeout"=dword:3c
"BacklightOnTap"=dword:1
"ACTimeout"=dword:258
"ACBacklightOnTap"=dword:1

BKL_IOControl 函数入口处我加了一句调试信息,除了重启时打印了一次外,然后就再没有打印了。
...全文
318 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lllchr88 2010-03-24
  • 打赏
  • 举报
回复
解决了吗?我现在遇见同样情况。
laiguo 2009-09-23
  • 打赏
  • 举报
回复
嘿嘿,还没有研究到
lllchr88 2009-09-23
  • 打赏
  • 举报
回复
关注中!!!
jeanszu 2009-09-21
  • 打赏
  • 举报
回复
自己写个应用程序调用BKL_IOControl试试
wolong98 2009-09-21
  • 打赏
  • 举报
回复
默认的背光驱动 好像不支持 控制面板中设置了 1分钟自动关闭背光 的设置。
你需要在背光驱动的线程添加一个事件,该事件超时时间是 控制面板的设置时间, 如果超时,则调用背光关闭函数,
如果有 点击和键盘事件,则打开背光。
wolong98 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 suwyhoho 的回复:]
如果用户手动调用SETDEVICEPOWER没有还原的话,PM不会对设备进行电源管理
[/Quote]

这个原因估计大点,我今天也碰到了.
有个地方调用 SetDevicePower 后,没还原的话,就再不会调用 BKL_IOControl 进行电源管理了
ok138ok 2009-09-20
  • 打赏
  • 举报
回复
估计是你查询IOCTL_POWER_CAPABILITIES 没有做好,也就是系统不知你的设备支持的电源模式,
第一次调用了,是因为查IOCTL_POWER_CAPABILITIES,启动时都会有一次。建议把BKL_IOControl的命令都打印出来,好找原因,还有一个问题是,你的电源GUID是哪类设备的?
博说医械研发 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gooogleman 的回复:]
引用 2 楼 xajhuang 的回复:
代码里面没有以前用的那种全局事件了,都是通过 IOCTL 走 PM 管理的接口。


我没有采用这个,我直接采用线程等待不到事件就关闭背光了。嘿嘿
[/Quote]
差不多是这样的,每次useractive事件后点亮背光,设置等待useractive事件N秒,超时后关闭背光。
ProgrammerNO1 2009-09-19
  • 打赏
  • 举报
回复
关注
gooogleman 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xajhuang 的回复:]
代码里面没有以前用的那种全局事件了,都是通过 IOCTL 走 PM 管理的接口。
[/Quote]

我没有采用这个,我直接采用线程等待不到事件就关闭背光了。嘿嘿
xajhuang 2009-09-19
  • 打赏
  • 举报
回复
代码里面没有以前用的那种全局事件了,都是通过 IOCTL 走 PM 管理的接口。
xqhrs232 2009-09-19
  • 打赏
  • 举报
回复
那个代码多看看,通过事件来设置的.看那些地方等了那些事件状态改变.
guopeixin 2009-09-19
  • 打赏
  • 举报
回复
以前我是直接通过上层的ap通过kerneliocontrol调用oal里的代码来实现对背光等级的控制,所以对你的情况不是很了解。
我猜测是:
>> 统启动时 BKL_IOControl 函数会收到一个 IOCTL 请求
这里作为一只流驱动,当然要去查询驱动所支持的设备电源状态
>> 然后就再也收不到任何 IOCTL 请求了
是不是需要在背光驱动和GWES的某些东西联系起来,才能够实现控制面板中的配置的 1分钟自动关闭背光
否则的话,你的背光驱动只能够接收一般的流驱动所能够接收的状态转换,因为你没有sleep等系统状态的转换,所以也就没有你背光驱动的设备电源状态的转换
xumercury 2009-09-19
  • 打赏
  • 举报
回复
如果如lz所说的,软件上查不出什么问题了。可以建议查下背光电路上是否有实际的硬件动作。
比如说你想过一段时间背光关闭相关的电路至少会有些动作。可以检查下。

个人建议仅供参考

Mercury
suwyhoho 2009-09-19
  • 打赏
  • 举报
回复
如果用户手动调用SETDEVICEPOWER没有还原的话,PM不会对设备进行电源管理
-小仙- 2009-09-19
  • 打赏
  • 举报
回复
我也要做了,关注一下
dding 2009-09-19
  • 打赏
  • 举报
回复
MARK,即将要做了

19,504

社区成员

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

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