USB HID: Host fragt nach dem Report Deskriptor

OP #554688
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
#554861
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
OP #554980
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
#555008
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.