16

我知道 Linux 从 /dev/input/mice 中发出 9 位 2 的补码数据。我也知道您可以通过 /dev/hidraw0 获取该数据,其中 hidraw 是您的 USB 设备,它从 HID 发出原始数据。我知道发送的数据是运动(位移)的增量而不是位置。我还可以通过“cat /dev/input/mice”查看乱码数据。我的问题是:

您能告诉我使用 Python 语言如何读取这些数据吗?我真的更愿意以简单整数的形式获取这些数据。但事实证明这很难。真正的问题是读取该死的数据。有没有办法读取位并进行位算术?(目前我不担心与 root 用户相关的问题。请假设脚本在 root 中运行。)

(我的主要参考资料是http://www.computer-engineering.org/ps2mouse/

4

4 回答 4

18

我使用的是基本设备,无法访问 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();
于 2012-09-05T17:27:10.127 回答
6

来自输入系统的数据以结构形式出现,而不是简单的整数。我相信,鼠标设备已被弃用。首选方法是事件设备接口,也可以在其中获取鼠标(和其他)输入事件。我写了一些代码来做这个,Event.py 模块你可以使用它,或者从那里开始。

于 2011-01-31T23:33:48.447 回答
2

是的,Python 可以读取二进制形式的文件。'b'打开文件时只需使用标志,例如open('dev/input/mice', 'rb').

Python 还支持所有典型的按位算术运算:移位、反转、按位与、或、异或、非等。

不过,使用库来处理这些数据可能会更好,而不是自己处理。

于 2011-01-31T20:46:28.807 回答
0

您需要以 root 身份打开编辑器,以绕过在尝试运行此脚本时可能遇到的与权限相关的错误消息。该/dev/input/mice设备仅对 root 可用。

于 2021-02-17T18:00:26.680 回答