wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
阅读:2226回复:11

电池驱动的问题,请高手指点

楼主#
更多 发布于:2007-02-05 10:39
  我看了PB提供的电池驱动的样本代码,电池的状态都保存在gpStatus这个结构中,BatteryPDDGetLevels、BatteryPDDGetStatus等函数都是返回这个结构中保存的状态。
可是我看了整个代码,除了初始化之外,都没有对他赋值的地方。请高手指点在电池驱动是如何将电池的状态保存在gpStatus结构中的?我如果也写自己的电池驱动,应该将检测电池电量,检测是否使用电池,等代码加在什么地方?
joe_chen
驱动牛犊
驱动牛犊
  • 注册日期2006-05-24
  • 最后登录2007-02-05
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-02-05 22:58
如果你使用的是标准的MDD lib 你就可以在BatteryPDDGetStatus函数中填写电池和充电相关的信息。如ACLineStatus   BatteryLifePercent 等信息。他函数的第一个参数就是系统电源电池状态的一个结构体
lostinfog
驱动牛犊
驱动牛犊
  • 注册日期2006-07-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分410分
  • 威望42点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-02-05 23:04
根据你的硬件原理图,重写一下BatteryPDDGetStatus()就好了,也就是填充一个机构体
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-02-06 13:50
谢谢两位高手的指点,我想问一下是不是BatteryPDDGetStatus、BatteryPDDGetLevels这两个函数会被内核不断调用的?另外请问一下BatteryPDDSupportsChangeNotification这个函数的功能是什么?
cool_harber
驱动小牛
驱动小牛
  • 注册日期2003-03-01
  • 最后登录2009-04-28
  • 粉丝0
  • 关注0
  • 积分524分
  • 威望132点
  • 贡献值0点
  • 好评度126点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-02-06 23:50
我试过这两个函数会隔大概秒级被调用一次。

BatteryPDDSupportsChangeNotification见:

http://msdn2.microsoft.com/en-us/library/aa909615.aspx
博客:www.cnblogs.com/harber
lostinfog
驱动牛犊
驱动牛犊
  • 注册日期2006-07-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分410分
  • 威望42点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-02-07 21:57
BatteryPDDGetLevels()只有初始化时调用,返回的是电池的电量级别
BatteryPDDGetStatus()会定期调用,时间间隔在注册表中设置,注册表项是“BatteryPoll”
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2007-02-08 09:28
谢谢各位高手热心指点。我编译之后,在RelDir\SAMSUNG_SMDK2440_ARMV4IRelease可以看到生成了battdrvr.dll,可是在CE 的WINDOWS文件夹下面没有看到这个动态连接库,我在程序中设断点,发现BatteryPDDGetLevels()和BatteryPDDGetStatus()根本没有调用,请问如何才能把battdrvr.dll加到OS中,并且可以被系统调用
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2007-02-08 15:25
我跟踪了一下,发现在PM\BATTERY\battery.cpp的BatteryMonitorThreadProc函数中,执行到hevBatteryReady = OpenEvent(EVENT_ALL_ACCESS, FALSE, BATTERY_API_EVENT_NAME);这一句的时候,返回值是NULL。是不是在这之前是否还要进行一些电池驱动的初始化,请各位高手指点一下
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2007-02-09 09:09
解决了,原来是没有把相关的注册表项加进去,加上就OK了
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2007-02-09 16:08
请问哪个高手知道,CE检测到电池电压很低,进入SLEEP模式,是在哪里实现的?
dinghaiming
驱动牛犊
驱动牛犊
  • 注册日期2006-10-09
  • 最后登录2009-12-07
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-10-17 00:33
恩,好
qinlei_sz
驱动小牛
驱动小牛
  • 注册日期2007-03-24
  • 最后登录2012-12-18
  • 粉丝0
  • 关注0
  • 积分1090分
  • 威望510点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-10-22 23:35
通告电源管理模块,强制进入SUSPEND状态.
游客

返回顶部