www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB HID: Host fragt nach dem Report Deskriptor


Autor: Potter S. (potter68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nach der Konfiguration meines Geräts fragt der Host nach dem Report 
Deskriptor. Das Status-Byte hat dabei den Wert 0x81 (Device->Host, 
Standard Interface Request). Die Request-Nummer ist 0x06 und der 
Descriptor-Typ 0x22.

Laut Jan Axelsons Buch gibt es keine GetDescriptor-Request, die an das 
Interface gerichtet ist (GetDescriptor geht ausschlieslich an das 
Gerät). Warum bekomm ich dann eine?

Also das Gerät funktioniert, aber verstanden hab ich das nicht so ganz. 
Kann mir den Widerspruch jemand erklären?

Gruß Ralf

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe zwar die entsprechende Stelle des Buches gerade nicht greifbar, 
aber ich vermute mal, dass Axelson von Standard-Deskriptoren spricht. 
Und damit hat er recht, denn diese Anfragen gehen tatsächlich 
ausschließlich an das Device. Schau Dir mal in der Spezifikation den 
Punkt 9.4.3 an. Hier siehst Du sogar, welche Deskriptoren von diesem 
Request unterstützt werden. Dass die Anfragen nur an das Device gehen, 
ist durchaus sinnvoll, denn die Deskriptoren in Frage sind für das ganze 
Device einmalig und eindeutig; schließlich wird das Device beschrieben.

Zusätzlich zur eigentlichen Spezifikation gibt es Device Class 
Definitions. In Deinem Fall geht es um die HID Spezifikation. Diese 
erweitert nun den Standard-Request um die Möglichkeit, 
klassen-spezifische Deskriptoren abzufragen. Dass es sich um einen 
Class-Descriptor handelt, siehst Du an den Bits 5..6 des 
Descriptor-Types (1 == class). In diesem speziellen Fall muß sich die 
Anfrage an ein Interface richten, da es mehrere Interfaces mit 
klassen-spezifischen Deskriptoren geben kann. Du kannst beispielweise 
Geräte entwickeln, die mit zwei HID Interfaces daherkommen. Das ergibt 
zwei Report-deskriptoren, die Du voneinander unterscheiden können mußt.

Das Verhalten eines HIDs beim GetDescriptor-Request ist in der HID 
Spezifikation unter 7.1.1 zu finden.

Wenn man also die Device Class Definitions als Erweiterung ansieht, ist 
es auch gar nicht mehr so widersprüchlich. Wenn es so wäre, dürfte es 
streng genommen nicht eine Anfrage an einen Deskriptor des Typs 0x22 
geben.

USB:
http://www.usb.org/developers/docs/usb_20_040907.zip

HID:
http://www.usb.org/developers/devclass_docs/HID1_11.pdf

Autor: Potter S. (potter68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo René,

zunächst muß ich etwas korrigieren: Es handelt sich nicht um das 
Status-Byte mit dem Wert 0x81, sondern um bmRequestType. Die Bits 5-6 
sind Null (Standard) und Bits 0-4 sind 1 (Interface). Die Richtung 
(Bit7) ist Device -> Host.

Ich hab mir nun das Kapitel 7.1.1 angesehn und da steht ja gleich ganz 
oben, daß die 0x81 einen HID-Klassen-Descriptor anfordert (auch wenn die 
Bits5-6 ( = 0) eine Standard-Anforderung sugerieren).

Danke für Deinen Hinweis.

Gruß Ralf

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Bits 5-6 sind Null (Standard) und Bits 0-4 sind 1 (Interface). Die
> Richtung (Bit7) ist Device -> Host.

Die Bits 5..6 sind Standard, da es sich im Wesentlichen um einen 
Standard-Request handelt. Dieser wird nun aber zur Abfrage von 
nicht-standard Deskriptoren verwendet (die USB Spezifikation sieht 
Report-Deskriptoren nicht vor). Wenn Du Dir jetzt den Descriptor-Type 
anschaust (0x22), siehst Du Bits 5..6 == 1 == Class, und das meinte ich 
eigentlich auch.

Du findest das in der HID Spezifikation unter 7.1 schön aufgeschlüsselt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.