Wince Battery driver

最近调了wince battery driver, 对电池驱动有了一点点了解,如下:

1.Windows CE电池驱动属于分层驱动,由MDD层和PDD层组成。微软给我们的代码在D:/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BATTDRVR 目录下,该目录MDD文件夹是MDD 代码,一般的我们都不用动,直接引用即可。而PDD文件夹下的sbattif.c 是PDD的框架代码,我们可以直接靠过来,针对具体硬件添加代码。

2.MDD层函数包括:Init、Deinit、Open、Close、Read、Write、Seek、PowerDown、PowerUp、IOControl。我主要分析一下Init。

 
1.判断ghevResume事件是否为NULL,条件成立表示驱动还未加载继续执行,否则表示驱动已经加载跳出执行。
2.打开一个名为“SYSTEM/BatteryAPIsReady”的事件。“SYSTEM/BatteryAPIsReady”事件在注册表HKEY_LOCAL_MACHINE/System/Events下面,在内核初始化的时候由filesys.exe创建。
[HKEY_LOCAL_MACHINE/System/Events]
       "SYSTEM/BatteryAPIsReady"="Battery Interface APIs"
3.创建ghevResume事件。
4.调用BatteryPDDInitialize初始化电池信息,调用PDD层代码。
5.  打开注册表,获取轮询查询电池状态时间间隔,其默认的时间间隔为:
#define DEF_BATTERYPOLLTIMEOUT          (5*1000)         // in milliseconds
注册表设置的时间间隔:
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Battery]
       "PollInterval"=dword:3e8  ;in milliseconds
       "BattCalibrationPoint"=dword:7
       "BattCalibrationData"=hex:59,03,4b,03,32,03,1c,03,09,03,f5,02,e0,02
6.调用BatteryAPIGetSystemPowerStatusEx2函数更新电池最新信息。BatteryAPIGetSystemPowerStatusEx2函数主要调用BatteryPDDGetStatus函数获取电池信息,这个函数在PDD层实现。
7.创建一个电池监控线程,处理系统resume消息,定时查询电池状态并通知系统。
8.设置“SYSTEM/BatteryAPIsReady”事件,通知系统电池驱动已经正常运行。

3.    PDD层函数主要包括:BatteryPDDInitialize、BatteryPDDDeinitialize、BatteryPDDResume、BatteryPDDPowerHandler、BatteryPDDGetStatus、BatteryPDDGetLevels、BatteryPDDSupportsChangeNotification 等函数,个人觉得最重要的事BatteryPDDInitialize和BatteryPDDGetStatus。

下面是我的BatteryPDDInitialize 代码:

主要是硬件初始化和填充电池信息结构体SYSTEM_POWER_STATUS_EX2 ;电池获得电量是通过读ADC寄存器的值再转化为电量百分比,具体硬件不同可能实现的方法有所不同;

BatteryPDDGetStatus 主要是检查电池当前的状态,重新更新SYSTEM_POWER_STATUS_EX2 结构体,可以添加电池低电报警功能在这里,控制开机电池最低电量!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值