Plug-and-Play prise en charge de HID sur SPI
Cet article décrit la prise en charge plug-and-play pour les appareils qui prennent en charge HID sur le transport SPI.
Chargement du pilote
Windows charge le pilote de classe SPI HID en fonction d’une correspondance d’identificateur compatible entre un identificateur matériel et inf. L’identificateur est généré par l’interface ACPI (Advanced Configuration and Power Interface). L’identificateur matériel est généré pour le nœud d’appareil SPI dans ACPI. Tous les appareils compatibles HID SPI doivent exposer l’identificateur de compatibilité, en plus d’un identificateur matériel unique.
La spécification ACPI 5.0 prend en charge les appareils de classe HID. Les définitions ACPI pour HID SPI sont les suivantes.
Champ | Valeur | Objet ACPI | Format | Commentaires |
---|---|---|---|---|
ID du matériel | Spécifique au fournisseur | _CACHÉ | Chaîne au format VVVVddddd (par exemple, MSFT0011) | VendorID + DeviceID |
Compatible ID | PNP0C51 | _CID | Chaîne au format ACPIxxxx ou PNPxxxx | CompatibleID |
Subsystem | Spécifique au fournisseur | _SUB | Chaîne au format VVVVssss (par exemple, MSFQ1234) | SubVendorID + SubSystemID |
Révision matérielle | Spécifique au fournisseur | _VRC | 0xRRRR (révision de 2 octets) | Numéro de révision matérielle |
Paramètres de ressource actuels | Spécifique au fournisseur | _CRS | Flux d’octets | - SpiSerialBus pour l’accès à l’appareil. - GpioInt pour les interruptions. |
Méthode spécifique à l’appareil | GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} | _DSM | Paquet | Définit une structure qui contient des informations spécifiques à l’appareil. |
Device Reset, méthode | _RST | Méthode de réinitialisation d’appareil compatible ACPI 6.0 7.3.25, à appeler par le système d’exploitation hôte en tant que FLDR ACPI. |
Chaque appareil HID SPI doit fournir les champs obligatoires suivants :
- ID du matériel
- Compatible ID
- Révision matérielle
- Paramètres de ressource actuels
- Méthode spécifique à l’appareil
- Device Reset, méthode
Pour plus d’informations, reportez-vous à la spécification ACPI (Advanced Configuration and Power Interface) 6.0.
Voici un exemple d’ID matériels et d’ID compatibles pour un appareil HID SPI aléatoire. Ces détails sont basés sur un exemple d’appareil qui se signale lui-même en tant que hid avec une collection de niveau supérieur de la classe « spécifique au fournisseur ».
Advanced Configuration and Power Interface (ACPI) génère les ID matériels et les ID compatibles suivants pour charger le pilote de transport HID SPI :
Identificateurs matériels : identificateurs compatibles
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz ;: ACPI\PNP0C51
ACPI\Vid_xxxxPid_yyyy ;:
ACPI\xxxxyyyy ;:
Dans l’exemple précédent, l’ID matériel a été généré à l’aide des valeurs extraites de la méthode ACPI _HID pour l’exemple d’appareil. L’ID compatible est généré à l’aide des valeurs extraites de la méthode ACPI _CID pour l’exemple d’appareil. L’ID compatible d’un fichier HID sur SPI doit toujours être PNP0C51 pour la version 1.0.
Notes
Si vous fournissez un INF, vous devez utiliser uniquement les identificateurs matériels dans la colonne de gauche du tableau précédent. (N’utilisez pas l’identificateur compatible dans la colonne de droite.)
L’ID matériel du nœud d’appareil client HID généré par le composant HIDClass.sys est le suivant :
Identificateur matériel : Identificateur compatible
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
L’ID matériel est généré par HIDClass.sys et est identique pour tous les transports. Cet identificateur est basé sur les valeurs passées à HIDClass.sys à partir de HIDSPI.SYS (extraites d’ACPI).
Séquence d’énumération d’appareil
Une fois qu’un pilote de périphérique HID SPI (HIDSPI.SYS) est chargé, il commence à communiquer avec l’appareil via le bus SPI. La première opération effectuée par le pilote est la séquence d’énumération de périphérique.
La liste suivante donne la séquence d’énumération. L’ordre de cette liste peut changer dans les versions ultérieures de Windows.
Récupérez le code ASL (ACPI Source Language) pour l’appareil HID SPI à partir du BIOS système.
Émettre une réinitialisation lancée par l’hôte sur l’appareil
- Appeler la méthode _RST ACPI
- L’appareil affirme l’interruption GPIO
- L’hôte lit la réponse de réinitialisation de l’appareil
Récupérer le descripteur HID à partir de l’appareil
- L’hôte écrit une demande de descripteur HID
- L’appareil affirme l’interruption GPIO
- L’hôte lit la réponse du descripteur HID
Récupérer le descripteur de rapport
- L’hôte écrit la demande de descripteur de rapport
- L’appareil affirme l’interruption GPIO
- L’hôte lit la réponse du descripteur de rapport
Si l’hôte ne parvient pas à effectuer correctement l’une des étapes avec l’appareil, le pilote HIDSPI peut se charger avec la valeur d’erreur Code 10. L’hôte peut réessayer de réinitialiser l’appareil si aucune réponse n’est reçue, mais la logique de nouvelle tentative n’est pas garantie.
Opérations de rapport HID
Le tableau ci-dessous fournit une vue d’ensemble des opérations de rapport HID prises en charge par le protocole HID SPI, ainsi que des rapports d’entrée et de sortie utilisés pour effectuer l’opération.
Type de rapport HID | Opération | Type de rapport de sortie | Type de rapport d’entrée |
---|---|---|---|
Rapport d’entrée | GET | 0x06 (Requête - contenu vide) |
0x0B (Réponse) |
Rapport d’entrée | SET (Non pris en charge) |
N/A | N/A |
Rapport d’entrée | INTERROMPRE DANS | N/A - Aucune demande | 0x01 |
Rapport sur les fonctionnalités | GET | 0x04 (Requête - contenu vide) |
0x05 (Réponse) |
Rapport sur les fonctionnalités | SET | 0x03 | 0x09 (Accusé de réception - contenu vide) |
Rapport de sortie | GET (Non pris en charge) |
N/A | N/A |
Rapport de sortie | SET | 0x05 | 0x0A (Accusé de réception - contenu vide) |
Opérations de protocole
Opération | Type de rapport de demande | Type de rapport de réponse |
---|---|---|
Demande de descripteur d’appareil | 0x01 | 0x7 |
Demande de descripteur de rapport | 0x02 | 0x8 |
Demande de commande | 0x07 | 0x4 |
Réinitialiser la réponse | N/A | 0x3 |