Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O descritor de associação de interface USB (IAD) permite que o dispositivo agrupe interfaces que pertencem a uma função. Este artigo descreve como um driver de cliente pode determinar se o dispositivo contém um IAD para uma função.
A especificação Universal Serial Bus, revisão 2.0, não suporta o agrupamento de mais de uma interface de um dispositivo composto dentro de uma única função. No entanto, o grupo de trabalho de dispositivos USB (DWG) criou classes de dispositivos USB que permitem funções com várias interfaces. O Fórum do Implementador USB emitiu uma notificação de alteração de engenharia (ECN) que define um mecanismo para agrupar interfaces.
A ECN especifica um descritor USB, chamado descritor de associação de interface (IAD), que permite aos fabricantes de hardware definir agrupamentos de interfaces. As classes de dispositivo com maior probabilidade de usar IADs incluem:
- Especificação da classe de vídeo USB (código de classe - 0x0E)
- Especificação de classe de áudio USB (código de classe - 0x01)
- Especificação da classe Bluetooth USB (código de classe - 0xE0)
Como usar IADs
As subseções a seguir descrevem informações sobre como usar IADs.
Dispositivos compostos alertando o Windows sobre IADs no firmware
Os fabricantes de dispositivos compostos normalmente atribuem um valor zero aos campos de classe de dispositivo (bDeviceClass), subclasse (bDeviceSubClass) e protocolo (bDeviceProtocol) no descritor de dispositivo, conforme especificado pela Universal Serial Bus Specification. O fabricante pode associar cada interface individual a uma classe de dispositivo e protocolo diferentes.
A equipe principal do USB-IF desenvolveu uma classe especial e um conjunto de códigos de protocolo que notifica o sistema operacional de que um ou mais IADs estão presentes no firmware do dispositivo. Um descritor de dispositivo deve ter os valores que aparecem na tabela a seguir ou o sistema operacional não deteta os IADs do dispositivo ou agrupa as interfaces do dispositivo corretamente.
| Campo descritor do dispositivo | Valor obrigatório |
|---|---|
| bDeviceClass | 0xEF |
| bDeviceSubClass | 0x02 |
| bDeviceProtocol | 0x01 |
Os valores de código alertam versões do Windows que não suportam IADs a instalar um driver de barramento de uso específico que enumera corretamente o dispositivo. Sem esses códigos no descritor do dispositivo, o sistema pode falhar ao enumerar o dispositivo ou o dispositivo pode não funcionar corretamente.
Um dispositivo pode ter mais de um IAD. Cada IAD deve estar localizado imediatamente antes das interfaces no grupo de interfaces que o IAD descreve.
Os campos de classe de função (bFunctionClass), subclasse (bFunctionSubclassClass) e protocolo (bFunctionProtocol) do IAD devem conter os valores especificados pela classe de dispositivo USB que descreve as interfaces na função.
Os campos de classe e subclasse do IAD não são necessários para corresponder aos campos de classe e subclasse das interfaces na coleção de interfaces que o IAD descreve. A Microsoft recomenda que a primeira interface da coleção tenha campos de classe e subclasse que correspondam aos campos de classe e subclasse do IAD. A tabela a seguir indica quais campos devem corresponder.
| Campo IAD | Campo de interface correspondente |
|---|---|
| bClasse de função | bInterfaceClass |
| bFunctionSubclassClass | bInterfaceSubClass |
O campo bFirstInterface do IAD indica o número da primeira interface na função. O campo bInterfaceCount do IAD indica quantas interfaces estão na coleção de interfaces. As interfaces em uma coleção de interfaces IAD devem ser contíguas (não pode haver lacunas na lista de números de interface) e, portanto, uma contagem com um primeiro número de interface é suficiente para especificar todas as interfaces na coleção.
Acesso ao conteúdo de um IAD
Os drivers de cliente não podem acessar descritores IAD diretamente. A ECN (notificação de alteração de engenharia) do IAD especifica que os IADs devem ser incluídos nas informações de configuração que os dispositivos retornam quando recebem uma solicitação do software host para o descritor de configuração (configuração GetDescriptor). O software host não pode recuperar IADs diretamente com uma solicitação GetDescriptor.
No entanto, os drivers de clientes podem consultar o controlador principal de um dispositivo USB para obter os identificadores de hardware (IDs) do dispositivo, e esses identificadores contêm informações incorporadas sobre os campos do IAD.
Exemplo de descritor de associação de interface USB
Esta seção ilustra um layout descritor para um dispositivo USB composto. O dispositivo de exemplo tem duas funções:
Função de videoaula
Um descritor de associação de interface (IAD) define essa função. A função contém duas interfaces: interface zero (0) e interface um (1).
O sistema gera hardware e identificadores (IDs) compatíveis para a função, conforme descrito em Suporte para a classe de dispositivo de comunicação móvel sem fio. Depois que o sistema operacional encontra o ficheiro INF apropriado, o sistema carrega o driver da classe de vídeo.
Função de dispositivo de entrada humana (HID)
Esta função contém apenas a interface 2.
O sistema gera hardware e IDs compatíveis para a função, conforme descrito em Enumeração de coleções de interface em dispositivos compostos USB. Depois que o sistema operacional corresponde ao arquivo INF apropriado, o sistema carrega o driver da classe de dispositivo de interface humano (HID).
O descritor é o seguinte:
Descritor do 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
Descritor de configuração
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)
Descritor de associação de 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
Descritor de interface de controle de vídeo
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
Descritor específico da classe de controle de vídeo
. . . .
. . . .
. . . .
Descritor de ponto final de controle de vídeo
. . . .
. . . .
. . . .
Descritor de interface de streaming de vídeo
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
Descritor específico da classe de streaming de vídeo
. . . .
. . . .
. . . .
Descritor de ponto final de streaming de vídeo
. . . .
. . . .
. . . .
Descritor de interface de dispositivos de entrada humana (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
Descritor específico da classe HID
. . . .
. . . .
. . . .
Descritor de ponto de extremidade HID
. . . .
. . . .
. . . .