USB-Gerät simulieren

Hallo,

ich möchte ein (beliebiges) USB-Gerät als Software simulieren. Also ich möchte ein Programm (in C++) schreiben, das beim Starten Windows ein USB-Gerät erkennen lässt(, das in Wirklichkeit gar nicht da ist).

Zuerst einmal soll egal sein was das für ein Gerät ist. (einfach ein „leeres Gerät“, wenn’s sowas gibt) Windows soll nur erkennen: „Aha, da wurde gerade ein USB-Gerät X angeschlossen.“

Als nächstes möchte ich ein Programm schreiben, das dieses Gerät dann erkennt. Ich starte also das Programm, und wenn ich die Software-Simulation des USB-Gerätes starte soll das Programm sehen: „Aha, da ist ja das Gerät X, auf das ich warte.“

Dann möchte ich die Simulation des USB-Geräts um eine Grafische Oberfläche erweitern (die kann von mir aus auch schon vorher da sein), bei der ich durch Maus-Klicke Ereignisse an dem Gerät auslösen kann umd es etwas „tun zu lassen“.

Und dann möchte ich das Programm, das das simulierte Gerät erkennt, so erweitern, dass es mit dem Gerät kommunizieren kann.

Allerdings stecke ich schon beim Ansatz fest, da ich mich nicht mit Hardware-naher Programmierung auskenne und absolut nicht weiß wie man ein UBS-Gerät simulieren kann.

Ich würde mich wirklich sehr freuen wenn mir hier jemand helfen könnte. Vielleicht gibt’s ja ein Tutorial oder Beispiele…?

Viele Grüßle
David :smile:

Hallo,

so ganz einfach ist es nicht.

Es gibt ja kein universelles „USB-Gerät“. USB ist ein serieller Bus, an dem sich USB-Geräte anmelden können. Und zwar beim Host-Controller.

"ntern adressiert der USB-Controller die angeschlossenen Geräte mit einer sieben Bit langen Kennung, wodurch sich die 127 maximal anschließbaren Geräte ergeben. Die Adresse 0 wird automatisch von Geräten belegt, die ein Reset-Signal erhalten. Wenn an einem oder mehreren Ports neue Geräte detektiert werden, so schaltet der Host-Controller einen dieser Ports ein, sendet dem dort angeschlossenen Gerät einen Reset und versucht dann, das Gerät zu identifizieren. Danach teilt er ihm eine eindeutige Adresse mit. Da immer nur ein Port mit noch nicht konfiguriertem Gerät aktiviert wird, kommt es zu keinen Adresskollisionen.

Der Host-Controller fragt meist zuerst nach einem Device-Deskriptor, der unter anderem die Hersteller- und Produkt-ID enthält. Mit weiteren Deskriptoren teilt das Gerät mit, welche alternativen Konfigurationen es besitzt, in die es von seinem Gerätetreiber geschaltet werden kann. Bei einer Webcam könnten diese Alternativen etwa darin bestehen, ob die Kamera eingeschaltet ist oder ob nur das Mikrofon läuft."

Quelle: http://de.wikipedia.org/wiki/Universal_Serial_Bus

Es gibt zwar DLLs und virtuelle Schnittstellen, ist aber alles nicht ganz ohne.

Die Frage ist, warum? Vielleicht magst Du mal kurz das Ziel des Ganzen erklären …

mfg

tf