【发布时间】:2015-11-10 14:52:39
【问题描述】:
我想从包含如下数据的文本文件中读取按钮映射:
DPAD_LEFT = 105
DPAD_RIGHT = 106
DPAD_UP = 103
DPAD_DOWN = 108
右边部分实际上是 evdev 键码(定义在<linux/input.h>)。
这很难阅读,所以我希望能够拥有这样的文件:
DPAD_LEFT = KEY_LEFT
DPAD_RIGHT = KEY_RIGHT
DPAD_UP = KEY_UP
DPAD_DOWN = KEY_DOWN
但我目前无法将它们转换回来:
char[256] keyname;
some_method_to_read(&keyname, "DPAD_LEFT");
//keyname now contains "KEY_LEFT"
如何获得对应的键码(例如105)?有标准的方法吗?
编辑:我现在能想到的唯一方法是复制源代码中的所有键码并将它们放入数组或映射中,就像evtest utility 一样。但是有很多键码,这对我来说似乎有点矫枉过正。此外,这可能会在某些时候与<input/linux.h> 中定义的键码不同步。
std::map<string, int> keynames;
#define MAP_KEYCODE(keycode) keynames[#keycode] = keycode
MAP_KEYCODE(KEY_LEFT);
MAP_KEYCODE(KEY_RIGHT);
MAP_KEYCODE(KEY_UP);
MAP_KEYCODE(KEY_DOWN);
// [...]
【问题讨论】:
-
不,没有标准方法(据我所知),但您可以从
linux/input.h自己构建名称到键码的映射。 -
是的,我也有这个想法,但这对我来说似乎需要做很多工作。无论如何,如果没有其他办法,我将不得不这样做。谢谢!
-
您可以使用简单的 sed 脚本将 linux/input.h 转换为对 MAP_KEYCODE 的一系列调用。
标签: c linux c-preprocessor evdev