Je l'ai fait quelque chose de similaire pour un lecteur de codes à barres USB qui se présente comme un clavier HID.
Dans les noyaux récents, il y aura un périphérique d'événement pour la souris dans /dev/input/event*
. Si vous l'ouvrez et que vous l'attrapez avec l'ioctl EVIOCGRAB(), il n'enverra aucun événement de souris à une autre application. Vous pouvez ensuite lire les événements directement depuis la souris - voir la documentation de l'interface evdev dans Documentation/input/input.txt
dans la distribution de code source Linux.
Lorsque vous lisez l'appareil d'événement, vous aurez un certain nombre d'événements d'entrée, sous la forme suivante:
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
(struct input_event
et les macros suivantes sont toutes définies dans linux/input.h
).
Les événements qui vous intéressent auront input_event.type == EV_REL
(événement de mouvement relatif), le membre input_event.code
sera quelque chose comme REL_X
(indiquant l'axe X - voir le fichier linux/input.h
pour la liste complète), et input_event.value
sera le déplacement .
Il n'est pas nécessaire d'implémenter le protocole HID vous-même, comme le suggère une autre réponse.
Vous ne voulez "aucun effet traditionnel sur l'environnement X", mais vous voulez les axes x et y? Les coordonnées ne possèdent-elles pas uniquement un sens/une disponibilité dans un environnement X? –
Je ne sais pas? Est-ce qu'ils? Si les données brutes ne sont pas en différenciation x-y relative, comment est-ce codé? – duckworthd