将原始鼠标/指针数据转换为有意义的内容
Translating raw mouse/pointer data to something meaningful?
我正在使用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............|
我的问题是,我怎么知道如何翻译这个字符串从鼠标指针的坐标数据?
大多数USB输入设备符合USB HID规范。Xorg evdev(4)
驱动程序应该能够使用几乎任何指向设备。
如果您正在编写自己的驱动程序,libusb可能是一个好的起点。
你需要找出x和y坐标的周期性和大小(以字节为单位)
你可以写一个程序来计算坐标写入的频率(在移动设备的时候)。然后你必须校准……移动指针,看看坐标的变化……这是我在全球范围内会做的事情。
试错?你知道你的屏幕分辨率,所以这可能会有帮助。您可以尝试将鼠标指针放在左上角(0,0)并记录您获得的数据。如果您尝试进一步滚动屏幕(或数据重复),希望它不会改变。然后把它移到右下角,记录你在那里得到的数据。同样,您希望当您尝试滚动屏幕时这些值不会改变。然后,您可以查看数据,摆弄端序,直到值看起来正确,并找出是否有任何缩放。
也许相关文章:
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 从头开始为应用程序创建 docker 映像是否有意义?
- 在c++中,如果首先禁止默认构造,那么禁止复制构造有意义吗
- sizeof(函数)有意义吗?
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 在 C++17 中使用 const std::string& 参数有意义吗?
- 基础类模板参数的有意义名称
- 内联这个函数,确实有意义
- 将 final 关键字添加到没有基类(未派生)的类中的虚函数是否有意义
- 左移负整数为零是否有意义?
- 是否有一个上下文表达式`a.b :: c`有意义
- 是否有一些有意义的统计数据来证明保持有符号整数算术溢出未定义是合理的
- 将可选与reference_wrapper相结合是否有意义?
- 具有多个非可选参数的转换构造函数是什么样子的?为什么它有意义
- 使用静态强制转换时,强制转换为类类型或对象引用是否更有意义
- 将原始鼠标/指针数据转换为有意义的内容
- 有一个转换构造函数有什么意义?
- 是否有任何库可以确定数值是否可以转换为特定字符集中的有效、可打印且有意义的字符