Virtuelles USB-HID-Gerät

8

Ich entwickle eine Anwendung, die mit dem angeschlossenen USB-HID-Gerät kommuniziert. Das Problem ist, dass es noch kein echtes Gerät gibt (es wird gerade von einem anderen Teil unseres Teams entwickelt). Daher hätte ich wirklich gerne eine Möglichkeit, es zu emulieren.

Das ideale Dienstprogramm, das mir einfällt, sollte folgendermaßen aussehen: Ein Kernelmodul, das beim Laden zwei Geräteknoten im System erstellt:

  • ein virtuelles USB-verstecktes Gerät, das wahrscheinlich nicht von einem realen USB-versteckten Geräteknoten zu unterscheiden ist /dev/hidraw0; und natürlich sollte dieses gerät von allen usb-versteckten bibliotheken gesehen werden, die ich zum beispiel verwenden würde hidapi.
  • ein Dienstgeräteknoten, wie /dev/virtual_hid_1.

Wenn also jemand schreibt, /dev/virtual_hid_1sollten diese Daten buchstäblich gelesen /dev/hidraw0werden und umgekehrt.

Auf diese Weise kann ich eine Debug-App in jeder gewünschten Sprache schreiben, sei es pythonoder was auch immer. es sollte nur schreiben und lesen und von und zu /dev/virtual_hid_1. Es wäre sehr praktisch für die Entwicklung.

Gibt es so etwas?

Dmitry Frank
quelle

Antworten:

5
  1. Vielleicht interessieren Sie sich für eine kostengünstige, elegante und offene Hardwarelösung zur Emulation von USB-Geräten in der Entwicklung: die Mikropython-Platine . (Ich habe keine Beziehung zu dieser Hardware).

    Es handelt sich um eine kleine eigenständige Karte, auf der Python 3 ausgeführt wird und die an den USB-Anschluss angeschlossen wird und beispielsweise als Maus-HID oder Tastatur-HID angezeigt werden kann. Sie kopieren einfach Ihre Python-Quelldatei auf das Gerät und es wird ausgeführt. Ein schönes Konzept.

    Ok, es ist nicht wirklich für das gedacht, was Sie wollen, und Sie müssen möglicherweise das sdk herunterladen und ein bisschen in C arbeiten, damit es genau so erscheint, wie Sie es brauchen, aber der Großteil Ihres Codes würde in Python sein. Es gibt ttl Level serielle Ports, i2c, spi etc Ports.

  2. Für eine alternative Lösung gibt es ein Board, das USB-Geräte mit Python emuliert, aber ich bin mir nicht sicher, ob Sie ein fertiges Produkt kaufen können.

  3. Es gibt auch eine USB-Emulation mit USB ohne zusätzliche Hardware, die ich noch nicht angeschaut habe.

meuh
quelle
3

Sie suchen wahrscheinlich nach einem uhidKernelmodul. Siehe Dokumentation in Kernelquellen :

Mit UHID kann ein User-Space-Transport-Treiber Kernel-HID-Geräte für jedes Gerät erstellen, das an den vom User-Space gesteuerten Bus angeschlossen ist. Die UHID-API definiert die E / A-Ereignisse, die vom Kernel an den Benutzerbereich und umgekehrt gesendet werden.

In ./samples/uhid/uhid-example.c gibt es ein Beispiel für eine User-Space-Anwendung

Marmarek
quelle