Board logo

标题: Windows CE设备 矩阵键盘开发大有乾坤(2) [打印本页]

作者: 我是MT    时间: 2015-12-7 08:14     标题: Windows CE设备 矩阵键盘开发大有乾坤(2)

但因为矩阵键盘作为一种输入设备与其他外围设备有很大的区别,应用层不能对其发布命令来操作它。所以,一般流驱动接口函数中对设备进行操作的接口函数在矩阵键盘驱动中只是作了保留,并未有实质性的功能。其中,矩阵键盘接口函数中比较重要的有PWR_Init、PWR_DllEntry、 KeypdPdd_GetEventEx、KeypdPdd_GetEventEx、ScanCodeToVKeyEx等。
(3)矩阵键盘驱动加载过程
Windows CE系统运行时会默认启动DEVICE.EXE进程。DEVICE.EXE负责加载所有流驱动,进程对流驱动的加载是通过注册表列举器(RegEnum.dll)来实现。矩阵键盘的资源信息由OEM适配层(OAL)记录在注册表中,RegEnum.dll是通过扫描注册表项 HKEYLOCALMACHINE\Drivers\BuiltIn\PWRBUTTON下的键值对矩阵键盘进行初始化的。
因此,WinCE输入系统(GWES)会在启动时装载键盘驱动,输入系统将从HKEY_LOCAL_MACHINE\Hardware \DeviceMap\KEYBD\Drivername注册键中获取矩阵键盘驱动动态链接库(DLL)的名字。如果没有找到入口函数,系统将使用默认名字Keybddr.dll,然后加载这个DLL文件,并且确认所需要的条目指针是否都存在。然后,系统调用 PFN_KEYBD_DRIVER_INITIALIZE 函数执行初始化工作。这时,模型设备驱动程序(MDD)会在本地保存复制的一份输入系统回调函数的副本以及初始化硬件和IST来处理中断。
当一个中断信号来的时候,键盘驱动负责把硬件扫描码转换为虚拟键值,然后虚拟键值会再发送给输入系统。输入系统从队列中取出按键事件,然后返回到驱动程序的函数KeybdDriverVKeyToUnicode中。驱动程序根据分析特定的键事件和虚拟键的状态产生相应的字符。最后,输入系统把虚拟键值和字符发送给合适的程序。
例如,在我所用的CAYMAN开发板中,键盘驱动的动态链接库名字为KeyPad.dll,入口点为DllMain,中断服务线程(IST)的名字是 m_hevInterrupt。这个线程调用函数InterruptInitialize注册SYSINTR_KEYBOARD中断,然后等待系统发出 SYSINTR_KEYBOARD信号。系统在收到中断信号后,中断处理程序调用KeypdPdd_GetEventEx函数来获取按键的扫描码,然后再调用ScanCodeToVKeyEx函数将扫描码映射成虚拟码,把从PDD返回的键盘事件发送到输入系统,输入系统进行排队并分发给相应的应用程序。
一般来说,对于Windows CE特殊布局的按键式矩阵键盘来说,使用流接口驱动模式能快速有效的进行开发。因为可以尽量使用微软提供的样板程序,只需修改相应的硬件相关代码就能大大缩短开发流程,而且可以提高键盘驱动程序的可靠性。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0