2009-08-14 15 views
3

Also die Frage, die ich heute habe, hat mit der Schnittstelle mit einer USB-Maus zu tun, die an eine Linux-Maschine angeschlossen ist. Ich möchte jedoch nicht, dass die Maus einen traditionellen Effekt auf die X-Umgebung hat - ich möchte nur die Encoder, die darin eingebettet sind, durch rohe Eingabe verwenden können. Also hier ist meine Frage.Verwenden Sie eine Maus für Nicht-Maus-Eingabe

Wie kann ich Low-Level-Daten von anderen Mausgeräten in C++ in Linux erhalten? Insbesondere würde ich gerne die relative Position oder zumindest Encoder-Zählungen entlang der x- und y-Achse wissen.

+0

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? –

+0

Ich weiß es nicht? Tun sie? Wenn die Rohdaten nicht im relativen x-y-Vergleich vorliegen, wie wird es codiert? – duckworthd

Antwort

4

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.

+0

Funktioniert das für mehrere USB-Mäuse, die unabhängig voneinander verfolgt werden müssen? – Gerharddc

+0

@Gerhman: Ja, jede Maus wird ihr eigenes '/ dev/input/event *' Gerät haben. – caf

Verwandte Themen