最近调了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。
"SYSTEM/BatteryAPIsReady"="Battery Interface APIs"
"PollInterval"=dword:3e8 ;in milliseconds
"BattCalibrationPoint"=dword:7
"BattCalibrationData"=hex:59,03,4b,03,32,03,1c,03,09,03,f5,02,e0,02
3. PDD层函数主要包括:BatteryPDDInitialize、BatteryPDDDeinitialize、BatteryPDDResume、BatteryPDDPowerHandler、BatteryPDDGetStatus、BatteryPDDGetLevels、BatteryPDDSupportsChangeNotification 等函数,个人觉得最重要的事BatteryPDDInitialize和BatteryPDDGetStatus。
下面是我的BatteryPDDInitialize 代码:
主要是硬件初始化和填充电池信息结构体SYSTEM_POWER_STATUS_EX2 ;电池获得电量是通过读ADC寄存器的值再转化为电量百分比,具体硬件不同可能实现的方法有所不同;
BatteryPDDGetStatus 主要是检查电池当前的状态,重新更新SYSTEM_POWER_STATUS_EX2 结构体,可以添加电池低电报警功能在这里,控制开机电池最低电量!