NKRO转USB。解决方案中的问题和拐杖

你好,GT。在我过去的一篇文章中(特别是关于SteelSeries Apex M800键盘的文章)用户 monah_tuk在评论中问了一个有趣的问题:USB键盘如何实现NKRO(n键翻转,同时夹紧多个键)。这个问题使我感兴趣,当我更深入地挖掘时……一般而言,有这么多的马ean,尽管有一些信息,但对于整个职位来说,是足够的。 似乎USB 2.0甚至在低速模式下也可以提供高达1500 Kbps(约185 KB / s)的传输速率,传输击键的问题是什么?但不是那么简单。





为了弄清楚USB连接有什么问题,我们将不得不深入研究历史,并稍微研究一下键盘的设计。

展期的问题:重影


假设您有一个带有标准104/105键的键盘。在理想情况下,要获得100%的准确信息,有关哪个按键被夹紧的信息,您将需要比按钮多1条“接线”的功能:来自按钮的104/105线和一个公共的“接地”。

当然,这样的布线将是困难且昂贵的,因此在所谓的内部使用了许多便宜的键盘。 “矩阵”-一组相交的水平和垂直触点。控制器扫描每一列,检测信号,开始扫描“行”并计算按下的键。



如果您按S和G键,并想在不同的行中添加第三个键,则控制器将无法再说出哪一行是关闭的:充其量,它将无法检测到这三行中的一个,最糟糕的是-从对于接线功能,我会再画一个您没有单击的位置。这称为重影。

可以在接线领域中使用各种技巧来解决此问题:最受欢迎的组合挂在不同的“行”上,通常是热键元素的功能行被分配给单独的行。布局保持足够简单,但也不是昂贵的键盘,很少有5 + KRO-通常在按下键时限制为3-4。

另外,控制器可以阻止该块中的“邻居”以删除“额外”操作。也就是说,正式而言,键盘可以支持6KRO,并且诚实地同时按下CTRL + AWFBNM,但不允许钳住AWSD,从而将自身限制为触发WAS或WDS类型。

你可以用这种检查你的键盘的事情。它有一些局限性,但是它们是由于系统会比浏览器更早地拦截按钮按下的事实。例如,在页面“捕获”它们之前,“打印屏幕”或“ Alt + Tab”将起作用。

现在,这个糟糕的(从工作的角度来看)“便宜”的系统几乎完全被一个稍微复杂一点的“开放”矩阵所取代,但是,仍然可以找到实例,尤其是在各种“一美元”完整的键盘中,这些键盘可以“从外部”进入计算机。盒子。”

较昂贵的(通常是游戏或商务键盘)使用更复杂的电路,几个控制器,单个连接,多层印刷电路板,通常,各种方法可减少或完全消除重影,但会导致设备价格上涨。我们找出NKRO的潜在硬件问题,然后转向软件问题。

键盘高达USB


用于将键盘和鼠标连接到USB的主要公共连接器是PS / 2。这是一个整洁的例子:



它的魅力在于,在所有标准下,可以通过一个连接器和分离器使用鼠标和键盘,输入设备本身生成中断并发送有关按下的按钮/光标移动的信息。如果正确完成所有操作,并且至少没有在键盘的硬件功能上进行翻转,则至少可以在键盘上滚动您的脸-键盘将发送控制器“读取”的所有内容。

不幸的是,PS / 2有其缺点(例如Plug'n'Play问题和不方便的连接器),而USB的普及使得PS / 2外围设备几乎完全被市场淘汰。不过,仍然有相当现代的主板带有USB 3.0和两个(!)PS / 2:


由于引脚排列功能(通用电源,鼠标和键盘中数据+ /数据-的不同引脚),还提供了组合端口,您也可以连接使用适配器通过一个端口连接两个设备:



NKRO USB问题:应归咎于USB HID


为了使USB键盘在加载系统之前可以工作(即在BIOS / UEFI中),使用了标准的HID驱动程序,该驱动程序是为对键盘和USB主机的最大可能支持而开发的。 USB HID类描述设备,以便USB主机和USB设备的标准实现可以在不安装特殊驱动程序的情况下进行通信。

标准键盘(设计为支持USB HID标准)使用输出(来自USB主机的输出)数据流(USB堆栈的端点)来获取有关指示器(Num / Caps / Scroll Lock)状态和输入流(来自键盘的信息)的信息。 USB主机的“ Inbound”(入站),以发送有关所按按键的信息。

如果遵循最严格的USB HID v1.11规范,该规范支持USB引导模式(并允许您使用USB键盘进入BIOS并在其中运行),则每次USB主机对其进行轮询时,键盘都会向CPU发送中断信息,无论她的状况是否发生了变化。因此,以最小的开销“模拟”了PS / 2键盘的工作。

在这种情况下,键盘根据USB 1.1标准(有时为2.0)低速工作,并且端口轮询速率为100 Hz。在这种模式下,USB的最大数据包长度为8个字节,并且每10毫秒发送一次。保留了一个字节,以便剩下7个字节供键盘工作,即该数量足以编码任何修改键和其他六个修改键的按下。

可以确定谁的键盘可以在6-KRO模式下工作,这是大多数USB键盘的标准配置。做更少的事情是可能的(有时是有意识的,有时是由于重影和按键干扰而导致的),而更多的事情-仅违反USB HID规范。

加载后,系统可以增加轮询USB端口的频率,加载特殊的驱动程序,例如,允许使用多媒体密钥和宏。

NKRO USB实现


绕行限制USB HID实际上有两种类型。在第一种情况下,键盘被专有软件检测到,并转移到某些特殊模式,并将数据从控制器直接发送到驱动程序,并且它已经与系统通信。这项决定的减法是所谓的 输入滞后:输入滞后。采访中,我发现只有一个键盘允许通过USB连接时按下10个键:在“游戏”下带有tak的特里中文名词。所有者已经住在伊尔库茨克,因此只发现这种东西也就不足为奇了。

第二种解决方案以其简单性和独创性而着迷,但实际上这是一个拐杖:


谢谢您的截图 Myfeargear,Logitech G710 +注意到了这种情况。

键盘只是由几个HID设备提供给系统的,每个设备都有自己的6KRO。对熟人的快速调查要求他们指定键盘型号并发送这样的屏幕快照,显示LogitechA4techCougarSteelSeries都使用此hack-通常,在USB键盘的描述中找到NKRO的每个人。

注意!在检查键盘之前,请确保您没有连接任何复杂的多按钮USB鼠标(甚至是无线连接)。由于所有多按钮功能相同,因此可以装作“额外”的键盘。

结论


实际上,仅此而已。几乎所有制造商都选择了一种“拐杖”方法,但是这种方法有效且不会给用户造成任何特殊问题,并且可以实现USB上诚实的(好,相对诚实)。

Source: https://habr.com/ru/post/zh-CN384797/


All Articles