Pi Zero as HID: Comment contrôler la souris PC de Pi Zero via USB?

10

Je pose cette question parce que je n'ai rien trouvé de clair sur ce sujet après avoir cherché pendant des jours. Donc, je suis désolé si la question existe déjà.

Je travaille dans un projet, juste pour le plaisir, où je veux contrôler la souris PC à partir du Raspberry Pi. L'entrée utilisateur serait effectuée par tout type de matériel connecté au RP, mon principal doute est de savoir comment contrôler pour envoyer les instructions de mouvement au PC depuis le RP via USB.

Je sais que je dois activer le mode OTG pour que le PC le reconnaisse comme un périphérique USB, mais je n'ai aucune idée de la façon d'envoyer les mouvements de la souris au PC via l'USB et de le faire comprendre à Windows / Linux. J'ai trouvé que "Linux-USB Gadget API Framework" existe, mais il n'y a pas d'exemple sur son utilisation, et je ne sais pas vraiment si c'est la meilleure approche.

Pourriez-vous s'il vous plaît me donner quelques indices ou ressources pour m'aider?

Merci beaucoup.

Desproposito
la source
Voici un endroit pour commencer, je pense: kernel.org/doc/Documentation/usb/gadget_hid.txt Il y a un hid_gadget_testprogramme mentionné ici, je n'ai pas de pi à portée de main mais vous pouvez vérifier apt-file search hid_gadget_test(et d' apt install apt-fileabord si nécessaire).
goldilocks
@goldilocks Non, votre lien semble assez précis, c'est certainement le côté droit de la clôture. De l'autre côté, les pilotes HID réguliers en direct aimentusbkbd.ko
Dmitry Grigoryev
@goldilocks nah, sous Linux, "gadget" signifie toujours courir en tant qu'esclave, pas hôte.
hobbs
@hobbs Vous avez raison - je l'ai deviné parce que je ne me souvenais pas de quelle extrémité g_etherest utilisée lors de l'attachement du zéro en tant que gadget Ethernet (mais c'est le côté esclave, le pilote côté hôte est le plus générique usbnet).
goldilocks

Réponses:

6

Essayez d'utiliser le g_hidmodule mentionné par @goldilocks:

  1. Ajoutez une ligne dtoverlay=dwc2à votre config.txtet redémarrez
  2. Insérez le pilote du pilote avec modprobe g_hid
  3. Courez hid_gadget_test /dev/hidg0 keyboard. Vous devrez peut-être d'abord créer le programme à l'aide de l'exemple de code fourni ici .

Un autre moyen plus flexible pour réaliser ce que vous voulez (sans écrire de pilotes personnalisés) consiste à utiliser des gadgets . Je connais au moins un projet qui a transformé un petit ordinateur ARM en clavier / souris / manette de jeu USB / Bluetooth en utilisant cette approche.

Malheureusement, l'état des gadgets sur Rapsberry Pi est incertain. Ce fil suggère que cela ne fonctionne pas, mais on ne sait pas exactement ce que l'auteur a essayé de faire exactement. Je suggère néanmoins de l'essayer:

  1. Ajoutez une ligne dtoverlay=dwc2à votre config.txtet redémarrez
  2. Insérez le pilote du gadget FS avec modprobe gadgetfs
  3. Montez le système de fichiers de l'espace utilisateur avec mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Si vous n'obtenez aucune erreur à ce stade, vous pourrez utiliser des bibliothèques de gadgets comme celle-ci pour programmer vos périphériques USB personnalisés.

Dmitry Grigoryev
la source
1
Merci beaucoup pour votre réponse! J'essaierai dans les deux sens et je vous le ferai savoir dès que possible.
Desproposito
1
@Desproposito Avez-vous déjà fait fonctionner cela? J'aimerais une mise à jour
Sirens
@Sirens, je suis désolé, je n'ai pas pu le faire fonctionner :( Mais j'essaierai une autre approche dès que j'aurai le temps d'essayer d'autres moyens.
Desproposito
@Desproposito Pouvez-vous nous dire exactement ce que vous ne pouviez pas faire? Avez-vous pu voir modprobeles pilotes? Pourriez-vous monter gadgetfs? Pourriez-vous construire et exécuter hid_gadget_test?
Dmitry Grigoryev