键盘布局的资源

时间:2014-01-09 13:33:05

标签: c keyboard arduino

我正在编写一个充当键盘的设备,需要在不同平台(Linux,Windows,OSX)上运行几种不同布局(丹麦语,德沃夏克语,英语......)的计算机上工作。

我需要在每个平台上安装每种布局的列表(windows + linux / osx),告诉哪些 修饰符以及哪些扫描码产生哪些字符。

例如,我可以在arduino源代码中看到,他有一张类似于美国电脑键盘的桌子: https://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/HID.cpp 我指的是第285行定义的数组。 我需要为我想要支持的其他类型的键盘获取或创建类似的列表。 这样的清单在哪里?我已经尝试过查看arch linux中包含的布局文件,但它们很难阅读,而且(对我来说)用于生成我需要的列表非常困难。

1 个答案:

答案 0 :(得分:1)

Linux,Windows和MacOS X使用三层系统运行。

下层是硬件返回的 scancode 。此代码由键盘驱动程序读取,通常不适用于应用程序。如何生成这些代码当然取决于硬件;大多数PC都使用与Intel 8042 AT键盘控制器兼容的东西。

中间层是键码(或Windows上的虚拟键)。将此视为扫描码的抽象。在Linux上,您可以使用命令sudo getkeycodes将映射从扫描码转储到密钥代码。这些代码是特定于操作系统的。

上层是由键生成的字符,与一个或多个修饰符组合(例如,扫描码0x1E是键码30,它是字符97(小写字母a),但是字符65(大写A)如果同时按下shift)。此映射取决于当前选定的键盘布局。您可以使用命令sudo dumpkeys --keys-only | grep ^keycode来获取Linux中的映射转储。

如果您制作键盘,则应生成扫描码。您无法知道哪个字符最终会因应用程序而结束(因为键盘布局可以更改)。您可以在此处获取为AT键盘生成的扫描码列表以及美国布局:

http://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html#correspondence