最近在使用 pyusb 进行 鼠标原始数据的读取,使用的是树莓派linux环境,将踩过的“坑”记录下来:
-
一般需要使用 sudo 运行程序,否则linux系统会报“权限不够”;
-
对于同时支持无线鼠标、键盘的无线接收器设备,一定要找对接口。一般会有3个接口,但只有一个接口可以被正常读取;
-
无线接收器返回的数据,不像网上说的什么,鼠标返回 4字节,键盘返回8字节,罗技的 unifying 无线接收器,能正常读取数据那接口,最多返回32字节,一般返回15字节数据;
-
关于返回的数据,经逆向破解,基本为:
字节0 32(十进制,以下皆用10进制表示),为鼠标或键盘数据
字节1 鼠标数据为2,键盘数据为1
字节2 和字节1相同
字节3 鼠标数据中,为按键信息,bit0-2依次为:左键、右键、中键,按下为1
字节4 我测试时总是为0,可能为某种ID值
字节5-7 鼠标数据中,存X\Y方向上移动数据,比较复杂,等下说
字节8 鼠标数据中,滚轮数据,补码表示滚动值和方向
其它字节 总是为0,不关心了对于字节5-7 的意义:
字节6的低4位bits + 字节5,构成12bits的X移动数据,补码表示
字节7 +字节6的高4bits,构成12bits的Y移动数据,补码表示
似乎是高4bits为符号位,但可以统一这样解码:
如果最高bit0, 其值直接为正向移动值;
如果最高bit1,则12bits数据按位取反,然后+1,得到移动值,但表示为负向移动值; -
有线鼠标的数据,和网上常见的数据格式一样,返回4字节,自行去网上找吧;
-
如果 pyusb 总是读不出值来,尤其是在window环境,大概率是没有安装好libusb,注:win下一般使用的是 hidusb 类型驱动,不是libusb,但我更换成libusb后,虽能读取到数据了,但鼠标不动了。当然,基于window的虚拟机linux环境中,应该先保证win下能正常读取鼠标数据,否则还是读不到的;