Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit dem USB-Schnittstellenzuordnungsdeskriptor (IAD) kann das Gerät Schnittstellen gruppieren, die zu einer Funktion gehören. In diesem Artikel wird beschrieben, wie ein Clienttreiber bestimmen kann, ob das Gerät ein IAD für eine Funktion enthält.
Die Universal Serial Bus Specification, Revision 2.0, unterstützt die Gruppierung mehrerer Schnittstellen eines zusammengesetzten Geräts innerhalb einer einzelnen Funktion nicht. Die Arbeitsgruppe für USB-Geräte (DWG) hat jedoch USB-Geräteklassen erstellt, die Funktionen mit mehreren Schnittstellen ermöglichen. Das Forum des USB-Implementors hat eine Änderungsbenachrichtigung (Engineering Change Notification, ECN) herausgegeben, die einen Mechanismus für die Gruppierung von Schnittstellen definiert.
Das ECN gibt einen USB-Deskriptor an, der als Schnittstellenzuordnungsdeskriptor (IAD) bezeichnet wird, mit dem Hardwarehersteller Gruppierungen von Schnittstellen definieren können. Zu den Geräteklassen, die höchstwahrscheinlich IADs verwenden, gehören:
- USB-Videoklassenspezifikation (Klassencode - 0x0E)
- SPEZIFIKATION der USB-Audioklasse (Klassencode – 0x01)
- USB-Bluetooth-Klassenspezifikation (Klassencode - 0xE0)
Wie man IADs verwendet
In den folgenden Unterabschnitten werden Informationen zur Verwendung von IADs beschrieben.
Kombinierte Geräte, die Windows über IADs in der Firmware benachrichtigen
Hersteller zusammengesetzter Geräte weisen in der Regel dem Geräteklassenfeld (bDeviceClass), dem Unterklassenfeld (bDeviceSubClass) und dem Protokollfeld (bDeviceProtocol) im Gerätedeskriptor den Wert Null zu, wie in der Universal Serial Bus Specification angegeben. Der Hersteller kann jede einzelne Schnittstelle einer anderen Geräteklasse und einem anderen Protokoll zuordnen.
Das USB-IF Kernteam hat einen speziellen Klassen- und Protokollcodesatz entwickelt, der das Betriebssystem benachrichtigt, dass eine oder mehrere IADs in der Gerätefirmware vorhanden sind. Ein Gerätedeskriptor muss über die Werte verfügen, die in der folgenden Tabelle angezeigt werden, oder das Betriebssystem erkennt die Geräte-IADs nicht oder gruppiert die Geräteschnittstellen ordnungsgemäß.
| Gerätedeskriptorfeld | Erforderlicher Wert |
|---|---|
| bDeviceClass | 0xEF |
| bDeviceSubClass | 0x02 |
| bDeviceProtocol | 0x01 |
Die Codewerte benachrichtigen Versionen von Windows, die keine IADs unterstützen, um einen speziellen Bustreiber zu installieren, der das Gerät ordnungsgemäß aufzählt. Ohne diese Codes im Gerätedeskriptor kann das System das Gerät nicht aufzählen, oder das Gerät funktioniert möglicherweise nicht ordnungsgemäß.
Ein Gerät kann über mehrere IAD verfügen. Jedes IAD muss sich unmittelbar vor den Schnittstellen in der Schnittstellengruppe befinden, die von der IAD beschrieben werden.
Die Funktionsklasse (bFunctionClass), Unterklassen (bFunctionSubclassClass) und die Protokolle (bFunctionProtocol) des IAD müssen die werte enthalten, die von der USB-Geräteklasse angegeben werden, die die Schnittstellen in der Funktion beschreibt.
Die Klassen- und Unterklassenfelder der IAD müssen nicht mit den Klassen- und Unterklassenfeldern der Schnittstellen in der Schnittstellensammlung übereinstimmen, die von der IAD beschrieben werden. Microsoft empfiehlt, dass die erste Schnittstelle der Auflistung Klassen- und Unterklassenfelder enthält, die den Klassen- und Unterklassenfeldern der IAD entsprechen. In der folgenden Tabelle ist angegeben, welche Felder übereinstimmen sollen.
| IAD-Feld | Entsprechendes Schnittstellenfeld |
|---|---|
| bFunctionClass | bInterfaceClass |
| bFunctionSubclassClass | bInterfaceSubClass |
Das Feld "bFirstInterface " der IAD gibt die Nummer der ersten Schnittstelle in der Funktion an. Das Feld "bInterfaceCount " des IAD gibt an, wie viele Schnittstellen in der Schnittstellensammlung enthalten sind. Schnittstellen in einer IAD-Schnittstellensammlung müssen zusammenhängend sein (es kann keine Lücken in der Liste der Schnittstellennummern geben), sodass eine Anzahl mit einer ersten Schnittstellennummer ausreicht, um alle Schnittstellen in der Auflistung anzugeben.
Zugreifen auf den Inhalt eines IAD
Clienttreiber können nicht direkt auf IAD-Deskriptoren zugreifen. Die IAD Engineering Change Notification (ECN) gibt an, dass IADs in die Konfigurationsinformationen einbezogen werden müssen, die Geräte zurückgeben, wenn sie eine Anforderung von der Hostsoftware für die Konfigurationsbeschreibung (GetDescriptor-Konfiguration) erhalten. Hostsoftware kann IADs nicht direkt mit einer GetDescriptor-Anforderung abrufen.
Clienttreiber können jedoch den übergeordneten Treiber eines USB-Geräts nach den Hardware-IDs (IDs) des Geräts abfragen, und die Hardware-IDs des Geräts enthalten eingebettete Informationen zu den Feldern des IAD.
Beispiel für usb-Schnittstellenzuordnungsdeskriptor
In diesem Abschnitt wird ein Deskriptorlayout für ein zusammengesetztes USB-Gerät veranschaulicht. Das Beispielgerät verfügt über zwei Funktionen:
Videoklassenfunktion
Ein Schnittstellenzuordnungsdeskriptor (IAD) definiert diese Funktion. Die Funktion enthält zwei Schnittstellen: Schnittstelle Null (0) und Schnittstelle 1 (1).
Das System generiert Hardware- und kompatible IDs (IDs) für die Funktion, wie unter "Support for the Wireless Mobile Communication Device Class" beschrieben. Nachdem das Betriebssystem mit der entsprechenden INF-Datei übereinstimmt, lädt das System den Videoklassentreiberstapel.
HiD-Funktion (Human Input Device)
Diese Funktion enthält nur Schnittstelle 2 (2).
Das System generiert Hardware- und kompatible IDs für die Funktion, wie in Enumeration of Interface Collections on USB Composite Devices beschrieben. Nachdem das Betriebssystem mit der entsprechenden INF-Datei übereinstimmt, lädt das System den HID-Klassentreiber (Human Input Device).
Der Deskriptor lautet wie folgt:
Gerätedeskriptor
BYTE bLength 0x12
BYTE bDescriptorType 0x01
WORD bcdUSB 0x0200
BYTE bDeviceClass 0xEF
BYTE bDeviceSubClass 0x02
BYTE bDeviceProtocol 0x01
BYTE bMaxPacketSize0 0x40
WORD idVendor 0x045E
WORD idProduct 0xFFFF
WORD bcdDevice 0x0100
BYTE iManufacturer 0x01
WORD iProduct 0x02
WORD iSerialNumber 0x02
BYTE bNumConfigurations 0x01
Konfigurationsdeskriptor
BYTE bLength 0x09
BYTE bDescriptorType 0x02
WORD wTotalLength 0x...
BYTE bNumInterfaces 0x03
BYTE bConfigurationValue 0x01
BYTE iConfiguration 0x01
BYTE bmAttributes 0x80 // (BUS Powered)
BYTE bMaxPower 0x19 // (50 mA)
Schnittstellenzuordnungsdeskriptor
BYTE bLength 0x08
BYTE bDescriptorType 0x0B
BYTE bFirstInterface 0x00
BYTE bInterfaceCount 0x02
BYTE bFunctionClass 0x0E
BYTE bFunctionSubClass 0x03
BYTE bFunctionProtocol 0x00
BYTE iFunction 0x04
Deskriptor der Videosteuerungsschnittstelle
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x00
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x05
Videosteuerelement-klassenspezifischer Deskriptor
. . . .
. . . .
. . . .
Videosteuerungsendpunktdeskriptor
. . . .
. . . .
. . . .
Videostreamingschnittstellendeskriptor
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x01
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x0E
BYTE bInterfaceSubClass 0x02
BYTE bInterfaceProtocol 0x00
BYTE iInterface 0x06
Videostreamingklassenspezifischer Deskriptor
. . . .
. . . .
. . . .
Deskriptor des Videostreamingendpunkts
. . . .
. . . .
. . . .
HiD-Schnittstellendeskriptor (Human Input Devices, HiD)
BYTE bLength 0x09
BYTE bDescriptorType 0x04
BYTE bInterfaceNumber 0x02
BYTE bAlternateSetting 0x00
BYTE bNumEndpoints 0x01
BYTE bInterfaceClass 0x03
BYTE bInterfaceSubClass 0x01
BYTE bInterfaceProtocol 0x01
BYTE iInterface 0x07
HID-klassenspezifischer Deskriptor
. . . .
. . . .
. . . .
HID-Endpunktdeskriptor
. . . .
. . . .
. . . .