Partager via


Descripteur d’association d’interface USB

Le descripteur d’association d’interface USB (IAD) permet au périphérique de regrouper les interfaces appartenant à une fonction. Cet article décrit comment un pilote client peut déterminer si l’appareil contient un IAD pour une fonction.

La spécification Universal Serial Bus, révision 2.0, ne prend pas en charge le regroupement de plusieurs interfaces d’un appareil composite au sein d’une seule fonction. Toutefois, le groupe de travail de périphérique USB (DWG) a créé des classes d’appareils USB qui permettent des fonctions avec plusieurs interfaces. Le Forum de l’implémenteur USB a émis une notification de modification d’ingénierie (ECN) qui définit un mécanisme de regroupement d’interfaces.

L’ECN spécifie un descripteur USB, appelé descripteur d’association d’interface (IAD), qui permet aux fabricants de matériel de définir des regroupements d’interfaces. Les classes d’appareil qui sont les plus susceptibles d’utiliser des IAD sont les suivantes :

  • Spécification de classe vidéo USB (code de classe - 0x0E)
  • Spécification de classe audio USB (code de classe - 0x01)
  • Spécification de classe Bluetooth USB (code de classe - 0xE0)

Comment utiliser des IAD

Les sous-sections suivantes décrivent des informations sur l’utilisation des IAD.

Appareils composites alertant Windows des IAD dans le microprogramme

Les fabricants d’appareils composites attribuent généralement une valeur zéro à la classe d’appareil (bDeviceClass), aux sous-classes (bDeviceSubClass) et aux champs de protocole (bDeviceProtocol) dans le descripteur d’appareil, comme spécifié par la spécification de bus série universel. Le fabricant peut associer chaque interface individuelle à une classe et un protocole d’appareil différents.

L’équipe principale USB-IF a conçu un jeu de code de classe et de protocole spécial qui informe le système d’exploitation qu’un ou plusieurs IAD sont présents dans le microprogramme de l’appareil. Un descripteur d’appareil doit avoir les valeurs qui apparaissent dans le tableau suivant ou le système d’exploitation ne détecte pas correctement les IAD de l’appareil ou regroupe les interfaces de l’appareil.

Champ de descripteur d’appareil Valeur requise
bDeviceClass 0xEF
bDeviceSubClass 0x02
bDeviceProtocol 0x01

Les valeurs de code alertent les versions de Windows qui ne prennent pas en charge les IAD pour installer un pilote de bus à usage spécial qui énumère correctement l’appareil. Sans ces codes dans le descripteur de l’appareil, le système risque de ne pas énumérer l’appareil, ou l’appareil peut ne pas fonctionner correctement.

Un appareil peut avoir plusieurs IAD. Chaque IAD doit se trouver immédiatement avant les interfaces du groupe d’interfaces décrits par l’IAD.

La classe de fonction (bFunctionClass), la sous-classe (bFunctionSubclassClass) et les champs de protocole (bFunctionProtocol) de l’IAD doivent contenir les valeurs spécifiées par la classe de périphérique USB qui décrit les interfaces dans la fonction.

Les champs de classe et de sous-classe de l’IAD ne sont pas requis pour faire correspondre les champs de classe et de sous-classe des interfaces de la collection d’interfaces décrites par l’IAD. Microsoft recommande que la première interface de la collection possède des champs de classe et de sous-classe qui correspondent aux champs de classe et de sous-classe de l’IAD. Le tableau suivant indique quels champs doivent correspondre.

Champ IAD Champ d’interface correspondant
bFunctionClass bInterfaceClass
bFunctionSubclassClass bInterfaceSubClass

Le champ bFirstInterface de l’IAD indique le nombre de la première interface de la fonction. Le champ bInterfaceCount de l’IAD indique le nombre d’interfaces dans la collection d’interfaces. Les interfaces d’une collection d’interfaces IAD doivent être contiguës (il ne peut y avoir aucune lacune dans la liste des numéros d’interface), et un nombre avec un premier numéro d’interface suffit pour spécifier toutes les interfaces de la collection.

Accès au contenu d’un IAD

Les pilotes clients ne peuvent pas accéder directement aux descripteurs IAD. La notification de modification d’ingénierie (ECN) IAD spécifie que les IAD doivent figurer dans les informations de configuration que les appareils retournent lorsqu’ils reçoivent une requête du logiciel hôte visant le descripteur de configuration (configuration GetDescriptor). Le logiciel hôte ne peut pas récupérer directement des IAD avec une requête GetDescriptor.

Toutefois, les pilotes clients peuvent interroger le pilote parent d’un périphérique USB pour les identificateurs matériels (ID) de l’appareil et les ID matériels de l’appareil contiennent des informations incorporées sur les champs de l’IAD.

Exemple de descripteur d’association d’interface USB

Cette section illustre une disposition de descripteur pour un périphérique USB composite. L’exemple d’appareil a deux fonctions :

Fonction de classe pour la vidéo

Un descripteur d’association d’interface (IAD) définit cette fonction. La fonction contient deux interfaces : l’interface zéro (0) et l’interface 1 (1).

Le système génère des identificateurs matériels et d'identificateurs compatibles (ID) pour la fonction, comme décrit dans Support pour la classe d'appareils de communication mobile sans fil. Une fois que le système d’exploitation correspond au fichier INF approprié, le système charge la pile des pilotes de classe vidéo.

Fonction de dispositif d'entrée humain (HID)

Cette fonction contient uniquement l’interface 2 (2).

Le système génère des ID matériels et compatibles pour la fonction, comme décrit dans Énumération des collections d’interface sur les périphériques composites USB. Une fois que le système d’exploitation correspond au fichier INF approprié, le système charge le pilote de classe HID (Human Input Device).

Le descripteur est le suivant :

Descripteur d’appareil

    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

Descripteur de configuration

    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)

Descripteur d’association d’interface

    BYTE  bLength           0x08
    BYTE  bDescriptorType   0x0B
    BYTE  bFirstInterface   0x00
    BYTE  bInterfaceCount   0x02
    BYTE  bFunctionClass    0x0E
    BYTE  bFunctionSubClass 0x03
    BYTE  bFunctionProtocol 0x00
    BYTE  iFunction         0x04

Descripteur de l’interface de contrôle vidéo

    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

Descripteur spécifique à la classe de contrôle vidéo

    . . . .
    . . . .
    . . . .

Descripteur de point de terminaison de contrôle vidéo

    . . . .
    . . . .
    . . . .

Descripteur de l’interface de streaming vidéo

    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

Descripteur spécifique à la classe de streaming vidéo

    . . . .
    . . . .
    . . . .

Descripteur de point de terminaison de streaming vidéo

    . . . .
    . . . .
    . . . .

Descripteur d’interface HID (dispositifs d'entrée humain)

    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

Descripteur spécifique à la classe HID

    . . . .
    . . . .
    . . . .

Descripteur de point de terminaison HID

    . . . .
    . . . .
    . . . .