从USB HID键盘发送语言布局

时间:2016-09-08 10:09:00

标签: keyboard usb avr hid

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

2 个答案:

答案 0 :(得分:4)

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

此方法的问题是硬件无法强制打印在其物理按钮上的布局。它所能做的就是向驱动程序提示其映射。 USB HID在此范围内定义USB描述符数据中的bCountryCode字段(第6.2.1节,第22页):

  

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

不幸的是,这是未明确规定的(同一语言的键盘变体之间没有区别等),因此硬件制造商从未使用过这个字段,他们几乎总是放0x00,即NotSupported。由于硬件从未使用过这么多,因此从未开发过OS支持。

答案 1 :(得分:1)

USB键盘通常没有"键盘布局"的概念。无论布局如何(EN,DE等),所有键盘上相同位置的键都会发送相同的中断/中断代码。主机内的键盘驱动程序的任务是提供从扫描代码到char / fuction的正确转换表( - >键盘驱动程序)。

因此,您可能需要在微观中使用2个或更多个转换表,并想办法如何命令您的micro选择正确的转换表。

further reading