c++ - 使用鼠标进行非鼠标输入

标签 c++ linux mouse usb

所以我今天的问题与连接插入 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/

相关文章:

python - 在 django 中覆盖 ErrorList 类时出现奇怪的 UTF-8 问题

c - 如何将 64 位整数转换为 char 数组并返回?

linux - 在 linux (xorg) 下获取鼠标增量

c++ - lnk1104 : cannot open 'LIBC.lib' LINK

c++ - SSE指令中的UnsignedSaturate是什么意思?

linux - 为什么在 Docker 容器中以 root 身份运行应用程序是不安全的?

c++ - 获取当前鼠标坐标

java - java中如何统计鼠标右键的点击次数?

c++ - 按函数名参数化模板 c++11

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?