将原始鼠标/指针数据转换为有意义的东西?

时间:2011-12-30 02:10:10

标签: c++ c linux

我正在使用hexdump -C来显示来自linux盒子上的指针设备的实时数据。它返回的信息是每行16字节的十六进制。像这样:

000001b0  a9 1c fd 4e f1 2c 0f 00  01 00 3e 00 01 00 00 00  |...N.,....>.....|
000001c0  a9 1c fd 4e 0e 2d 0f 00  01 00 3e 00 00 00 00 00  |...N.-....>.....|
000001d0  a9 1c fd 4e 16 2d 0f 00  00 00 00 00 00 00 00 00  |...N.-..........|
000001e0  aa 1c fd 4e b1 9a 05 00  01 00 3d 00 01 00 00 00  |...N......=.....|
000001f0  aa 1c fd 4e ce 9a 05 00  01 00 3d 00 00 00 00 00  |...N......=.....|
00000200  aa 1c fd 4e d5 9a 05 00  00 00 00 00 00 00 00 00  |...N............|

我的问题是,我如何知道如何将此字符串转换为鼠标指针的坐标数据?

3 个答案:

答案 0 :(得分:1)

大多数USB输入设备符合USB HID规范。 Xorg evdev(4)驱动程序应该能够使用几乎任何指针设备。

如果您正在编写自己的驱动程序,libusb可能是一个很好的起点。

答案 1 :(得分:0)

你需要找到x和y坐标的周期和大小(以字节为单位)

你可以编写一个程序来计算写入坐标的频率(移动设备时)。然后你必须校准...移动指针,看到坐标发生变化......这是全球性的,我会怎么做。

答案 2 :(得分:0)

可能是试验和错误?你知道你的屏幕的分辨率,这可能会有所帮助。 您可以尝试将鼠标指针放在左上角(0,0)并记录您获得的数据。如果你试图进一步滚过屏幕(或重复数据),它肯定不会改变。然后将其移至右下角并记录您在那里获得的数据。再次,如果您尝试滚动屏幕​​,您希望值不会改变。然后你可以查看数据,调整endianess直到值看起来正确,并弄清楚是否有任何缩放。

也许