最近两天一直结合飞凌公司提供的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) |