Keyboard 从USB HID键盘发送语言布局

Keyboard 从USB HID键盘发送语言布局,keyboard,usb,avr,hid,Keyboard,Usb,Avr,Hid,我目前正在使用Atmel微控制器开发USB HID键盘。一切正常,但我通常在不同的机器上使用不同的键盘布局。现在我开始怀疑是否有可能告诉主机要使用哪种键盘布局,即EN-US,以便在每台机器上都能将键盘代码映射到正确的字符上。有什么想法吗?USB键盘通常没有“键盘布局”的概念。所有键盘上相同位置的按键将发送相同的接通/断开代码,无论布局如何(EN、DE等)。主机中的键盘驱动程序的任务是提供从扫描代码到字符/功能的正确转换表(->键盘驱动程序) 因此,您可能需要在micro中设置两个或多个翻译表,并

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

USB键盘通常没有“键盘布局”的概念。所有键盘上相同位置的按键将发送相同的接通/断开代码,无论布局如何(EN、DE等)。主机中的键盘驱动程序的任务是提供从扫描代码到字符/功能的正确转换表(->键盘驱动程序)

因此,您可能需要在micro中设置两个或多个翻译表,并考虑如何命令micro选择正确的翻译表


USB键盘通常没有“键盘布局”的概念。所有键盘上相同位置的按键将发送相同的接通/断开代码,无论布局如何(EN、DE等)。主机中的键盘驱动程序的任务是提供从扫描代码到字符/功能的正确转换表(->键盘驱动程序)

因此,您可能需要在micro中设置两个或多个翻译表,并考虑如何命令micro选择正确的翻译表


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

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

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


不幸的是,这一点没有明确规定(同一语言的键盘变体之间没有区别,等等),因此硬件制造商很少使用这个字段,他们几乎总是使用
0x00
,即
不受支持。因为硬件从未使用过这么多,所以操作系统支持从未得到开发。

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

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

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


不幸的是,这一点没有明确规定(同一语言的键盘变体之间没有区别,等等),因此硬件制造商很少使用这个字段,他们几乎总是使用
0x00
,即
不受支持。因为硬件从未使用过这么多,所以操作系统支持从未开发过。

一个可以编码2/4/8布局的硬件开关(例如使用2-3端口的dip开关),或者一个特殊的组合键(Windows使用{Left ALT}+{Shift}),您的软件对硬件开关(例如使用2-3端口的dip开关)进行解释和反应其中可以对2/4/8布局进行编码,或者使用特殊的组合键(Windows使用{Left ALT}+{Shift}您的软件对其进行解释并作出反应…一个例外是带有Sun/Oracle键盘的Solaris,该键盘具有dip开关,可将其布局告知驱动程序。请参阅一个例外是带有Sun/Oracle键盘的Solaris,该键盘具有dip开关,可将其布局告知驱动程序。请参阅