我知道Linux从/dev/input/mice中给出了一个9位的补码数据。我还知道您可以通过 /dev/hidraw0 获取该数据,其中 hidraw 是您的 USB 设备,从 HID 发出原始数据。
我知道发送的数据是运动的增量(位移)而不是位置。顺便说一句,我还可以通过“cat /dev/input/mice”查看乱码数据。
使用Python语言,如何读取这些数据?我真的更愿意以简单整数的形式获取这些数据。但事实证明这很难。真正的问题是读取该死的数据。有没有办法读取位并进行位算术? (目前我不担心与 root 用户相关的问题。请假设脚本以 root 身份运行。)
我使用的是基本设备,无法访问 X 或...,因此 event.py 不起作用。
所以这是我更简单的解码代码部分,用于解释“已弃用的”'/dev/input/mice':
import struct
file = open( "/dev/input/mice", "rb" );
def getMouseEvent():
buf = file.read(3);
button = ord( buf[0] );
bLeft = button & 0x1;
bMiddle = ( button & 0x4 ) > 0;
bRight = ( button & 0x2 ) > 0;
x,y = struct.unpack( "bb", buf[1:] );
print ("L:%d, M: %d, R: %d, x: %d, y: %d\n" % (bLeft,bMiddle,bRight, x, y) );
# return stuffs
while( 1 ):
getMouseEvent();
file.close();
来自输入系统的数据以结构形式出现,而不是简单的整数。我相信鼠标设备已被弃用。首选方法是事件设备接口,其中也可以获得鼠标(和其他)输入事件。我编写了一些执行此操作的代码,即 Event.py 模块 您可以使用它,或者从那里开始。
是的,Python 可以读取二进制形式的文件。打开文件时只需使用
'b'
标志,例如open('dev/input/mice', 'rb')
。
Python 还支持所有典型的按位算术运算:移位、反转、按位与、或、异或、非等。
不过,使用库来处理这些数据可能会比你自己处理更好。
您需要以 root 身份打开编辑器,以绕过尝试运行此脚本时可能遇到的 与权限相关的错误消息。
/dev/input/mice
设备仅适用于root。