如何将Linux密钥代码从/dev/input/event*转换为ASCII



我正在尝试将从/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

最新更新