阅读:8487回复:29
电池驱动的代码
前一段时间完成电池驱动,下面是一点心得,贴出来供大家参考:
1. 将样本代码拷到BSP的DRIVERS目录下。 2. 修改DRIVERS目录下dirs文件,加上Battdrvr目录。 3. 修改FILES目录下的platform.reg文件,增加如下 IF BSP_NOBATTERY ! ; HIVE BOOT SECTION [HKEY_LOCAL_MACHINE\System\Events] "SYSTEM/BatteryAPIsReady"="Battery Interface APIs" ; END HIVE BOOT SECTION ; These registry entries load the battery driver. The IClass value must match ; the BATTERY_DRIVER_CLASS definition in battery.h -- this is how the system ; knows which device is the battery driver. Note that we are using ; DEVFLAGS_NAKEDENTRIES with this driver. This tells the device manager ; to instantiate the device with the prefix named in the registry but to look ; for DLL entry points without the prefix. For example, it will look for Init ; instead of BAT_Init. This allows the prefix to be changed in the registry (if ; desired) without editing the driver code. [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Battery] "Prefix"="BAT" "Dll"="battdrvr.dll" "Flags"=dword:8 ; DEVFLAGS_NAKEDENTRIES "Order"=dword:0 "IClass"="{DD176277-CD34-4980-91EE-67DBEF3D8913}" ENDIF BSP_NOBATTERY ! 4. 修改FILE目录下的platform.dat文件,增加如下: battdrvr.dll $(_FLATRELEASEDIR)\battdrvr.dll NK SH 5.修改battif.c文件,在BatteryPDDGetStatus函数中增加获取电池状态的相关代码。 |
|
|
沙发#
发布于:2007-04-11 22:09
谢谢WINCE_LOVER,小弟非常感激!
|
|
板凳#
发布于:2007-04-12 08:05
多谢,呵呵,学习下
|
|
地板#
发布于:2007-04-15 04:08
呵呵,楼主是好人,看了下代码,请问你设定的GPG2是外部电电源检测的吧,但GPF7呢,比较迷惑是做什么用的,我还不清楚,楼主可以明示下吗?
|
|
|
地下室#
发布于:2007-04-16 16:32
GPF7,是检测 是否在充电的
|
|
5楼#
发布于:2007-04-17 14:33
楼主你好,我读了读你写的代码,关于touchp与ADC采样冲突,touchp的驱动代码你是如何修改的可否告知。
|
|
6楼#
发布于:2007-04-17 15:46
在DdsiTouchPanelEnable函数中增加
if(ghBattTouchMutex == NULL ) { ghBattTouchMutex = CreateMutex( NULL, FALSE, BATTERY_TOUCH_MUTEX ); } 在PddpTouchPanelDeallocateVm函数中增加 if(ghBattTouchMutex) { CloseHandle( ghBattTouchMutex ); ghBattTouchMutex = NULL ; } 在DdsiTouchPanelGetPoint函数中读触摸屏采样之前加上 if(ghBattTouchMutex ) { WaitForSingleObject(ghBattTouchMutex, 5000); } 在读完之后加上 if(ghBattTouchMutex ) { ReleaseMutex(ghBattTouchMutex); } |
|
7楼#
发布于:2007-04-20 11:31
感谢楼主,touch pad与电池驱动已经不冲突了,另外想请教一下,在 touch pad的驱动下加了互斥后,楼主有没有运见过常按触屏,却无法实现和鼠标一样的右键功能!
|
|
8楼#
发布于:2007-04-20 13:47
没有啊,我试了一下。都正常
|
|
9楼#
发布于:2007-04-20 14:37
我把代码加到了这个位置:
for (i =0; i < 3; i++) { if(ghBattTouchMutex ) { RETAILMSG(1, (TEXT("Before ADC sample\r\n"))); WaitForSingleObject(ghBattTouchMutex, 5000); RETAILMSG(1, (TEXT("after ADC sample\r\n"))); } // v_pADCregs->rADCTSC=(0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0); v_pADCregs->rADCTSC=(1<<3)|(1<<2); // Stylus Down,Don't care,Don't care,Don't care,Don't care,XP pullup Dis,Auto,No operation v_pADCregs->rADCCON|=0x1; // Start Auto conversion while(v_pADCregs->rADCCON & 0x1); //check if Enable_start is low while(!(0x8000&v_pADCregs->rADCCON)); // Check ECFLG ybuf = 0x3ff - (0x3ff & v_pADCregs->rADCDAT0); xbuf = 0x3ff & v_pADCregs->rADCDAT1; if(ghBattTouchMutex ) { ReleaseMutex(ghBattTouchMutex); } } |
|
10楼#
发布于:2007-04-22 15:14
我也是这样作的,没有问题.你检查一下你的触摸屏驱动
|
|
11楼#
发布于:2007-04-24 14:46
搞定了,原来是RETAILMSG(1, (TEXT("Before ADC sample\r\n")))以及RETAILMSG(1, (
TEXT("after ADC sample\r\n"))) ,这两句话在作怪,我把他们注释掉既没问题了。实在是,感谢楼主的帮助了。 |
|
12楼#
发布于:2007-08-17 15:50
兄弟 真是太感谢了啊!!
|
|
13楼#
发布于:2007-09-04 22:28
楼主你好,我的是2410,wince4.2的系统,我按照你的方法修改触摸屏的驱动,但在2410的DRIVERS下面的触摸屏驱动里并没有找到这个函数:PddpTouchPanelDeallocateVm,能告知原因吗,还有这个函数起到什么作用啊
|
|
14楼#
发布于:2007-09-05 09:26
我没有看过2410的代码,不过有没有无关紧要。只要你在驱动退出的时候释放互斥量就可以了
|
|
15楼#
发布于:2007-09-05 11:32
谢谢楼上,上面那个问题已经解决了,但又有一个新的问题。
我在createmutex()时,第三个参数,即进程的名字,是如何命名的,我改变了名称,结果系统说是一个未声明的变量。我查了一下PB的帮助手册,上面说这是一个指针变量,指向进程的名称: Long pointer to a null-terminated string specifying the name of the mutex object. 我的名称为何不识别呢? |
|
16楼#
发布于:2007-09-05 12:02
第三个参数就是一个UNICODE字符串
|
|
17楼#
发布于:2007-09-05 16:45
好,谢谢。
现在问题解决了。我是在PB里面编的驱动,但其应该是EVC的内核。而EVC中只支持UNICODE编码,不支持ANSI字符串,这是它与VC不同的地方,必须将BATTERY_TOUCH_MUTEX这个字符串 改为_T ("BATTERY_TOUCH_MUTEX ")才能在编译的时候顺利通过! |
|
18楼#
发布于:2007-09-05 16:56
好贴...顶一个..
|
|
19楼#
发布于:2007-09-22 13:58
好~
|
|
上一页
下一页