Pi Zero als HID: Wie steuere ich die PC-Maus von Pi Zero über USB?

10

Ich frage dies, weil ich nach tagelanger Suche nichts Klares zu diesem Thema gefunden habe. Es tut mir leid, wenn die Frage bereits besteht.

Ich arbeite in einem Projekt, nur zum Spaß, wo ich die PC-Maus vom Raspberry Pi aus steuern möchte. Die Benutzereingabe würde von jeder Art von Hardware erfolgen, die an das RP angeschlossen ist. Mein Hauptzweifel ist, wie gesteuert werden kann, um die Bewegungsanweisungen vom RP über USB an den PC zu senden.

Ich weiß, dass ich den OTG-Modus aktivieren muss, damit der PC ihn als USB-Gerät erkennt, aber ich habe keine Ahnung, wie ich die Mausbewegungen über USB an den PC senden und Windows / Linux verstehen lassen soll. Ich habe festgestellt, dass das "Linux-USB-Gadget-API-Framework" existiert, aber es gibt kein Beispiel für die Verwendung, und ich weiß nicht, ob es der beste Ansatz ist.

Könnten Sie mir bitte einige Hinweise oder Ressourcen geben, um mir zu helfen?

Vielen Dank.

Desproposito
quelle
Ich denke, hier ist ein Ausgangspunkt: kernel.org/doc/Documentation/usb/gadget_hid.txt Dort wird ein hid_gadget_testProgramm erwähnt. Ich habe kein Pi zur Hand, aber Sie können es überprüfen apt-file search hid_gadget_test(und apt install apt-filezuerst, falls erforderlich).
Goldlöckchen
@goldilocks Nein, dein Link sieht ziemlich genau aus, es ist definitiv die rechte Seite des Zauns. Auf der anderen Seite leben reguläre HID-Fahrer wieusbkbd.ko
Dmitry Grigoryev
@goldilocks nah, unter Linux bedeutet "Gadget" immer, als Slave ausgeführt zu werden, nicht als Host.
Hobbs
@hobbs Du hast Recht - ich habe es als zweites erraten, weil ich mich nicht erinnern konnte, welches Ende g_etherverwendet wurde, wenn die Null als Ethernet-Gadget angebunden wurde (aber es ist die Slave-Seite, der Host-Seite-Treiber ist der allgemeinere usbnet).
Goldlöckchen

Antworten:

6

Versuchen Sie es mit dem g_hidvon @goldilocks erwähnten Modul:

  1. Fügen Sie eine Zeile dtoverlay=dwc2zu Ihrem hinzu config.txtund starten Sie neu
  2. Fügen Sie den Treiber Treiber mit ein modprobe g_hid
  3. Ausführen hid_gadget_test /dev/hidg0 keyboard. Sie können das Programm zuerst bauen müssen, den Beispielcode versehen hier .

Eine andere, flexiblere Möglichkeit, dies zu erreichen (ohne benutzerdefinierte Treiber zu schreiben), ist die Verwendung von Gadgetfs . Ich kenne mindestens ein Projekt, das einen kleinen ARM-Computer mit diesem Ansatz in USB / Bluetooth-Tastatur / Maus / Gamepad verwandelt hat.

Leider ist der Status von Gadgetfs auf Rapsberry Pi ungewiss. Dieser Thread schlägt vor, dass es nicht funktioniert, aber es ist unklar, was der Autor genau versucht hat. Ich würde trotzdem vorschlagen, es zu versuchen:

  1. Fügen Sie eine Zeile dtoverlay=dwc2zu Ihrem hinzu config.txtund starten Sie neu
  2. Fügen Sie den Gadget-FS-Treiber mit ein modprobe gadgetfs
  3. Hängen Sie das Userspace-Dateisystem mit ein mkdir /dev/gadget; mount -t gadgetfs none /dev/gadget/

Wenn Sie zu diesem Zeitpunkt keine Fehler erhalten, können Sie Gadgetfs-Bibliotheken wie diese verwenden , um Ihre benutzerdefinierten USB-Geräte zu programmieren.

Dmitry Grigoryev
quelle
1
Ich danke Ihnen sehr für Ihre Antwort! Ich werde beide Möglichkeiten ausprobieren und Sie so schnell wie möglich informieren.
Desproposito
1
@ Desproposito Hast du das jemals zum Laufen gebracht? Ich würde ein Update lieben
Sirenen
@ Sirens, es tut mir leid, kaufen, ich konnte es nicht zum Laufen bringen :( Aber ich werde einen anderen Ansatz versuchen, sobald ich Zeit habe, einen anderen Weg zu versuchen.
Desproposito
@Desproposito Kannst du sagen, was genau du nicht zum Arbeiten bringen konntest? Konnten Sie zu modprobeden Fahrern? Könnten Sie montieren gadgetfs? Könnten Sie bauen und laufen hid_gadget_test?
Dmitry Grigoryev