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