Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med IAD (USB Interface Association Descriptor) kan enheten gruppera gränssnitt som tillhör en funktion. Den här artikeln beskriver hur en klientdrivrutin kan avgöra om enheten innehåller en IAD för en funktion.
Universal Serial Bus Specification, revision 2.0, stöder inte gruppering av fler än ett gränssnitt för en sammansatt enhet i en enda funktion. USB-enhetens arbetsgrupp (DWG) skapade dock USB-enhetsklasser som tillåter funktioner med flera gränssnitt. USB-implementorns forum utfärdade ett meddelande om teknisk ändring (ECN) som definierar en mekanism för att gruppera gränssnitt.
ECN anger en USB-deskriptor, som kallas gränssnittsassociationskriptor (IAD), som gör det möjligt för maskinvarutillverkare att definiera grupper av gränssnitt. De enhetsklasser som mest sannolikt använder IAD:n är:
- Specifikation för USB-videoklass (klasskod – 0x0E)
- Specifikation för USB-ljudklass (klasskod – 0x01)
- Specifikation för USB Bluetooth-klass (klasskod – 0xE0)
Så här använder du IAD:erna
Följande underavsnitt beskriver information om hur du använder IAD:er.
Sammansatta enheter som varnar Windows om IAD i inbyggd programvara
Tillverkare av sammansatta enheter tilldelar vanligtvis ett värde på noll till enhetsklassfälten (bDeviceClass), underklassen (bDeviceSubClass) och protokollfälten (bDeviceProtocol) i enhetsbeskrivningen, enligt beskrivningen i specifikationen för universell seriebuss. Tillverkaren kan associera varje enskilt gränssnitt med olika enhetsklasser och protokoll.
USB-IF-kärnteamet har utarbetat en särskild koduppsättning för klass och protokoll som meddelar operativsystemet att en eller flera IAD:n finns i enhetens inbyggda programvara. En enhetsbeskrivning måste ha de värden som visas i följande tabell eller så identifierar operativsystemet inte enhetens IAD:n eller grupperar enhetens gränssnitt korrekt.
| Enhetssignaturfältet | Obligatoriskt värde |
|---|---|
| bDeviceClass | 0xEF |
| bDeviceSubClass | 0x02 |
| bDeviceProtocol | 0x01 |
Kodvärdena varnar versioner av Windows som saknar stöd för IAD:er att installera en bussdrivrutin med speciellt ändamål som identifierar enheten korrekt. Utan dessa koder i enhetsbeskrivningen kan systemet misslyckas med att räkna upp enheten, eller så kanske enheten inte fungerar korrekt.
En enhet kan ha mer än en IAD. Varje IAD måste finnas omedelbart före gränssnitten i den gränssnittsgrupp som IAD beskriver.
Fälten funktionsklass (bFunctionClass), underklass (bFunctionSubclassClass) och protokollfält (bFunctionProtocol) i IAD måste innehålla de värden som anges av USB-enhetsklassen som beskriver gränssnitten i funktionen.
Klass- och underklassfälten i IAD krävs inte för att matcha klass- och underklassfälten i gränssnittssamlingen som beskrivs i IAD. Microsoft rekommenderar att det första gränssnittet i samlingen har klass- och underklassfält som matchar klass- och underklassfälten i IAD. Följande tabell anger vilka fält som ska matcha.
| IAD-fält | Motsvarande gränssnittsfält |
|---|---|
| bFunctionClass | bInterfaceClass |
| bFunctionSubclassClass | bInterfaceSubClass |
Fältet bFirstInterface i IAD anger antalet för det första gränssnittet i funktionen. Fältet bInterfaceCount i IAD anger hur många gränssnitt som finns i gränssnittssamlingen. Gränssnitt i en IAD-gränssnittssamling måste vara sammanhängande (det kan inte finnas några luckor i listan över gränssnittsnummer), och därför räcker det med ett antal med ett första gränssnittsnummer för att ange alla gränssnitt i samlingen.
Komma åt innehållet i en IAD
Klientdrivrutiner kan inte komma åt IAD-beskrivningar direkt. ECN (IAD Engineering Change Notification) anger att IAD:er måste ingå i konfigurationsinformationen som enheterna returnerar när de får en begäran från värdprogramvaran för konfigurationsbeskrivningen (GetDescriptor-konfiguration). Värdprogramvara kan inte hämta IAD:er direkt med en GetDescriptor-begäran.
Klientdrivrutiner kan dock fråga en USB-enhets överordnade drivrutin om enhetens maskinvaruidentifierare (ID:n) och enhetens maskinvaru-ID innehåller inbäddad information om fälten i IAD.
Exempel på USB-gränssnittsassociationsbeskrivare
Det här avsnittet visar en beskrivningslayout för en sammansatt USB-enhet. Exempelenheten har två funktioner:
Videoklassfunktion
En IAD (Interface Association Descriptor) definierar den här funktionen. Funktionen innehåller två gränssnitt: gränssnitt noll (0) och gränssnitt ett (1).
Systemet genererar maskinvara och kompatibla identifierare (ID:n) för funktionen, enligt beskrivningen i Stöd för enhetens klass för trådlös mobil kommunikation. När operativsystemet matchar lämplig INF-fil läser systemet in drivrutinsstacken för videoklassen.
Human Input Device-funktion (HID)
Den här funktionen innehåller bara gränssnitt två (2).
Systemet genererar maskinvara och kompatibla ID:er för funktionen enligt beskrivningen i Uppräkning av gränssnittssamlingar på USB-sammansatta enheter. När operativsystemet matchar den lämpliga INF-filen laddar systemet drivrutinen för mänsklig inmatningsenhet (HID-klassen).
Beskrivningen är följande:
Enhetsbeskrivning
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
Konfigurationsbeskrivning
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)
Gränssnittsassociationsbeskrivning
BYTE bLength 0x08
BYTE bDescriptorType 0x0B
BYTE bFirstInterface 0x00
BYTE bInterfaceCount 0x02
BYTE bFunctionClass 0x0E
BYTE bFunctionSubClass 0x03
BYTE bFunctionProtocol 0x00
BYTE iFunction 0x04
Videokontrollgränssnittsbeskrivning
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
Klassspecifik beskrivning av videokontroll
. . . .
. . . .
. . . .
Videokontrollslutpunktsbeskrivning
. . . .
. . . .
. . . .
Videouppspelningsgränssnittsbeskrivning
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
Klassspecifik beskrivning för videouppspelning
. . . .
. . . .
. . . .
Slutpunktsbeskrivning för videouppspelning
. . . .
. . . .
. . . .
Gränssnittsbeskrivning för mänskliga inmatningsenheter (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-klassspecifik beskrivning
. . . .
. . . .
. . . .
HID-slutpunktsbeskrivning
. . . .
. . . .
. . . .