技术开发 频道

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

  【IT168 专稿】嵌入式移动设备的应用越来越广,以其体积小、重量轻、便于携带等特点而备受青睐。键盘是一种最为普遍使用的输入工具,但嵌入式移动设备因其体积小的特点决定了它的键盘不大可能采用普通PC机上的标准键盘,因而大多数采用键数相对较少的矩阵键盘。
利用矩阵键盘用户可以很方便的实现对嵌入式移动设备进行相应的操作,是极方便的人机交互设备。随着微软的嵌入式操作系统Windows CE的普及,Windows CE的矩阵键盘开发得到了越来越多开发者的重视,本文与大家分享我在开发矩阵键盘的一些总结。


  1.Windows CE驱动分类

  Windows CE提供了许多用于开发设备驱动的模型,这些驱动程序模型使得Windows CE 能适应大部分的内部和外围设备。因此,在深入探讨Windows CE矩阵键盘驱动程序之前,先了解在WinCE平台上使用的两种设备:内建设备和可安装设备。因此,从驱动加载方式来看WinCE可分为本机设备驱动(Built-In Driver)、可加载驱动(Loadable Driver)。
本机设备驱动即Native Device Drivers,WinCE设计成可直接使用内建设备,这些设备由本机驱动过程控制。本机驱动程序是与WinCE的核心组件紧密相连,这些驱动对应的设备通常在系统启动时,在GWES的进程空间内被加载,因此它们不是以独立的DLL形式存在。可加载设备是指可与平台连接和分离的第三方接口设备,可由用户随时安装和卸载这些驱动,可以在系统启动时或者和启动后的任何时候由设备管理器动态加载。通常这类驱动是以DLL动态链接库的形式存在,系统加载后这些驱动程序是以用户态的角色运行,这种外围设备的驱动也被称为流驱动。
两者的差别在于它们提供的编程接口不同:本地设备驱动可以根据具体设备的需求提供本机的相应接口;而流接口驱动则是提供一组通用接口即流接口函数,应用程序可以通过流接口提供的接口函数来访问外围设备。

  2.嵌入式矩阵键盘驱动原理

  嵌入式设备上的键盘受设备本身体积影响,键盘设计大多数采用矩阵形式。支持Windows CE系统的CPU有很多种,不同CPU之间矩阵键盘硬件设计也不尽相同。因此,键盘可以按照自定义布局,并且可以按照自己的喜好映射按键,从而实现按键的不同功能,包括按键的个数、布局及按键功能的配置。
  (1)矩阵键盘驱动核心是中断处理
  矩阵键盘一般是采用中断方式,因此矩阵键盘驱动首先要在OAL层加入中断源。简单的说,矩阵键盘驱动的主要作用就是实时监测外部按键中断,一旦发现外部有键按下就向内核发送键盘消息实现键盘输入功能。这时键盘驱动会创建中断服务线程和键盘中断事件,每个按键对应一个键盘中断事件。因此,矩阵键盘驱动的设计核心就是键盘中断处理的设计。
  (2)中断服务例程(ISR)
  矩阵键盘作为输入设备一般以默认的频率扫描键盘,当有按键被按下时,通过扫描键盘并生成相应的扫描码,并通过处理器中的中断产生器产生一个中断信号,这时内核会进入异常中断处理程序,由它屏蔽所有中断,再调用中断服务例程ISR得到该中断的逻辑中断标识。然后,中断服务例程把得到对应的中断标识符报告给系统任务调度进程,同时产生键盘中断事件,键盘中断服务线程响应键盘中断事件,开始扫描矩阵键盘。然后,再通过这个中断信号控制相应的程序获取与之相对应的虚拟码,最后此虚拟码由上层调用,实现按下此键的相应功能。鉴于ISR的任务比较单一,ISR通常都要求越短、越快越好。
  (3)中断服务线程(IST)
  中断服务例程以键盘中断的逻辑中断标识符形式返回给系统任务调度进程,中断服务线程则在矩阵键盘驱动中负责具体中断处理。因此,矩阵键盘驱动的中断事件HANDLE hKEYEvents要分别对应矩阵键盘产生的中断。一般来说,中断服务例程较小,并且只做很少的处理工作,中断服务线程就必须完成大多数中断处理工作,包括响应中断、扫描按键位置、发送键盘消息等。
例如,在矩阵键盘驱动IST中会先调用CreateEvent函数创建事件对象,接着调用系统函数InterruptInitialize完成中断。完成这些初始化工作后,接着调用 WaitForMultipleObjects (hKEYEvents)函数进入键盘事件的等待队列中。最后,当有事件被捕获后,根据不同的事件类型进入不同的键盘扫描处理程序。

0
相关文章