Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Il descrittore di associazione dell'interfaccia USB (IAD) consente al dispositivo di raggruppare le interfacce che appartengono a una funzione. Questo articolo descrive come un driver client può determinare se il dispositivo contiene un IAD per una funzione.
La specifica del bus seriale universale, revisione 2.0, non supporta il raggruppamento di più interfacce di un dispositivo composito all'interno di una singola funzione. Tuttavia, il gruppo di lavoro del dispositivo USB (DWG) ha creato classi di dispositivi USB che consentono funzioni con più interfacce. Il forum dell'implementatore USB ha emesso una notifica di modifica tecnica (ECN) che definisce un meccanismo per le interfacce di raggruppamento.
L'ECN specifica un descrittore USB, denominato descrittore di associazione dell'interfaccia (IAD), che consente ai produttori hardware di definire raggruppamenti di interfacce. Le classi di dispositivi che sono più propense a usare gli IAD includono:
- Specifica della classe video USB (codice di classe - 0x0E)
- Specifica della classe audio USB (codice di classe - 0x01)
- Specifica della classe Bluetooth USB (codice di classe - 0xE0)
Come usare gli IAD
Nelle sottosezioni seguenti vengono descritte le informazioni sull'uso degli IADs.
Dispositivi compositi che avvisano Windows degli ID nel firmware
I produttori di dispositivi compositi assegnano in genere un valore pari a zero ai campi della classe del dispositivo (bDeviceClass), della sottoclasse (bDeviceSubClass) e del protocollo (bDeviceProtocol) nel descrittore del dispositivo, come specificato dalla specifica del bus di serie universale. Il produttore può associare ogni singola interfaccia a una classe e un protocollo di dispositivo diversi.
Il team principale USB-IF ha progettato uno speciale insieme di codici di classe e di protocollo che informa il sistema operativo che uno o più IAD sono presenti nel firmware del dispositivo. Un descrittore di dispositivo deve avere i valori visualizzati nella tabella seguente oppure il sistema operativo non rileva correttamente gli ID del dispositivo o raggruppa correttamente le interfacce del dispositivo.
| Campo descrittore del dispositivo | Valore obbligatorio |
|---|---|
| bDeviceClass | 0xEF |
| bDeviceSubClass | 0x02 |
| bDeviceProtocol | 0x01 |
I valori di codice avvisano le versioni di Windows che non supportano IADs di installare un driver bus speciale per enumerare correttamente il dispositivo. Senza questi codici nel descrittore del dispositivo, il sistema potrebbe non riuscire ad enumerare il dispositivo o il dispositivo potrebbe non funzionare correttamente.
Un dispositivo può avere più di un IAD. Ogni IAD deve trovarsi immediatamente prima delle interfacce nel gruppo di interfacce descritto dall'IAD.
I campi della classe funzione (bFunctionClass), della sottoclasse (bFunctionSubclassClass) e del protocollo (bFunctionProtocol) dell'IAD devono contenere i valori specificati dalla classe del dispositivo USB che descrive le interfacce nella funzione.
I campi della classe e della sottoclasse dell'IAD non devono corrispondere ai campi della classe e della sottoclasse delle interfacce nella raccolta di interfacce descritta dall'IAD. Microsoft consiglia che la prima interfaccia della raccolta includa campi di classe e sottoclasse che corrispondono ai campi della classe e della sottoclasse dell'IAD. La tabella seguente indica quali campi devono corrispondere.
| Campo IAD | Campo dell'interfaccia corrispondente |
|---|---|
| bFunctionClass | bInterfaceClass |
| bFunctionSubclassClass | bInterfaceSubClass |
Il campo bFirstInterface dell'IAD indica il numero della prima interfaccia nella funzione. Il campo bInterfaceCount dell'IAD indica il numero di interfacce presenti nella raccolta di interfacce. Le interfacce in una raccolta di interfacce IAD devono essere contigue (non possono esistere lacune nell'elenco dei numeri di interfaccia) e pertanto un conteggio con un primo numero di interfaccia è sufficiente per specificare tutte le interfacce nella raccolta.
Accesso al contenuto di un IAD
I driver client non possono accedere direttamente ai descrittori IAD. La notifica delle modifiche di progettazione IAD (ECN) specifica che gli IAD devono essere inclusi nelle informazioni di configurazione che i dispositivi restituiscono quando ricevono una richiesta dal software host per il descrittore di configurazione (GetDescriptor configuration). Il software host non può recuperare gli IAD direttamente con una richiesta GetDescriptor.
Tuttavia, i driver client possono eseguire query sul driver padre di un dispositivo USB per gli identificatori hardware (ID) del dispositivo e gli ID hardware del dispositivo contengono informazioni incorporate sui campi dell'IAD.
Esempio di descrittore di associazione dell'interfaccia USB
Questa sezione illustra un layout descrittore per un dispositivo USB composito. Il dispositivo di esempio ha due funzioni:
Funzione della lezione video
Un descrittore di associazione di interfaccia (IAD) definisce questa funzione. La funzione contiene due interfacce: interfaccia zero (0) e interfaccia 1 (1).
Il sistema genera identificatori (ID) hardware e compatibili per la funzione, come descritto in Supporto per la classe di dispositivi di comunicazione mobile wireless. Dopo che il sistema operativo identifica il file INF appropriato, il sistema carica lo stack dei driver della classe video.
Funzione Dispositivo di Input Umano (HID)
Questa funzione contiene solo l'interfaccia 2 (2).
Il sistema genera ID hardware e compatibili per la funzione, come descritto in Enumerazione delle raccolte di interfacce su dispositivi compositi USB. Dopo che il sistema operativo trova il file INF appropriato, il sistema carica il driver della classe HID (Human Input Device).
Il descrittore è il seguente:
Descrittore del dispositivo
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
Descrittore di configurazione
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)
Descrittore di associazione dell'interfaccia
BYTE bLength 0x08
BYTE bDescriptorType 0x0B
BYTE bFirstInterface 0x00
BYTE bInterfaceCount 0x02
BYTE bFunctionClass 0x0E
BYTE bFunctionSubClass 0x03
BYTE bFunctionProtocol 0x00
BYTE iFunction 0x04
Descrittore dell'interfaccia del controllo video
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
Descrittore specifico della classe di controllo video
. . . .
. . . .
. . . .
Descrittore dell'endpoint di controllo video
. . . .
. . . .
. . . .
Descrittore dell'interfaccia di streaming video
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
Descrittore specifico della classe di streaming video
. . . .
. . . .
. . . .
Descrittore dell'endpoint di streaming video
. . . .
. . . .
. . . .
Descrittore di interfaccia HID (Human Input Devices)
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
Descrittore specifico della classe HID
. . . .
. . . .
. . . .
Descrittore di endpoint HID
. . . .
. . . .
. . . .