suporte Plug and Play para HID por SPI
Este artigo descreve o suporte a plug-and-play para dispositivos que dão suporte a HID por meio do transporte SPI.
Carregamento do driver
O Windows carrega o driver de classe HID SPI com base em uma correspondência de identificador compatível entre um identificador de hardware e o INF. O identificador é gerado pela ACPI (Advanced Configuration and Power Interface). O identificador de hardware é gerado para o nó de dispositivo SPI no ACPI. Todos os dispositivos compatíveis com HID SPI devem expor o identificador de compatibilidade, além de um identificador de hardware exclusivo.
A Especificação do ACPI 5.0 inclui suporte para dispositivos de classe HID. as definições de ACPI para HID SPI são as seguintes.
Campo | Valor | Objeto ACPI | Formatar | Comentários |
---|---|---|---|---|
ID de hardware | Específico do fornecedor | _ESCONDEU | Cadeia de caracteres no formato VVVVddddd (por exemplo, MSFT0011) | VendorID + DeviceID |
ID compatível | PNP0C51 | _CID | Cadeia de caracteres no formato ACPIxxxx ou PNPxxx | CompatibleID |
Subsistema | Específico do fornecedor | _SUB | Cadeia de caracteres no formato de VVVVsss (por exemplo, MSFQ1234) | SubVendorID + SubSystemID |
Revisão de hardware | Específico do fornecedor | _VFC | 0xRRRR (revisão de 2byte) | Número de revisão de hardware |
Configurações atuais do recurso | Específico do fornecedor | _CRS | Fluxo de bytes | - SpiSerialBus para acesso ao dispositivo. - GpioInt para interrupções. |
Método específico do dispositivo | GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} | _DSM | Pacote | Define uma estrutura que contém informações específicas do dispositivo. |
Método de redefinição de dispositivo | _RST | Método de redefinição de dispositivo compatível com ACPI 6.0 7.3.25, a ser chamado pelo sistema operacional host como UM FLDR ACPI. |
Cada dispositivo HID SPI deve fornecer os seguintes campos obrigatórios:
- ID de hardware
- ID compatível
- Revisão de hardware
- Configurações atuais do recurso
- Método específico do dispositivo
- Método de redefinição de dispositivo
Consulte a especificação da ACPI (Advanced Configuration and Power Interface) 6.0 para obter informações adicionais.
O exemplo a seguir fornece um exemplo de IDs de hardware e IDs compatíveis para um dispositivo HID SPI aleatório. Esses detalhes são baseados em um dispositivo de exemplo que se relata como um HID com uma coleção de nível superior da classe "específica do fornecedor".
A ACPI (Advanced Configuration and Power Interface) gera as seguintes IDs de hardware e IDs compatíveis para carregar o driver de transporte HID SPI:
Identificadores de hardware: identificadores compatíveis
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C51
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
No exemplo anterior, a ID de Hardware foi gerada usando os valores extraídos do método ACPI _HID para o dispositivo de exemplo. A ID compatível é gerada usando os valores extraídos do método ACPI _CID para o dispositivo de exemplo. A ID compatível para um HID sobre SPI sempre deve ser PNP0C51 para a versão 1.0.
Observação
Se você fornecer um INF, deverá usar apenas os identificadores de hardware na coluna esquerda da tabela anterior. (Não use o identificador compatível na coluna à direita.)
A ID de hardware para o nó de dispositivo cliente HID gerado pelo componente HIDClass.sys é a seguinte:
Identificador de hardware: identificador compatível
HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: N/A
-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: N/A
-HID\*MSFT0010Col01: N/A
-HID_DEVICE_UP:FF00_U:0001;: N/A
-HID_DEVICE: N/A
A ID de hardware é gerada por HIDClass.sys e é idêntica para todos os transportes. Esse identificador é baseado em valores passados para HIDClass.sys de HIDSPI.SYS (extraídos do ACPI).
Sequência de enumeração do dispositivo
Depois que um driver de dispositivo HID SPI (HIDSPI.SYS) é carregado, ele começa a se comunicar com o dispositivo pelo barramento SPI. A primeira operação que o driver executa é a sequência de enumeração do dispositivo.
A lista a seguir fornece a sequência de enumeração. A ordem dessa lista pode mudar em versões futuras do Windows.
Recupere o código ASL (linguagem de origem) do ACPI para o dispositivo SPI HID do BIOS do sistema.
Emitir uma redefinição iniciada pelo host para o dispositivo
- Chamar o método de _RST ACPI
- O dispositivo declara a interrupção do GPIO
- O host lê a resposta de redefinição do dispositivo
Recuperar o descritor HID do dispositivo
- O host grava a solicitação do descritor HID
- O dispositivo declara a interrupção do GPIO
- O host lê a resposta do descritor HID
Recuperar descritor de relatório
- O host grava a solicitação do descritor de relatório
- O dispositivo declara a interrupção do GPIO
- O host lê a resposta do descritor de relatório
Se o host não concluir com êxito qualquer uma das etapas com o dispositivo, o driver HIDSPI poderá ser carregado com um valor de erro do Código 10. O host poderá reattempt para redefinir o dispositivo se nenhuma resposta for recebida, mas a lógica de repetição não é garantida.
Operações de relatório hid
A tabela a seguir fornece uma visão geral das operações de relatório hid compatíveis com o protocolo SPI HID e os relatórios de entrada e saída que são usados para executar a operação.
Tipo de relatório HID | Operação | Tipo de relatório de saída | Tipo de relatório de entrada |
---|---|---|---|
Relatório de Entrada | GET | 0x06 (Solicitação – conteúdo vazio) |
0x0B (Resposta) |
Relatório de Entrada | SET (Sem suporte) |
N/D | N/D |
Relatório de Entrada | INTERRUPÇÃO EM | N/D – Nenhuma solicitação | 0x01 |
Relatório de recursos | GET | 0x04 (Solicitação – conteúdo vazio) |
0x05 (Resposta) |
Relatório de recursos | SET | 0x03 | 0x09 (Confirmação – conteúdo vazio) |
Relatório de Saída | GET (Sem suporte) |
N/D | N/D |
Relatório de Saída | SET | 0x05 | 0x0A (Confirmação – conteúdo vazio) |
Operações de protocolo
Operação | Tipo de relatório de solicitação | Tipo de relatório de resposta |
---|---|---|
Solicitação do Descritor de Dispositivo | 0x01 | 0x7 |
Solicitação do Descritor de Relatório | 0x02 | 0x8 |
Solicitação de comando | 0x07 | 0x4 |
Redefinir Resposta | N/D | 0x3 |