使用鼠标进行非鼠标输入

时间:2009-08-14 08:54:06

标签: c++ linux mouse usb

所以我今天的问题与插入linux机器的USB鼠标接口有关。但是,我不希望鼠标对X环境产生任何传统影响 - 我只是希望能够通过原始输入利用嵌入其中的编码器。所以这是我的问题。

如何从linux中的c ++中的备用鼠标设备获取低级但有意义的数据?具体来说,我想知道沿x轴和y轴的相对位置或至少编码器计数。

2 个答案:

答案 0 :(得分:4)

我为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_event以及以下宏都在linux/input.h)中定义。

您感兴趣的事件将有input_event.type == EV_REL(相对移动事件),input_event.code成员将类似于REL_X(表示X轴 - 请参阅{{1完整列表的文件),linux/input.h将是位移。

另一个答案表明,没有必要自己实施HID协议。

答案 1 :(得分:0)