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

电池驱动的代码

楼主#
更多 发布于:2007-04-11 22:01
  前一段时间完成电池驱动,下面是一点心得,贴出来供大家参考:
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函数中增加获取电池状态的相关代码。
附件名称/大小 下载次数 最后更新
batt.rar (18KB)  606 2007-04-11 22:01
MARKWEN
驱动牛犊
驱动牛犊
  • 注册日期2007-04-10
  • 最后登录2009-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-11 22:09
谢谢WINCE_LOVER,小弟非常感激!
lljj462
驱动牛犊
驱动牛犊
  • 注册日期2005-08-08
  • 最后登录2008-08-06
  • 粉丝0
  • 关注0
  • 积分576分
  • 威望83点
  • 贡献值0点
  • 好评度79点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-12 08:05
多谢,呵呵,学习下
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-15 04:08
呵呵,楼主是好人,看了下代码,请问你设定的GPG2是外部电电源检测的吧,但GPF7呢,比较迷惑是做什么用的,我还不清楚,楼主可以明示下吗?
NAND Flash烧录器|烧写器|编程器
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-04-16 16:32
GPF7,是检测 是否在充电的
wowdp
驱动牛犊
驱动牛犊
  • 注册日期2007-03-28
  • 最后登录2008-12-30
  • 粉丝0
  • 关注0
  • 积分230分
  • 威望24点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-17 14:33
楼主你好,我读了读你写的代码,关于touchp与ADC采样冲突,touchp的驱动代码你是如何修改的可否告知。
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
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);
}
wowdp
驱动牛犊
驱动牛犊
  • 注册日期2007-03-28
  • 最后登录2008-12-30
  • 粉丝0
  • 关注0
  • 积分230分
  • 威望24点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-04-20 11:31
感谢楼主,touch pad与电池驱动已经不冲突了,另外想请教一下,在 touch pad的驱动下加了互斥后,楼主有没有运见过常按触屏,却无法实现和鼠标一样的右键功能!
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2007-04-20 13:47
没有啊,我试了一下。都正常
wowdp
驱动牛犊
驱动牛犊
  • 注册日期2007-03-28
  • 最后登录2008-12-30
  • 粉丝0
  • 关注0
  • 积分230分
  • 威望24点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
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);
       }

}
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-04-22 15:14
我也是这样作的,没有问题.你检查一下你的触摸屏驱动
wowdp
驱动牛犊
驱动牛犊
  • 注册日期2007-03-28
  • 最后登录2008-12-30
  • 粉丝0
  • 关注0
  • 积分230分
  • 威望24点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-04-24 14:46
搞定了,原来是RETAILMSG(1, (TEXT("Before ADC  sample\r\n")))以及RETAILMSG(1, (
TEXT("after ADC  sample\r\n")))
,这两句话在作怪,我把他们注释掉既没问题了。实在是,感谢楼主的帮助了。
zhongnanjun
驱动牛犊
驱动牛犊
  • 注册日期2007-05-18
  • 最后登录2009-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-08-17 15:50
兄弟 真是太感谢了啊!!
pinkfire
驱动牛犊
驱动牛犊
  • 注册日期2007-08-14
  • 最后登录2007-12-13
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-09-04 22:28
楼主你好,我的是2410,wince4.2的系统,我按照你的方法修改触摸屏的驱动,但在2410的DRIVERS下面的触摸屏驱动里并没有找到这个函数:PddpTouchPanelDeallocateVm,能告知原因吗,还有这个函数起到什么作用啊
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
14楼#
发布于:2007-09-05 09:26
我没有看过2410的代码,不过有没有无关紧要。只要你在驱动退出的时候释放互斥量就可以了
pinkfire
驱动牛犊
驱动牛犊
  • 注册日期2007-08-14
  • 最后登录2007-12-13
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-09-05 11:32
谢谢楼上,上面那个问题已经解决了,但又有一个新的问题。
我在createmutex()时,第三个参数,即进程的名字,是如何命名的,我改变了名称,结果系统说是一个未声明的变量。我查了一下PB的帮助手册,上面说这是一个指针变量,指向进程的名称:
Long pointer to a null-terminated string specifying the name of the mutex object.
我的名称为何不识别呢?
wince_lover
驱动中牛
驱动中牛
  • 注册日期2007-01-10
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分1103分
  • 威望735点
  • 贡献值2点
  • 好评度279点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2007-09-05 12:02
第三个参数就是一个UNICODE字符串
pinkfire
驱动牛犊
驱动牛犊
  • 注册日期2007-08-14
  • 最后登录2007-12-13
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-09-05 16:45
好,谢谢。
现在问题解决了。我是在PB里面编的驱动,但其应该是EVC的内核。而EVC中只支持UNICODE编码,不支持ANSI字符串,这是它与VC不同的地方,必须将BATTERY_TOUCH_MUTEX这个字符串 改为_T ("BATTERY_TOUCH_MUTEX ")才能在编译的时候顺利通过!
mfk_boy
驱动牛犊
驱动牛犊
  • 注册日期2007-09-05
  • 最后登录2007-09-05
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-09-05 16:56
好贴...顶一个..
wangjingdi
驱动牛犊
驱动牛犊
  • 注册日期2007-09-18
  • 最后登录2007-09-24
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-09-22 13:58
好~
上一页
游客

返回顶部