Périphérique HID USB virtuel

9

Je développe une application qui communiquera avec le périphérique HID USB connecté. Le problème est qu'il n'y a pas encore de véritable appareil (il est en cours de développement par une autre partie de notre équipe), donc j'aimerais vraiment avoir un moyen de l'imiter.

L'utilitaire idéal auquel je peux penser devrait ressembler à ceci: un module de noyau, qui, une fois chargé, crée deux nœuds de périphérique dans le système:

  • un périphérique USB caché virtuel, qui ne peut être distingué de n'importe quel nœud de périphérique USB réel caché, probablement /dev/hidraw0; et bien sûr, ce périphérique devrait être vu par toutes les bibliothèques usb-hid que j'utiliserais, par exemple hidapi.
  • un nœud de périphérique de service, comme /dev/virtual_hid_1.

Ainsi, lorsque quelqu'un écrit /dev/virtual_hid_1, ces données doivent être lues littéralement /dev/hidraw0, et vice versa.

De cette façon, je peux écrire une application de débogage dans la langue que je veux, que ce pythonsoit ou peu importe; il doit simplement écrire et lire vers et depuis /dev/virtual_hid_1. Ce serait très pratique pour le développement.

Y a-t-il quelque chose comme ça?

Dmitry Frank
la source

Réponses:

5
  1. Vous pourriez être intéressé par une solution matérielle peu coûteuse, élégante et ouverte pour émuler des périphériques USB en cours de développement: la carte micropython . (Je n'ai aucune affiliation avec ce matériel).

    Il s'agit d'une petite carte autonome qui exécute python 3 et se branche sur l'USB où elle peut apparaître comme, par exemple, un HID de souris ou un HID de clavier. Vous venez de copier votre fichier source python sur l'appareil et il l'exécute. Un beau concept.

    Ok, il n'est pas vraiment destiné à ce que vous voulez, et vous devrez peut-être télécharger le sdk et faire un peu de travail en C pour qu'il apparaisse exactement comme vous en avez besoin, mais la majeure partie de votre code serait en python. Il existe des ports série de niveau ttl, des ports i2c, spi, etc.

  2. Pour une solution alternative, il existe une carte qui émule des périphériques USB avec python, mais je ne sais pas si vous pouvez acheter un produit fini.

  3. Il existe également une émulation usb utilisant usbip sans matériel supplémentaire, que je n'ai pas encore examinée.

meuh
la source
5

Vous recherchez probablement un uhidmodule noyau. Voir la documentation dans les sources du noyau :

Avec l'UHID, un pilote de transport de l'espace utilisateur peut créer des périphériques cachés du noyau pour chaque périphérique connecté au bus contrôlé par l'espace utilisateur. L'API UHID définit les événements d'E / S fournis depuis le noyau vers l'espace utilisateur et vice versa.

Il existe un exemple d'application d'espace utilisateur dans ./samples/uhid/uhid-example.c

Marmarek
la source