Forum: Mikrocontroller und Digitale Elektronik PIC-USB Keyboard emulieren ?


von Andeas9999 (Gast)


Lesenswert?

Auf der Sprut-Seite war ich schon (und auf vielen anderen). Habe mir 2 
Tage lang, zumindestens ansatzweise, die Grundlagen versucht anzueignen. 
Ist ja ziemlich kompliziert.

Das Keyboard als HID anzumelden bietet sich an, ich frage mich jedoch, 
woran Windows erkennt, dass es sich bei dem Device/Interface um ein 
HID-Keyboard handelt, damit der Windows eigene Standardtreiber 
automatisch eingebunden wird.
Bin dann auf die Idee gekommen, dass das der Treiberhersteller der 
USBHID.dll (Microsoft) wissen muß. Also bin ich auf die Suche gegangen 
und auf die Vendor ID von Microsoft gestossen: 0x045e für allgemeine 
Keyboards ist die Product ID: 0xfff8.

Ich bin mir aber nicht sicher, ob das reicht, bzw., ob das überhaupt in 
den Device-Deskriptor gehört. Ich würde meinen, dass es in den Interface 
Deskriptor gehört, da man ja viele Interfaces in einem Device haben 
kann. Also, z.B. Tastatur und Maus etc.. Also müsste doch eigentlich für 
jedes Interface ein anderer Treiber installiert werden. So habe ich das 
bisher verstanden.

Wie teilt man Windows mit, welchen Treiber es automatisch einbinden 
soll?

Danke

von Thomas F. (Gast)


Lesenswert?

Andeas9999 schrieb:
> Ich würde meinen, dass es in den Interface
> Deskriptor gehört, da man ja viele Interfaces in einem Device haben
> kann.

Genau, im Interface-Descriptor wird festgelegt, dass es sich um ein 
HID-Keyboard handelt. Mit der Vendor ID bzw. Product ID hat das nicht 
direkt was zu tun.

Welcher Treiber verwendet wird, entscheidet das Betriebssystem anhand 
der Deskriptoren; um das muss man sich bei HID-Geräte nicht kümmern.

Beim PIC18 bin ich übrigens mit JALv2 und der jallib recht schnell zu 
einem Ergebnis gekommen (RC5-Empfänger als HID-Keyboard: 
http://www.fundf.net/usbnub/#rc5hid). Ansonsten gibt es auch von 
Microchip C-Beispielcode.

von Guido Körber (Gast)


Lesenswert?

Die VID/PID hat mit der Zuordnung als HID genau nichts zu tun. HID sind 
generell Composite Devices, definieren also im Device Descriptor Class 
und Protocol als 0, die Zuordnung geschieht auf Interface Ebene.

Wem das zu kompliziert ist, der kann sich auch einen fertigen 
Tastatur-Chip holen:

http://www.codemercs.com/index.php?id=38&L=0

von Ralf (Gast)


Lesenswert?

Hallo,

>HID sind generell Composite Devices
das stimmt nicht. Composite Devices sind USB Geräte, die mehrere 
Funktionen in einem Gerät integrieren (z.B. Maus und virtuellen 
COM-Port). HID kann natürlich auch nur ein Gerät - z.B. Maus - sein.

Aber - fertige Tastaturchips gibt es auch als Composite-Gerät. Z.B mit 
Maus, 2 Datenschnittstellen und Tastatur:

http://www.rahand.eu/index.php?option=com_virtuemart&Itemid=5

Gruß Ralf

von Guido Körber (Gast)


Lesenswert?

>>HID sind generell Composite Devices
>das stimmt nicht. Composite Devices sind USB Geräte, die mehrere
>Funktionen in einem Gerät integrieren

Composite Devices sind solche die ihre Class nicht auf Device Level 
definieren und dadurch mehrere verschiedene Funktionen in einem Gerät 
vereinen können. Ob dann nur ein Interface oder mehrere vorhanden sind 
ist unerheblich.

von Andeas9999 (Gast)


Lesenswert?

Ist ja interessant, dass es sowas schon fertig zu kaufen gibt, aber ich 
wollte das schon mit C18 programmieren. Einerseits weil man dann 
flexibel alles machen kann was man möchte, andererseits wegen dem Preis, 
und ausserdem komme ich mir irgendwie etwas dümmlich vor USB nicht 
selbst programmieren zu können. Beispielprogramme gibt es ja genügend 
von Microchip.

In dem Microchip USB-Framework für USB gibt es ein Tool zum Erstellen 
der Deskriptoren. Da kann man auch HID auswählen. Allerdings ist das 
etwas unflexibel, denn ich bräuchte letztlich 2 Interfaces, weil ich 
eine Tastatur einbauen möchte und eine Datenübermittlungsschnittstelle 
vom Host zum PIC. Am Anfang, zum Üben, reicht mir auch erstmal die 
Tastatur. Wie man die Deskriptoren erstellt ist mir ziemlich klar. Es 
gibt auch ein Tastatur-Beispielprogramm von Microchip, allerdings für 
einen anderen Chip.

Ich verwende einen PIC 18F14K50 (wollte ich jedenfalls). Ist es ratsam 
sich ein spezielles Hardware-Entwicklungstool für USB zuzulegen, wenn 
ja, welches ?

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.