EDN China > 技术文章 > 嵌入式系统 > 正文
?

Windows CE设备小巧玲珑 矩阵键盘开发大有乾坤

2008年12月01日 ?? 收藏0

  矩阵键盘驱动DDI函数是在MDD层实现,由用户应用程序通过GWES子系统调用。其中DDI函数有:KeybdDriverGetInfo、KeybdDriverSetMode、KeybdDriverPowerHandler、KeybdDriverInitializeEx、KeybdDriverInitStates、KeybdDriverVKeyToUnicode、KeybdDriverMapVirtualKey。而DDSI函数是在PDD层实现,由MDD层调用。DDSI函数有:KeybdPdd_PowerHandler、KeybdPdd_InitializeDriverEx、KeybdPdd_GetEventEx、DllMain。

  (2)矩阵键盘驱动的接口函数

  流接口驱动程序的主要任务就是把外设的使用传递给应用程序,是通过把设备表示为文件系统的一个特殊文件来实现的,每个流接口的驱动程序都必须实现一组标准的接口函数。由于矩阵键盘驱动采用了流驱动模式设计,故矩阵键盘驱动使用标准的流驱动接口函数,也称为矩阵键盘驱动的DLL接口。

  但因为矩阵键盘作为一种输入设备与其他外围设备有很大的区别,应用层不能对其发布命令来操作它。所以,一般流驱动接口函数中对设备进行操作的接口函数在矩阵键盘驱动中只是作了保留,并未有实质性的功能。其中,矩阵键盘接口函数中比较重要的有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特殊布局的按键式矩阵键盘来说,使用流接口驱动模式能快速有效的进行开发。因为可以尽量使用微软提供的样板程序,只需修改相应的硬件相关代码就能大大缩短开发流程,而且可以提高键盘驱动程序的可靠性。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

嵌入式? 矩阵键盘? Windows CE?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈