C++ 使用鼠标进行非鼠标输入
因此,我今天的问题是如何与插入linux机器的USB鼠标接口。然而,我不希望鼠标对X环境有任何传统的影响——我只希望能够通过原始输入利用嵌入其中的编码器。这是我的问题 如何从Linux中C++中的备用鼠标设备获得低级但有意义的数据?具体地说,我想知道x轴和y轴上的相对位置或至少编码器计数 您应该使用HID(人机界面设备)协议C++ 使用鼠标进行非鼠标输入,c++,linux,mouse,usb,C++,Linux,Mouse,Usb,因此,我今天的问题是如何与插入linux机器的USB鼠标接口。然而,我不希望鼠标对X环境有任何传统的影响——我只希望能够通过原始输入利用嵌入其中的编码器。这是我的问题 如何从Linux中C++中的备用鼠标设备获得低级但有意义的数据?具体地说,我想知道x轴和y轴上的相对位置或至少编码器计数 您应该使用HID(人机界面设备)协议 我已经为一个USB条形码阅读器做了类似的事情,它显示为一个HID键盘 在最近的内核中,将在/dev/input/event*中为鼠标提供一个事件设备。如果您打开它并使用E
我已经为一个USB条形码阅读器做了类似的事情,它显示为一个HID键盘 在最近的内核中,将在
/dev/input/event*
中为鼠标提供一个事件设备。如果您打开它并使用EVIOCGRAB ioctl()抓取它,它将不会向任何其他应用程序发送鼠标事件。然后,您可以直接用鼠标读取事件-请参阅linux源代码发行版中documentation/input/input.txt
中的evdev接口文档
当您从事件设备读取时,您将获得以下形式的完整数量的输入事件:
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
(struct input\u event
和以下宏都是在linux/input.h
中定义的)
您感兴趣的事件将具有input\u event.type==EV\u REL
(相对运动事件),input\u event.code
成员类似于REL\u X
(指示X轴-有关完整列表,请参阅linux/input.h
文件),而input\u event.value
将是位移
正如另一个答案所建议的那样,没有必要自己实现HID协议。您不希望“对X环境产生任何传统影响”,但您确实想要X轴和y轴?坐标是否仅在X环境中具有意义/可用性?我不知道?是吗?如果原始数据不是相对x-y差分,它是如何编码的?这对需要独立跟踪的多个USB鼠标有效吗?@Gerhman:是的,每个鼠标都有自己的
/dev/input/event*
设备。