




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、键盘驱动开发1键盘驱动开发概念键盘驱动被分为不同的组成部分,这样可以给开发键盘驱动带来便利。一个键盘布局是很关键的,其中包括键的个数和键的配置。一些私人拥有的键盘使用自定义布局,并且很多键盘可以按照自己的喜好映射按键。一些键盘驱动需要处理能构产生多个虚拟键的按键。它在小硬件平台并且不具有所有物理按键的情况下是非常有用的。一些按键有多个函数,这个驱动产生虚拟键是基于特殊物理按键和修改按键的,例如 SHIFT 和 ALT。键盘驱动是按照分层结构执行的,上层为MDD 层,映射扫描码到虚拟键的编码上,产生与虚拟键编码相关的字符,然后打包键盘信息,并且将此信息输入到系统信息队列中。下层为PDD层,它将从
2、硬件重新获得扫描码。键盘驱动不同于其他设备驱动,因为他是依靠语言的,这个对虚拟键编码的扫描码和对于统一编码字符传输的虚拟键编码是依靠于键盘的设计语言。PFN_KEYBD_DRIVER_VKEY_TO_UNICODE函数与产生统一编码字符相关,而这个字符是基于虚拟键盘状态的。这个函数只是依赖于键盘开发的语言;这些翻译都是以翻译表为基础的,通常被认为是键盘映射,由此你能够定义不同的语言。如果需要,你可以建立自己的键盘映射或定制已经存在的键盘映射。这个输入系统在启动时间加载键盘驱动程序。当输入系统开始运行时,它将从HKEY_LOCAL_MACHINEHardwareDeviceMapKEYBDDri
3、vername注册键中重新获取键盘驱动动态链接库(DLL)的名字。如果没有找到入口,输入系统将使用默认名字Keybddr.dll。然后加载这个DLL,并且核查所有需要的入口点是否存在, 然后,这个输入系统调用PFN_KEYBD_DRIVER_INITIALIZE 函数去执行一次初始化。 在这个函数中,这个驱动保存输入系统回调函数和初始化硬件, 还有为处理键盘中断的中断服务线程(IST)。当一个中断信号被发出时,键盘驱动与转变硬件扫描码为虚拟按键码有关,并且与回调PFN_KEYBD_DRIVER_INITIALIZE_EX函数和keybd_event API 有关。之后,输入系统从消息队列和回调
4、驱动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 函数获取并设置关于键盘的信息。当主输入线程处理一个
5、键盘连接事件并通过回调函数传到PFN_KEYBD_DRIVER_INITIALIZE_EX, 这个线程将调用 PFN_KEYBD_DRIVER_GET_INFO函数,这个函数被驱动程序用于统一编码并取得虚拟按键码。这个线程通常为虚拟键状态数据分配所需要的内存和任何额外的所需数据。 2键盘接口模块框图本接口最多支持88的矩阵键盘,最多8个直接键和2个旋转编码器,这个键盘接口连接PXA27x处理器到矩阵键盘和一个带有旋转编码器的直接按键。矩阵键盘和直接键盘能够独立或同时被使能处于工作状态。键盘接口同时提供两种风格的接口,其中包括:矩阵键盘接口,直接键盘接口。矩阵键盘接口:支持自动和手动扫描键盘阵列
6、方式。并支持8针输入和8针输出。矩阵键盘扫描方式为:l 手动矩阵扫描;l 事件触发的自动矩阵扫描;l 软件触发的自动矩阵扫描;直接键盘接口:从直接键和旋转编码器接收8个输入信号(KP_DKIN),并将此信号存储在键盘接口的直接键盘寄存器(KPDK)中。支持8针输入。3键盘接口I/O信号描述KP_DKIN信号为来自直接键盘和旋转编码传感器的输入信号,其中KP_DKIN四位是说明是为直接键74的输入引脚。KP_DKIN是既可以作为32的直接键输入引脚信号,又可以作为旋转编码器1的信号。KP_DKIN是既可以作为10的直接键输入引脚信号,又可以作为旋转编码器0的信号。KP_MKIN信号为来自矩阵键盘
7、的输入信号和矩阵行所读取的信号。KP_MKOUT为矩阵键盘的输出信号。这个键盘接口发射扫描信号到矩阵键盘的每一列,并检查是否有键被按下。这个输出信号被自动扫描逻辑给驱动。4键盘相关寄存器描述4.1键盘接口控制寄存器(KPC)键盘接口控制寄存器指定了键盘的设定,它可以独立地使能矩阵键盘接口(ME)和直接键盘接口(DE)。设置或清除DIE和MIE比特,将每个键盘使能或不使能中断产生设置和清除旋转编码器的使能比特REE1和RFEE0就可以完成对直接键盘旋转编码器的使能控制;这个MKRN和MKCN比特指定了矩阵键盘的行和列的数目。DKN指定了直接键的个数。4.2键盘接口直接键寄存器(KPDK)如果直接
8、键被使能(KPCDE),直接键寄存器包含了上一个直接键输入信号的读取细节;所有直接键的状况被存储在KPDK中,此寄存器只是在加电的情况下被重新设置。4.3键盘接口旋转编码器计数寄存器(KPREC)旋转编码器计数寄存器包含了于旋转编码器相关的计数器的值,设置旋转编码器1和旋转编码器0的上溢和下溢状态及其相关的计数值。4.4键盘接口矩阵键盘寄存器(KPMK)当最后一个手动扫描被完成后,矩阵键盘寄存器包含了被按在矩阵键盘上的键的行信息;当寄存器被最后一次读取的时候,MKP比特表明一个矩阵按键被按下。4.5键盘接口自动扫描寄存器(KPAS)自动扫描寄存器包含被单个键被按下时的行和列的细节信息,并且包括
9、多键被按下和非法数据的信息。当键盘事件的时间长度长于设定的键的弹起时间间隔,键盘的自动扫描被初始化。4.6键盘接口自动扫描多键按下寄存器03(KPASMKPx)此寄存器KPASMKP0设置扫描打开,并且矩阵键盘的第1列和第0列所对应的个行位置的信息。此寄存器KPASMKP1设置扫描打开,并且矩阵键盘的第3列和第2列所对应的个行位置的信息。此寄存器KPASMKP2设置扫描打开,并且矩阵键盘的第5列和第4列所对应的个行位置的信息。此寄存器KPASMKP3设置扫描打开,并且矩阵键盘的第7列和第2列所对应行位置的信息。4.7键盘接口弹起间隔寄存器(KPKDI)弹起间隔寄存器存储了直接键盘和矩阵键盘的弹
10、起间隔时间设置,此时间是以ms为单位的。5 键盘驱动程序结构和相关函数介绍本部分驱动结构是按照Platform Builder帮助文档中所提供的驱动开发模型总结出来的文档,是属于一种分层开发驱动模型,但在实际开发中,有可能不使用这种以分层模式为开发结构的开发模式,而是使用以一个主函数的形式,调用其他函数,将其他具体的函数的实现作为主函数的库函数加以调用。在这里首先介绍这种分层结构驱动开发模型,然后介绍另外一种开发键盘驱动程序的程序结构单片驱动程序开发模型。键盘驱动MDD层函数:函数名描述PFN_KEYBD_DRIVER_GET_INFO这个函数重新获取关于键盘和驱动的信息PFN_KEYBD_D
11、RIVER_INITIALIZE这个函数初始化键盘驱动(只一次)PFN_KEYBD_DRIVER_INITIALIZE_EX这个函数初始化键盘驱动PFN_KEYBD_DRIVER_INIT_STATES这个函数初始化虚拟键编码状态和驱动特定的状态PFN_KEYBD_DRIVER_MAP_VIRTUAL_KEY这个函数执 MapVirtualKey的功能.它被 MapVirtualKey函数调用. PFN_KEYBD_DRIVER_POWER_HANDLER这个函数处理系统电源状态改变说明PFN_KEYBD_DRIVER_SET_MODE这个函数为键盘驱动设置自动重复信息PFN_KEYBD_DR
12、IVER_VKEY_TO_UNICODE这个函数产生合适的统一字符和SHIFT状态标志为信息,目的是为了指定虚拟键盘编码,键盘状态阵列,和驱动状态PFN_KEYBD_EVENT_CALLBACK这个函数是一个回调函数模型,这个模型被传递到 PFN_KEYBD_DRIVER_INITIALIZE 函数.PFN_KEYBD_EVENT_CALLBACK_EX这个函数是一个回调函数模型,这个函数模型被传递到thePFN_KEYBD_DRIVER_INITIALIZE_EX 函数.PFN_LAYOUT_MGR_ACTIVATE_KEYBOARD_LAYOUT这个函数使一个输入区处于工作状态PFN_LA
13、YOUT_MGR_GET_KEYBOARD_LAYOUT这个函数返回目前输入区ID号PFN_LAYOUT_MGR_GET_KEYBOARD_LAYOUT_LIST这个函数用一个可用目录的输入区ID句柄填充一个缓存器PFN_LAYOUT_MGR_GET_KEYBOARD_LAYOUT_NAME这个函数重新得到现在的输入区ID号名字PFN_LAYOUT_MGR_GET_KEYBOARD_TYPE这个函数重新得到关于目前键盘的信息PFN_LAYOUT_MGR_LOAD_KEYBOARD_LAYOUT这个函数在可用的设计清单中存放特定的设计键盘驱动PDD层函数:函数名描述PFN_KEYBD_PDD_E
14、NTRY这个函数初始化键盘驱动的PDD层PFN_KEYBD_EVENT这个函数在键盘系统中断信号被发送后,重新获得键盘事件,它被上层调用PFN_KEYBD_PDD_TOGGLE_LIGHTS这个函数锁定在键盘上的灯。PFN_KEYBD_PDD_POWER_HANDLER这个函数处理系统电源状态变化,它被上层所调用6键盘状态标志信息(KEY_STATE_FLAGS)值描述KeyStateToggledFlag键被锁定KeyStateGetAsyncDownFlag在最后一个GetAsyncKeyState 呼叫前,键被按下KeyStateReserved4保留KeyStateReserved8保
15、留KeyStateReserved10保留KeyStateReserved20保留KeyStatePrevDownFlag这个键先前已经被按下KeyStateDownFlag这个键目前被按下,这个值是驱动的内部值,它确定key-up 和 key-down事件.KeyStateKeyEventFlag这个值是驱动的内部值KeyShiftAnyCtrlFlag左 CTRL 键 或右 CTRL 键被按下.KeyShiftAnyShiftFlag左 SHIFT 键或右 SHIFT键被按下.KeyShiftAnyAltFlag左 ALT 键或右 ALT键被按下. KeyShiftCapitalFlagC
16、APS LOCK 键被锁定KeyShiftLeftCtrlFlag左 CTRL键被按下KeyShiftLeftShiftFlag左SHIFT键被按下KeyShiftLeftAltFlag左ALT键被按下KeyShiftLeftWinFlag左Windows logo 键被按下KeyShiftRightCtrlFlag右 CTRL键被按下KeyShiftRightShiftFlag右SHIFT键被按下KeyShiftRightAltFlag右ALT键被按下KeyShiftRightWinFlag右Windows logo 键被按下KeyShiftReserved40000保留KeyShiftDe
17、adFlag一个死特征被产生,他的值被KeybdDriverVKeyToUnicode函数设定KeyShiftNoCharacterFlag这里没有为特定的虚拟键盘编码事件的合法的字符产生,它的值被KeybdDriverVKeyToUnicode 函数设定,这个值能构在key-up事件时被设定,或者在SHIFT状态时,一个键改变KeyShiftLanguageFlag1特殊语言 SHIFT 键.KeyShiftKeybdEventFlag驱动的内部值KeyShiftUseVKNullFlag驱动的内部值KeyShiftNumLockFlag这个 NUM LOCK 键在锁定状态KeyShiftS
18、crollLockFlag这个 SCROLL LOCK键在锁定状态KeyShiftReserved400保留KeyShiftReserved200保留KeyShiftReserved100保留KeyShiftKanaFlag日本键盘, KANA LOCK被锁定7单片驱动程序开发模型在CAYMAN开发板中,开发驱动是采用单片驱动程序开发模型开发的。该键盘驱动的文件如下图所示:此开发模型中KeypadMain.cpp函数:该函数为键盘驱动主函数,是整个驱动开发的入口程序。KBDIST.CPP函数:该函数主要实现KeybdDriverGetInfo:键盘驱动获取信息;KeybdDriverSetMo
19、de:键盘驱动设置模式。KeypdIstLoop:判断键盘处于循环模式KeybdDriverPowerHandler:此函数完成电源的控制KeybdDriverInitializeEx:此函数完成键盘的驱动初始化工作。KEYPADPHY.H函数:此函数完成与键盘相关的寄存器定义。KEYPADPHY.C函数:ReadScanCodeAutomatically:该函数完成自动读取扫描码功能。ReadDirectKeys:该函数完成读取直接按键信息功能。XllpReadScanCode:该函数完成读取扫描码的功能。XllpSetUpKeyPadInterrupts:该函数设置键盘中断。KeyPadG
20、pioConfigure:该函数完成键盘GPIO的配置。KEYPD.HPP函数:该函数定义了键盘类,并定义了ScanCodeToVKeyEx函数,AdjustVolumnTune函数,VKeyToUnicodeInfo函数,KeybdDriverRemapVKeyDownEx函数,VKeyToScanCode函数,KeybdDriverRemapVKeyUpEx函数。KEYPD.CPP函数:KeypdPdd_PowerHandler:该函数主要完成键盘的电源操作。KeypdPdd_InitializeDriverEx:该函数完成键盘驱动的初始化工作。PostShellWindowMessage
21、:该函数完成获取WINDOWS信息。KeypdPdd_GetEventEx:该函数完成键盘获取事件的操作。KeypdPdd_ToggleKeyNotification:完成键盘锁定键说明。KeypdPdd_KeyStateToggled:完成键盘开始锁定。Keypd:IsrThreadProc:完成中断服务线程处理。KeypdIsrThread:键盘中断服务线程。Keypd:IsrThreadStart:中断服务线程开始工作。Keypd:Initialize:完成键盘初始化.KPControl.hpp函数:该函数定义了KPControl和KEYPAD_REGS的类定义。KPControl.Cp
22、p函数:KPControl:KeybdDataRead: 该函数实现读取键盘数据。FreeKeyPadRegs:该函数释放键盘寄存器空间AllocKeyPadRegs:该函数完成分配寄存器空间。KPControl:Initialize:该函数完成键盘的初始化工作。KPControl:KeyboardInterfaceTest:该函数完成键盘接口测试功能。KPControl:KeyboardLights:该函数完成键盘灯控制。KPControl:KeypdPowerOff:该函数完成键盘电源关闭功能。KPControl:KeypdPowerOn:该函数完成键盘加电功能。SCVKENGUS1.CP
23、P函数:ScanCodeToVKeyTable: 该函数完成扫描码到虚拟键盘的对应表格。MapVkeyFromSCode:该函数完成从扫描码到虚拟按键的映射。AdjustVolumnTune:该函数完成音量调节功能。ScanCodeToVKeyEx:VKeyToScanCodeTable:该函数完成从虚拟按键到扫描码表格的映射。VKeyToScanCode:从虚拟按键到扫描码。VKRMPSIMPLE.CPP函数:v_NumPadVKeyNumLockOff: 在数字锁键打开后,数字键盘重新映射.AnyNumPadKeyDown: 检测是否有任何数字键被按下KeybdDriverRemapVKeyDownEx:当虚拟按键被
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购物中心儿童游乐区运营管理与品牌合作协议
- 纳米药物研发与临床试验伦理审查合作协议
- 高端别墅房产中介独家代理销售协议
- 网络短视频与影视项目联合投资协议
- 全民健身活动赞助合作协议书
- 高清网络直播用监听音箱租赁服务协议
- 粤港澳大湾区跨境合伙企业项目投资信托合同
- 家具出口运输保险及关税豁免合同
- 个性化网络直播虚拟背景定制服务协议
- 水利枢纽安全生产责任保证书
- 2025年山东省应急管理普法知识竞赛参考试题库大全-上(单选题)
- 102解二元一次方程组【10个必考点】(必考点分类集训)(人教版2024)
- 邻水现代农业发展集团有限公司招聘笔试题库2025
- 肿瘤专科进修汇报护理
- 配电房防火安全施工技术措施
- 地铁乘客满意度影响因素组态效应分析:出行链视角研究
- 数学三角形的高、中线、角平分线教案2024-2025学年北师大版(2024)七年级数学下册
- 2021水闸工程运行管理规程
- (高清版)DB51∕T 1292-2011 牧草种质资源田间鉴定与评价技术规程
- 三农项目申请操作流程指南
- 组织行为学(对外经济贸易大学)知到课后答案智慧树章节测试答案2025年春对外经济贸易大学
评论
0/150
提交评论