Descripteurs USB standard
Un périphérique USB fournit des informations sur lui-même dans des structures de données appelées descripteurs USB. Cette section fournit des informations sur les descripteurs d’appareil, de configuration, d’interface et de point de terminaison et les moyens de les récupérer à partir d’un périphérique USB.
Descripteurs USB mappés à la disposition des appareils
Le logiciel hôte obtient des descripteurs à partir d’un appareil attaché en envoyant diverses demandes de contrôle standard au point de terminaison par défaut (Obtenir des demandes de descripteur, voir la section spécification USB 9.4.3). Ces demandes spécifient le type de descripteur à récupérer. En réponse à ces demandes, l’appareil envoie des descripteurs qui incluent des informations sur l’appareil, ses configurations, ses interfaces et les points de terminaison associés. Les descripteurs d’appareil contiennent des informations sur l’ensemble de l’appareil. Les descripteurs de configuration contiennent des informations sur chaque configuration d’appareil. Les descripteurs de chaîne contiennent des chaînes de texte Unicode.
Chaque périphérique USB expose un descripteur d’appareil qui indique les informations de classe de l’appareil, les identificateurs de fournisseur et de produit, ainsi que le nombre de configurations. Chaque configuration expose son descripteur de configuration qui indique le nombre d’interfaces et les caractéristiques de puissance. Chaque interface expose un descripteur d’interface pour chacun de ses autres paramètres qui contient des informations sur la classe et le nombre de points de terminaison. Chaque point de terminaison au sein de chaque interface expose des descripteurs de point de terminaison qui indiquent le type de point de terminaison et la taille maximale du paquet.
Par exemple, considérons la disposition des périphériques de carte OSR FX2 (voir Disposition des périphériques USB). Au niveau de l’appareil, l’appareil expose un descripteur d’appareil et un descripteur de point de terminaison pour le point de terminaison par défaut. Au niveau de la configuration, l’appareil expose un descripteur de configuration pour Configuration 0. Au niveau de l’interface, il expose un descripteur d’interface pour un autre paramètre 0. Au niveau du point de terminaison, il expose trois descripteurs de point de terminaison.
Descripteur de périphérique USB
Chaque périphérique USB (Universal Serial Bus) doit être en mesure de fournir un descripteur d’appareil unique qui contient des informations pertinentes sur l’appareil. Windows utilise ces informations pour dériver différents ensembles d’informations. Par exemple, les champs idVendor et idProduct spécifient respectivement les identificateurs de fournisseur et de produit. Windows utilise ces valeurs de champ pour construire un ID matériel pour l’appareil. Pour afficher l’ID matériel d’un appareil particulier, ouvrez Gestionnaire de périphériques et affichez les propriétés de l’appareil. Sous l’onglet Détails , la valeur de la propriété Id de matériel indique l’ID matériel (« USB\XXX ») généré par Windows. Le champ bcdUSB indique la version de la spécification USB à laquelle l’appareil est conforme. Par exemple, 0x0200 indique que l’appareil est conçu conformément à la spécification USB 2.0. La valeur bcdDevice indique le numéro de révision défini par l’appareil. La pile de pilotes USB utilise bcdDevice, ainsi que idVendor et idProduct, pour générer du matériel et des ID compatibles pour l’appareil. Vous pouvez afficher ces identificateurs dans Gestionnaire de périphériques. Le descripteur d’appareil indique également le nombre total de configurations que l’appareil prend en charge.
L’hôte obtient le descripteur d’appareil par le biais d’un transfert de contrôle. Microsoft fournit des interfaces de programmation pour obtenir le descripteur.
Si vous écrivez un... | Appeler... |
---|---|
Application UWP qui utilise Windows.Devices.Usb | UsbDevice.DeviceDescriptor |
Application de bureau Win32 qui utilise des fonctions WinUSB | WinUsb_GetDescriptor |
Pilote client basé sur UMDF | IWDFUsbTargetDevice ::RetrieveDescriptor |
Pilote client basé sur KMDF | WdfUsbTargetDeviceGetDeviceDescriptor |
Pilote client wdm | UsbBuildGetDescriptorRequest _URB_CONTROL_DESCRIPTOR_REQUEST |
Descripteur de configuration USB
Une configuration USB contient une série d’interfaces. Chaque interface se compose d’un ou de plusieurs paramètres alternatifs, et chaque autre paramètre est constitué d’un ensemble de points de terminaison (voir Disposition des périphériques USB). Un descripteur de configuration décrit l’ensemble de la configuration, y compris ses interfaces, ses autres paramètres et leurs points de terminaison. Chacune de ces entités est également décrite dans son format de descripteur. Un descripteur de configuration peut également inclure des descripteurs personnalisés définis par le fabricant de l’appareil.
Par conséquent, seule la partie initiale d’un descripteur de configuration est fixe, 9 octets. Le reste est variable en fonction du nombre d’interfaces et de leurs paramètres alternatifs, ainsi que des points de terminaison pris en charge par l’appareil. Dans cet ensemble de documentation, les 9 octets initiaux sont appelés descripteur de configuration. Les deux premiers octets du descripteur indiquent la longueur totale.
Le tableau suivant présente le descripteur de configuration pour le périphérique de webcam USB :
Champ | Valeur |
---|---|
wTotalLength | 0x02CA |
bNumInterfaces | 0x02 |
bConfigurationValue | 0x01 |
iConfiguration | 0x00 |
bmAttributes | 0x80 (alimenté par bus ) |
MaxPower | 0xFA (500 mA) |
Le champ bConfigurationValue indique le numéro de la configuration définie dans le microprogramme de l’appareil. Une configuration USB indique également certaines caractéristiques d’alimentation. Le bmAttributes contient un masque de bits qui indique si la configuration prend en charge la fonctionnalité de mise en éveil à distance, et si l’appareil est alimenté par le bus ou auto-alimenté. Le champ MaxPower spécifie la puissance maximale (en milliampères) que l’appareil peut tirer de l’hôte, lorsque l’appareil est alimenté par le bus. Le descripteur de configuration indique également le nombre total d’interfaces (bNumInterfaces) prises en charge par l’appareil.
Si vous écrivez un... | Appeler... |
---|---|
Application UWP qui utilise Windows.Devices.Usb | UsbDevice.ConfigurationDescriptor pour obtenir la partie de longueur fixe. UsbConfiguration.Descriptors pour obtenir l’ensemble de la configuration. |
Application de bureau Win32 qui utilise des fonctions WinUSB | WinUsb_GetDescriptor |
Pilote client basé sur UMDF | IWDFUsbTargetDevice ::RetrieveDescriptor |
Pilote client basé sur KMDF | WdfUsbTargetDeviceRetrieveConfigDescriptor |
Pilote client wdm | UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST |
Descripteur d’interface USB
Un descripteur d’interface contient des informations sur un autre paramètre d’une interface USB.
Le tableau suivant montre le descripteur d’interface pour l’autre paramètre 0 de l’interface 0 pour l’appareil webcam :
Champ | Valeur |
---|---|
bInterfaceNumber | 0x00 |
bAlternateSetting | 0x00 |
bNumEndpoints | 0x01 |
bInterfaceClass | 0x0E |
bInterfaceSubClass | 0x02 |
bInterfaceProtocol | 0x00 |
iInterface | 0x02 |
0x0409 | « Microsoft LifeCam VX-5000 » |
0x0409 | « Microsoft LifeCam VX-5000 » |
Dans l’exemple précédent, notez les valeurs des champs bInterfaceNumber et bAlternateSetting . Ces champs contiennent des valeurs d’index que l’hôte utilise pour activer l’interface et l’un de ses autres paramètres. Pour l’activation, une application ou un pilote spécifie la valeur d’index dans l’appel de fonction. Sur la base de ces informations, la pile de pilotes USB génère ensuite une demande de contrôle standard (SET INTERFACE) et l’envoie au périphérique. Notez le champ bInterfaceClass . Le descripteur d’interface ou le descripteur pour l’un de ses autres paramètres spécifie un code de classe, une sous-classe et un protocole. La valeur de 0x0E indique que l’interface est destinée à la classe d’appareil vidéo. Notez également le champ iInterface . Cette valeur indique que deux descripteurs de chaîne sont ajoutés au descripteur d’interface. Les descripteurs de chaîne contiennent des descriptions Unicode utilisées lors de l’énumération de l’appareil pour identifier les fonctionnalités.
Si vous écrivez un... | Appeler... |
---|---|
Application UWP qui utilise Windows.Devices.Usb | UsbInterfaceSetting.Descriptors pour obtenir un descripteur particulier pour un autre paramètre particulier. UsbInterface.Descriptors pour obtenir des descripteurs pour tous les paramètres d’une interface. |
Application de bureau Win32 qui utilise des fonctions WinUSB | WinUsb_GetDescriptor |
Pilote client basé sur UMDF | IWDFUsbInterface ::GetInterfaceDescriptor |
Pilote client basé sur KMDF | WdfUsbInterfaceGetDescriptor |
Pilote client wdm | UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analyser pour chaque descripteur d’interface. Pour plus d’informations, consultez Comment sélectionner une configuration pour un périphérique USB. |
Descripteur de point de terminaison USB
Chaque point de terminaison, dans une interface, décrit un flux unique d’entrée ou de sortie pour l’appareil. Un appareil qui prend en charge les flux pour différents types de fonctions a plusieurs interfaces. Un appareil qui prend en charge plusieurs flux qui se rapportent à une fonction peut prendre en charge plusieurs points de terminaison sur une seule interface.
Tous les types de points de terminaison (à l’exception du point de terminaison par défaut) doivent fournir des descripteurs de point de terminaison afin que l’hôte puisse obtenir des informations sur le point de terminaison. Un descripteur de point de terminaison inclut des informations, telles que son adresse, son type, sa direction et la quantité de données que le point de terminaison peut gérer. Les transferts de données vers le point de terminaison sont basés sur ces informations.
Le tableau suivant montre un descripteur de point de terminaison pour l’appareil webcam :
Champ | Valeur |
---|---|
bEndpointAddress | 0x82 IN |
bmAttributes | 0x01 |
wMaxPacketSize | 0x0080 (128) |
bInterval | 0x01 |
Le champ bEndpointAddress spécifie l’adresse de point de terminaison unique qui contient le numéro de point de terminaison (Bits 3..0) et la direction du point de terminaison (Bit 7). En lisant ces valeurs dans l’exemple précédent, nous pouvons déterminer que le descripteur décrit un point de terminaison IN dont le numéro de point de terminaison est 2. L’attribut bmAttributes indique que le type de point de terminaison est isochroque. Le wMaxPacketSizefield indique le nombre maximal d’octets que le point de terminaison peut envoyer ou recevoir dans une seule transaction. Les bits 12..11 indiquent le nombre total de transactions pouvant être envoyées par microframe. BInterval indique la fréquence à laquelle le point de terminaison peut envoyer ou recevoir des données.
Si vous écrivez un... | Appeler... |
---|---|
Application UWP qui utilise Windows.Devices.Usb | UsbEndpointDescriptor |
Application de bureau Win32 qui utilise des fonctions WinUSB | WinUsb_GetDescriptor |
Pilote client basé sur UMDF | WDFUsbTargetPipe ::GetInformation |
Pilote client basé sur KMDF | WdfUsbTargetPipeGetInformation |
Pilote client wdm | UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analyser pour chaque descripteur de point de terminaison. Pour plus d’informations, consultez Comment sélectionner une configuration pour un périphérique USB. |