ich etwas ähnliches für einen USB-Barcode-Leser getan haben, die als eine HID-Tastatur präsentiert.
In den letzten Kernel gibt es ein Ereignisgerät für die Maus in /dev/input/event*
. Wenn Sie das öffnen und mit dem EVIOCGRAB ioctl() greifen, werden Mausereignisse nicht an andere Apps gesendet. Sie können dann Ereignisse direkt von der Maus lesen - siehe die Dokumentation der evdev-Schnittstelle in Documentation/input/input.txt
in der Linux-Quellcode-Distribution.
Wenn Sie von der Veranstaltung Gerät lesen, werden Sie eine ganze Reihe von Eingabeereignissen, in der folgenden Form erhalten:
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
(struct input_event
und die folgenden Makros werden alle definiert in linux/input.h
).
Die Ereignisse, die Sie interessiert sind, in input_event.type == EV_REL
(relatives Bewegungsereignis) haben wird, das input_event.code
Mitglied wird so etwas wie REL_X
(unter Angabe der X-Achse - die linux/input.h
Datei für die vollständige Liste sehen) sein, und input_event.value
wird die Verschiebung sein .
Sie müssen das HID-Protokoll nicht selbst implementieren, wie eine andere Antwort nahelegt.
Sie wollen keine "traditionelle Wirkung auf die X-Umgebung", aber Sie wollen die X- und Y-Achse? Haben Koordinaten nicht nur Bedeutung/Verfügbarkeit in einer X-Umgebung? –
Ich weiß es nicht? Tun sie? Wenn die Rohdaten nicht im relativen x-y-Vergleich vorliegen, wie wird es codiert? – duckworthd