基于 NXP LPC5512 如何添加全键无冲功能介绍

一、全键无冲简介

全键无冲(N-key rollover),即全部按键无冲突,是游戏键盘重要的技术特性,所有按键同时按下而均被识别;普通键盘同时按下键盘三个按键就可能造成键盘冲突,比如同时按下“ WE ”两个键, 再按 23sdxc 按键,会发现这些按键都不能使用了;游戏过程中,“前进+右转”情况下周边多个攻击技能按键将不能使用。

二、检测全键无冲功能

衡量一个键盘的重要因素就是是否键位冲突。键位冲突就是键盘按下一个或几个键后,其他按键会失灵的现象。现在的机械键盘和电容键盘一般都是全键无冲的,但也有些无良商家以次充好,以多键位无冲标注全键无冲。现在我就告诉你测试自己键盘的方法。

首先,在电脑中打开名为 KTEST 的键盘测试应用程序(该软件包可通过本博文发言处留言获得),桌面图标如下图 1:


本次测试全键无冲的键盘如下图 2:


测试界面如下图 3 所示:

将要测试的键盘接入电脑的 USB 接口,接下来我们一个一个的按下键盘不松开,当前按下的按键在软件都会显示红色,按键按下过的键会显示蓝色,此时,我们按下几个键键盘就是支持几键无冲。普通键盘有 3 个或更多按键同时按下时,就可能发生键盘冲突;当没有冲突发生时,最多只能有 6 个普通按键同时按下有效,不含 shift、ctrl、win、alt 四个键, 这是由 USB 接口通讯方式限制的。USB 协议下,键盘会以某个固定的回报率(每秒 125-1000 次),定期向主机发送当前按键的状态,每次发送 8 个字节,除去前两个字节外余下 6 个字节全部用来传输键盘的输入状态,同一个数据包内超过 6 键输入的数据是无法保留的。

测试结果如图 4:


由于键盘面积比较大,上图没有将全部按键同时按下的效果呈现出来。通常键盘是支持六键无冲的,上图已经超过六个按键同时被按下。


三、添加全键无冲功能

我们学会测试全键无冲之后,还需要学习如何做全键无冲功能。



添加描述符,多媒体用 report ID 1,全键用 report ID 2,可以通过 report ID 进行区分。这部分需要打开一个 LPC551X SDK 的 USB Composite Device 工程,包含了 USB HID 鼠标和键盘的工程,同时在鼠标的描述符部分加入Consumer 和全键的描述符。并且默认的 Composite 工程中,鼠标是接口 1,键盘是接口 2,我们需要把它们进行交换。

 
但是扫描按键数量会大于 8 ,因此要将键放入全键 buffer 中:


同样,在六键中找不到松开的键,在全键 buffer 里面寻找松开键,及大于 8 时



判断有全键数据时发送全键,注意第一个 buffer 为 report ID 0x02,另外发送多媒体和全键应该分时发送,因为它们共用一个通道。Consumer Buffer 包含 1 个 BYTE 的 Report ID 以及 4 个 BYTE 的数据,全键 Buffer 包含 14 个 BYTE,第一个 BYTE 同样是Report ID 。剩余 13 个 BYTE 用于存放全键的键值。我们可以在扫 Key 时对同时按下的按键进行计数,记录此时按下按键的个数,将他们所对应的键值填充到这 13 个 BYTE 中,通过 USB 通信到电脑端。



 

四、总结

通过以上的理解和学习,相信大家对全键无冲这个概念有了清晰的了解,并且能够自主尝试添加一个带有全键无冲功能的键盘。

对于键鼠系列的博文,希望大家可以多多关注我的大大通博文,后面会给大家分享更多关于键鼠系列的博文。感谢大家支持~

五、资料

【1】圈圈教你玩 USB.pdf

【2】LPC55S1x_PDS.pdf·    

 

技术文档

类型标题档案
硬件Datasheet

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论