键盘驱动开发
1键盘驱动开发概念
键盘驱动被分为不同的组成部分,这样可以给开发键盘驱动带来便利。一个键盘布局是很关键的,其中包括键的个数和键的配置。一些私人拥有的键盘使用自定义布局,并且很多键盘可以按照自己的喜好映射按键。一些键盘驱动需要处理能构产生多个虚拟键的按键。它在小硬件平台并且不具有所有物理按键的情况下是非常有用的。一些按键有多个函数,这个驱动产生虚拟键是基于特殊物理按键和修改按键的,例如SHIFT 和ALT。
键盘驱动是按照分层结构执行的,上层为MDD 层,映射扫描码到虚拟键的编码上,产生与虚拟键编码相关的字符,然后打包键盘信息,并且将此信息输入到系统信息队列中。下层为PDD层,它将从硬件重新获得扫描码。
键盘驱动不同于其他设备驱动,因为他是依靠语言的,这个对虚拟键编码的扫描码和对于统一编码字符传输的虚拟键编码是依靠于键盘的设计语言。PFN_KEYBD_DRIVER_VKEY_TO_UNICODE函数与产生统一编码字符相关,而这个字符是基于虚拟键盘状态的。这个函数只是依赖于键盘开发的语言;这些翻译都是以翻译表为基础的,通常被认为是键盘映射,由此你能够定义不同的语言。如果需要,你可以建立自己的键盘映射或定制已经存在的键盘映射。
这个输入系统在启动时间加载键盘驱动程序。当输入系统开始运行时,它将从HKEY_LOCAL_MACHINE\Hardware\DeviceMap\KEYBD\Drivername注册键中重新获取键盘驱动动态链接库(DLL)的名字。如果没有到入口,输入系统将使用默认名字Keybddr.dll。然后加载这个DLL,并且核查所有需要的入口点是否存在,然后,这个输入系统调用PFN_KEYBD_DRIVER_INITIALIZE函数去执行一次初始化。在这个函数中,这个驱动保存输入系统回调函数和初始化硬件,还有为处理键盘中断的中断服务线程(IST)。当一个中断信号被发出时,键盘驱动与转变硬件扫描码为虚拟按键码有关,并且与回调PFN_KEYBD_DRIVER_INITIALIZE_EX函数和keybd_event API有关。
之后,输入系统从消息队列和回调驱动PFN_KEYBD_DRIVER_VKEY_TO_UNICODE 的例程来获取键盘事件,这个驱动分析了特定的键盘事件和虚拟按键事件和产生相关的字符。这个输入系统然后发送虚拟按键码和字符到合适的应用程序中去。这个键盘驱动必须加
KEYBD_DEVICE_SILENT或KEYBD_DEVICE_SILENT_REPEAT 标志到虚拟按键码或通过KEYEVENTF_SILENT到keybd_event ,目的时为了抑制按键发出的嘀哒声。
PFN_KEYBD_DRIVER_GET_INFO 和PFN_KEYBD_DRIVER_SET_MODE函数获取并设置关于键盘的信息。当主输入线程处理一个键盘连接事件并通过回调函数传到PFN_KEYBD_DRIVER_INITIALIZE_EX, 这个线程将调用PFN_KEYBD_DRIVER_GET_INFO函数,这个函数被驱动程序用于统一编码并取得虚拟按键码。这个线程通常为虚拟键状态数据分配所需要的内存和任何额外的所需数据。
2键盘接口模块框图
本接口最多支持8×8的矩阵键盘,最多8个直接键和2个旋转编码器,这个键盘接口连接PXA27x处理器到矩阵键盘和一个带有旋转编码器的直接按键。矩阵键盘和直接键盘能够独立或同时被使能处于工作状态。
键盘接口同时提供两种风格的接口,其中包括:矩阵键盘接口,直接键盘接口。
矩阵键盘接口:支持自动和手动扫描键盘阵列方式。并支持8针输入和8针输出。
矩阵键盘扫描方式为:
●手动矩阵扫描;
●事件触发的自动矩阵扫描;
●软件触发的自动矩阵扫描;
直接键盘接口:从直接键和旋转编码器接收8个输入信号(KP_DKIN<7:0>),并将此信号存储在键盘接口的直接键盘寄存器(KPDK)中。支持8针输入。
3键盘接口I/O信号描述unicode keyboard download
KP_DKIN<7:0>信号为来自直接键盘和旋转编码传感器的输入信号,其中KP_DKIN<7:4>四位是说明是为直接键7-4的输入引脚。KP_DKIN<3:2>是既可以作为3-2的直接键输入引脚信号,又可以作为旋转编码器1的信号。KP_DKIN<1:0>是既可以作为1-0的直接键输入引脚信号,又可以作为旋转编码器0的信号。
KP_MKIN<7:0>信号为来自矩阵键盘的输入信号和矩阵行所读取的信号。
KP_MKOUT<7:0>为矩阵键盘的输出信号。这个键盘接口发射扫描信号到矩阵键盘的每一列,并检查是否有键被按下。这个输出信号被自动扫描逻辑给驱动。
4键盘相关寄存器描述
4.1键盘接口控制寄存器(KPC)
键盘接口控制寄存器指定了键盘的设定,它可以独立地使能矩阵键盘接口(ME)和直接键盘接口(DE)。设置或清除DIE和MIE比特,将每个键盘使能或不使能中断产生设置和清除旋转编码器的使能
比特REE1和RFEE0就可以完成对直接键盘旋转编码器的使能控制;这个MKRN和MKCN比特指定了矩阵键盘的行和列的数目。DKN指定了直接键的个数。
4.2键盘接口直接键寄存器(KPDK)
如果直接键被使能(KPC[DE]),直接键寄存器包含了上一个直接键输入信号的读取细节;所有直接键的状况被存储在KPDK中,此寄存器只是在加电的情况下被重新设置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。