所以我今天的问题与连接插入 Linux 机器的 USB 鼠标有关。但是,我不希望鼠标对 X 环境产生任何传统影响——我只是希望能够通过原始输入利用嵌入其中的编码器。所以这是我的问题。
如何在 linux 中的 c++ 中从备用鼠标设备获取低级别但有意义的数据?具体来说,我想知道相对位置或至少沿 x 轴和 y 轴的编码器计数。
最佳答案
我为显示为 HID 键盘的 USB 条形码阅读器做了类似的事情。
在最近的内核中,/dev/input/event*
中会有鼠标的事件设备。 .如果您打开它并使用 EVIOCGRAB ioctl() 获取它,它不会将鼠标事件发送到任何其他应用程序。然后您可以直接通过鼠标读取事件 - 请参阅 Documentation/input/input.txt
中的 evdev 接口(interface)文档。在 Linux 源代码发行版中。
当你从事件设备读取时,你会得到一个整数的输入事件,形式如下:
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
( struct input_event
和后面的宏都定义在 linux/input.h
中)。
您感兴趣的事件将有 input_event.type == EV_REL
(相对运动事件),input_event.code
成员将类似于 REL_X
(表示 X 轴 - 请参阅 linux/input.h
文件以获取完整列表)和 input_event.value
将是位移。
正如另一个答案所暗示的那样,您无需自己实现 HID 协议(protocol)。
关于c++ - 使用鼠标进行非鼠标输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276760/