因此,我今天遇到的问题与插入Linux机器的USB鼠标接口有关。但是,我不希望鼠标在X环境上产生任何传统效果 - 我只是希望能够通过原始输入利用嵌入其中的编码器。所以这是我的问题。使用鼠标进行非鼠标输入
如何从linux中的C++中的备用鼠标设备获取低级别但有意义的数据?具体来说,我想知道沿x轴和y轴的相对位置或至少编码器计数。
因此,我今天遇到的问题与插入Linux机器的USB鼠标接口有关。但是,我不希望鼠标在X环境上产生任何传统效果 - 我只是希望能够通过原始输入利用嵌入其中的编码器。所以这是我的问题。使用鼠标进行非鼠标输入
如何从linux中的C++中的备用鼠标设备获取低级别但有意义的数据?具体来说,我想知道沿x轴和y轴的相对位置或至少编码器计数。
我做了一个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轴 - 看到linux/input.h
文件的完整列表),并input_event.value
将是排量。
正如另一个答案所示,没有必要自己实施HID协议。
您不希望“对X环境有任何传统效果”,但您确实需要x和y轴? X坐标系中的坐标只有意义/可用性吗? – 2009-08-14 20:11:31
我不知道?他们呢?如果原始数据不在相对的x-y差异中,它是如何编码的? – duckworthd 2009-08-15 02:27:34