从 USB HID 键盘发送语言布局

Gen*_*ock 1 keyboard usb avr hid

我目前正在使用 Atmel 微控制器开发 USB HID 键盘。一切正常,但我通常在不同的机器上使用不同的键盘布局。现在我开始想知道是否有可能告诉主机使用哪种键盘布局,即 EN-US,以便键码总是映射到每台机器上的正确字符上。有任何想法吗?

Nip*_*ipo 6

USB 键盘发送的键码代表键盘上键的物理位置,而不是 ascii/unicode 键数据。就本地化而言,这可能是一件坏事,但这是 90 年代的协议,他们希望保持简单,并保持当时 PC/AT 标准的心态。

这种方法的问题是硬件无法强制打印在其物理按钮上的布局。它所能做的就是提示驱动程序有关其映射的信息。USB HIDbCountryCode在 USB 描述符数据(第 6.2.1 节,第 22 页)中定义了一个字段:

识别本地化硬件的国家代码的数字表达式。

不幸的是,这是未指定的(相同语言的键盘变体之间没有区别等),因此硬件制造商从不经常使用该字段,他们几乎总是将0x00,即NotSupported. 由于硬件从未使用过这么多,因此从未开发过操作系统支持。