formato de / dev / input / event *?

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

He estado buscando en Google como un loco en vano … por favor ayuda.

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

Un simple y simple lector 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() 

El formato se describe en el archivo Documentation/input/input.txt en la fuente de Linux. Básicamente, lees 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, el tipo podría ser EV_REL para el momento relativo de un mouse, o EV_KEY para una pulsación de tecla, y el code es el código de tecla, 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 muy prácticos, los módulos puramente pythonicos mencionados hasta ahora, evdev contiene extensiones en C. Construirlos requiere tener instalados los encabezados de desarrollo de Python y del núcleo.

Los datos están en forma de estructuras input_event ; vea http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/ para ver un ejemplo. La definición de la estructura se encuentra en (por ejemplo) http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/input.h?v=2.6.11.8 . Tenga en cuenta que necesitará usar un montón de llamadas ioctl para obtener información sobre el dispositivo antes de leerlo.