如何将特定的键盘设备置于 ascii 模式?

cer*_*cem 0 keyboard usb-device

条码扫描仪的行为就像一个 USB 键盘设备,我的情况一开始并没有什么不同。我打开一个nano屏幕,通过 USB 端口插入扫描仪,读取条码并看到条码正下方写的字符串。

我不知道如何,但现在它不能那样工作。扫描仪(类似键盘的设备)向系统发送一些垃圾。

我写了一个简单的 NodeJS 代码来转储捕获的内容:

data:  <Buffer 04 00 62 60 5b 00 00 00> string:  b`[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5f 5b 00 00 00> string:  b_[
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 60 62 00 00 00> string:  b`b
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5d 5a 00 00 00> string:  b]Z
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 5d 00 00 00> string:  b\]
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 04 00 62 5c 61 00 00 00> string:  b\a
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
data:  <Buffer 00 00 28 00 00 00 00 00> string:  (
data:  <Buffer 00 00 00 00 00 00 00 00> string:  
Run Code Online (Sandbox Code Playgroud)

我期待一个字符串,比如SIP-4-1. (这里showkey相同条码的输出)

相同的扫描仪在 Windows 上正常工作。我想这与键盘模式或其他东西有关。如何更改特定 USB 键盘设备的模式?

Jde*_*eBP 5

您的扫描仪没有发送垃圾。这些是具有传统 8 字节“启动”报告描述符的传统 USB HID 键盘设备的完美传统输入报告。

解码它们,可以看出您的扫描仪没有直接发送“S”、“I”等的密钥。相反,它正在模拟使用⎇ Alt密钥输入它们。它在这样做时对操作系统做出了几个相当糟糕的假设,其中任何一个或全部都很容易出错。

例如:

  • 输入报告
    04 00 62 60 5b 00 00 00
    与USB HID使用代码键E26260,和5B所有同时按下。
  • E26260,和5B都为USB HID使用代码⎇ Left AltIns/0↑/8,和PgDn/3
  • 083 10是“S”的代码。
  • 输入报告
    00 00 00 00 00 00 00 00
    表示所有这些键都已释放。

其余的确实解码为“I”、“P”、“-”、“4”、“-”和“1”,所有这些都是以这种方式输入的⎇ Alt加上三个十进制数字。(最后两个输入报告是按下和释放⮠ Return。)

你可以在这里看到几个破碎的假设。

  • 扫描仪假设键盘驱动程序在特定方向解析输入报告。这并不能保证,和扫描仪应该适当地生成单个报表的Ins/0↑/8以及PgDn/3被挤压,进而与整个按住修改键释放。它依赖于一个偶然的实现,而扫描仪实际发送的是所有四个键同时按下和释放
  • 扫描仪假设这⎇ Left Alt是用于此的关键。但在某些操作系统和键盘布局中,它可能是⇮ Alt Gr/ ,⎇ Right Alt而不是E640在输入报告的第一个字节中编码) not E2

    事实上,您当前的操作系统、键盘驱动程序和键盘布局甚至可能根本不支持使用这样的代码输入字符。(例如,FreeBSD 的syscons内核终端仿真器可以。当然,Microsoft Windows 也是如此。但是 nosh 工具包的console-fb-realizerLXDE 和XFCE4等 GUI ,而且似乎Ubuntu 上所有可用的 GUI都没有。)

  • 扫描仪假设 NumLock 已关闭。如果 NumLock 处于开启状态,它应该也假装按下了其中一个 shift 键,以反转锁定的感觉。

对于某些扫描仪,可以通过扫描特殊的“控制”条形码来修改这些内容。这大概就是这里发生的事情。您扫描了一个“控制”条形码,该条形码将扫描仪切换到您的操作系统、键盘驱动程序和键盘布局无法处理的操作模式。在这种情况下,您需要查阅扫描仪的手册并找到关闭行为的控制代码。

例如:对于 NLS-HR32 系列扫描仪,这是将扫描仪置于“ALT+Keypad 模式 2”或“ALT+Keypad 模式 3”的效果,您需要切换回“禁用 ALT+Keypad”或“ALT+键盘模式1”。