Получите дельты мыши, используя Python! (в Linux) - PullRequest
13 голосов
/ 31 января 2011

Я знаю, что Linux выдает 9-битные данные комплимента 2 из / dev / input / mice.Я также знаю, что вы можете получить эти данные через / dev / hidraw0, где hidraw - это ваше USB-устройство, выдающее необработанные данные из HID.Я знаю, что отправленные данные - это дельта движения (смещения), а не позиция.Кстати, я также могу просматривать данные о тарабарщине через "cat / dev / input / mice".Мой вопрос:

Подскажите, пожалуйста, используя язык Python, как я могу прочитать эти данные?Я действительно получаю эти данные как простые целые числа.Но это оказалось сложно.Настоящая проблема - чтение чертовых данных.Есть ли способ читать биты и делать битовую арифметику?(В настоящее время я не беспокоюсь о проблемах, связанных с пользователем root. Пожалуйста, предположите, что скрипт запущен в root.)

(Моя основная ссылка была http://www.computer -engineering.org / ps2mouse / )

Ответы [ 3 ]

14 голосов
/ 05 сентября 2012

Я работаю на базовом устройстве и не имею доступа к 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();
5 голосов
/ 01 февраля 2011

Данные из системы ввода выводятся в виде структур, а не простых целых чисел. Устройство мышей устарело, я считаю. Предпочтительным методом являются интерфейсы устройства событий, где также могут быть получены события ввода мыши (и других). Я написал некоторый код, который делает это, модуль Event.py Вы можете использовать это или начать оттуда.

2 голосов
/ 31 января 2011

Да, Python может читать файл в двоичном виде. Просто используйте флаг 'b' при открытии файла, например, open('dev/input/mice', 'rb').

Python также поддерживает все типичные побитовые арифметические операции: сдвиги, инверсии, побитовые и, или, xor, и нет, и т. Д.

Возможно, вам лучше будет использовать библиотеку для обработки этих данных, а не делать это самостоятельно.

...