我正在尝试将从/dev/input/event0读取的键盘事件从中定义的值转换为未运行X或终端的嵌入式应用程序中的ASCII等效值。
我认为这应该通过Linux中定义的keymap功能来完成,而不仅仅是创建我自己的std::map<>但我似乎找不到一个好的起点。到目前为止,我发现的大多数例子都假设我使用X窗口或终端运行。
文本输入(除了非常简单的传统美国键盘和7位ASCII标准)是一个非常复杂的字段。我强烈建议您使用X客户端来完成此操作,在那里您可以利用所有现有的输入方法。
但如果你必须这样做,并且你对一种键盘和一种语言感到满意,你可以像终端一样解释事件。请检查/usr/include/linux/input.h
中的定义中的值。跟踪Shift和Ctrl键的位置(非ASCII键,如Alt、Fn等……当然由您来解释),并在键向上事件中发出相应的字节。如果默认设置不适用于您的应用程序,那么您可能也想实现一个自动重复功能。
但基本上:不要。这是一个比你想象的要困难得多的问题。
您可以从/dev/input/event0 读取以下结构
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
有关更多详细信息:https://www.kernel.org/doc/Documentation/input/input.txt