Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106540
  • 博文数量: 26
  • 博客积分: 1060
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 10:32
文章分类

全部博文(26)

文章存档

2013年(1)

2011年(21)

2010年(4)

分类: WINDOWS

2011-03-19 15:54:42

最近两天一直结合飞凌公司提供的8*8键盘驱动来研读键盘的驱动.
现在将这两天研究的心得与体会写下来,供大家参详.

1. winCE 键盘驱动研究.
   关于键盘驱动的有一篇很好的文章:
   这篇文章写的很好, 根据这篇文章, 我在source insight里面 将代码仔仔细细的读了好几遍. 
据这篇文章分析, 键盘驱动分为两层, 底层为pdd, 说白了就是直接控制IO,注册中断,启动中断服务线程,的一层,这一层里实现了键盘扫描码的处理.实现了键盘的硬件工作. 上面还有一层, 就是MDD 了, 这个mdd层,实现了键盘的扫描码到虚拟键值的转换,虚拟键值到unicod吗的转换工作.

    正式这个先入为主的观念害苦了我.
飞凌公司提供的代码没有MDD层. (这一块我还没有完整的处理) 我说不管我怎么修改扫描码到虚拟键值的映射就是不管用!! 
   飞凌公司 的 扫描映射 非常非常简单, 甚至说是有待你粗糙!
    

keybd_event(0x30+idx ,0x30+idx, 0, 0);

Sleep(1);
keybd_event(0x30 + idx ,0x30 + idx, KEYEVENTF_KEYUP, 0);

取得键盘扫描码后,直接就用上面这个函数 做了个虚拟键盘事件....
害的我对着 laymrg.cpp 一通好调试.

现在 虽然 原理 搞通了, 但是还有几点不明白:
1. 我对laymgr.cpp  重新编译, 注意没有做修改, (cmd 进入D:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\KEYBD  目录执行 build) 然后 在 vs2005 对wince工程执行sysgen. 这时候却出现了问题:
  首先是加载键盘驱动的时候提示错误:
 

Exception 'Raised Exception' (-1): Thread-Id=051b0006(pth=8f7c1b94), Proc-Id=01fc0002(pprc=8f95eb88) 'udevice.exe', VM-active=01fc0002(pprc=8f95eb88) 'udevice.exe'
PC=40023764(coredll.dll+0x00013764) RA=801674c8(kernel.dll+0x000064c8) SP=000efb28, BVA=00000000


其次是当我按键的时候 提示如下:


>>> alex0
>>> KSCAN:alexlee [0] - 0
>>> alex0
>>> alex4
>>> alex1
>>> alex2
>>> alex3
>>> KSCAN:UP AlexLee [0] - 0
+[KEYBD]KeybdEventCallback
PddID : 1, ScanCode : 0, KeyUp : 1, event:0
ERROR: D:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\KEYBD\LAYMGR\.\laymgr.cpp line 2268: Keyboard: Keypress ignored since Device Layout is not set
>>> alex0
>>> KSCAN:alexlee [0] - 0
>>> alex0
>>> alex4
>>> alex1
>>> alex2
>>> KSCAN:DOWN[0] - 0
+[KEYBD]KeybdEventCallback
PddID : 1, ScanCode : 0, KeyUp : 0, event:0
ERROR: D:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\KEYBD\LAYMGR\.\laymgr.cpp line 2268: Keyboard: Keypress ignored since Device Layout is not set


这两个问题, 今天先解决解决. 

阅读(2743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~