16

Linuxが/dev/ input/miceから9ビット2の補数データを出力することを私は知っています。また、/ dev / hidraw0を介してそのデータを取得できることも知っています。ここで、hidrawは、HIDから生データを提供するUSB​​デバイスです。送信されるデータは、位置ではなく、移動(変位)のデルタであることを私は知っています。byによって、「cat / dev / input/mice」を介してジブリッシュデータを表示することもできます。私の質問は:

Python言語を使用してこのデータを読み取る方法を教えてください。私は実際には、単純な整数のようにそのデータを取得します。しかし、それは難しいことが証明されています。本当の問題は、いまいましいデータを読み取ることです。ビットを読み取ってビット演算を行う方法はありますか?(現在、rootユーザー関連の問題については心配していません。スクリプトがrootで実行されていると想定してください。)

(私の主な参照はhttp://www.computer-engineering.org/ps2mouse/でした)

4

4 に答える 4

18

私は基本的なデバイスを使用していて、Xまたは...にアクセスできないため、event.pyが機能しません。

それで、これが「非推奨」から解釈するための私のより単純なデコードコード部分です'/ dev / input / mouse':

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は、すべての一般的なビット単位の算術演算もサポートしています。シフト、反転、ビット単位のand、or、xor、notなどです。

ただし、自分でデータを処理するのではなく、ライブラリを使用してこのデータを処理する方がよいでしょう。

于 2011-01-31T20:46:28.807 に答える
0

このスクリプトを実行しようとしたときに発生する可能性のあるアクセス許可関連のエラーメッセージをバイパスするには、エディターをルートとして開く必要があります。/dev/input/miceデバイスはルートでのみ使用できます。

于 2021-02-17T18:00:26.680 に答える