python linux device

python - formato de/dev/input/event*?



linux device (5)

¿Cuál es el "formato" de los dispositivos de caracteres ubicados en /dev/input/event* ? En otras palabras, ¿cómo puedo decodificar la secuencia de caracteres? Un ejemplo de pitón sería muy apreciado.

He estado buscando en Google como loco sin ningún resultado ... por favor ayuda.


El formato se describe en el archivo Documentation/input/input.txt en la fuente de Linux. Básicamente, lee las estructuras del siguiente formulario del archivo:

struct input_event { struct timeval time; unsigned short type; unsigned short code; unsigned int value; };

type y code son valores definidos en linux/input.h . Por ejemplo, escriba podría ser EV_REL para el momento relativo de un mouse, o EV_KEY para EV_KEY una tecla, y el code es el código code , o REL_X o ABS_X para un mouse.


El paquete python-evdev proporciona enlaces a la interfaz del dispositivo de eventos. Un breve ejemplo de uso sería:

from evdev import InputDevice from select import select dev = InputDevice(''/dev/input/event1'') while True: r,w,x = select([dev], [], []) for event in dev.read(): print(event) # event at 1337427573.061822, code 01, type 02, val 01 # event at 1337427573.061846, code 00, type 00, val 00

Tenga en cuenta que, a diferencia de los módulos puramente pitónicos muy convenientes mencionados hasta ahora, evdev contiene extensiones C. Para construirlos, es necesario tener instalado el desarrollo de python y los encabezados del kernel.



Un lector simple y crudo se puede hacer usando:

#!/usr/bin/python import struct import time import sys infile_path = "/dev/input/event" + (sys.argv[1] if len(sys.argv) > 1 else "0") #long int, long int, unsigned short, unsigned short, unsigned int FORMAT = ''llHHI'' EVENT_SIZE = struct.calcsize(FORMAT) #open file in binary mode in_file = open(infile_path, "rb") event = in_file.read(EVENT_SIZE) while event: (tv_sec, tv_usec, type, code, value) = struct.unpack(FORMAT, event) if type != 0 or code != 0 or value != 0: print("Event type %u, code %u, value %u at %d.%d" % / (type, code, value, tv_sec, tv_usec)) else: # Events with code, type and value == 0 are "separator" events print("===========================================") event = in_file.read(EVENT_SIZE) in_file.close()


aquí mismo en el módulo Input.py También necesitarás el módulo event.py .