IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

Le code de contrôle d’E /S IOCTL_GPIO_WRITE_PINS permet à un client du contrôleur d’E/S à usage général (GPIO) d’écrire dans un ensemble de broches GPIO configurées en tant que sorties. En règle générale, les clients d’un contrôleur GPIO sont des pilotes pour les périphériques qui se connectent à des broches GPIO.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

Mémoire tampon d’entrée.

Longueur de la mémoire tampon d’entrée

La mémoire tampon d’entrée doit être suffisamment grande pour contenir des données pour toutes les broches GPIO qui font partie de la connexion cible à laquelle le client envoie la requête. Par exemple, si le matériel du contrôleur GPIO implémente 64 broches GPIO et que le client ouvre une connexion à trois de ces broches GPIO, une mémoire tampon d’un octet est suffisamment grande pour contenir les trois valeurs 1 bits pour écrire dans les trois broches de la connexion.

Mémoire tampon de sortie

La mémoire tampon de sortie contient les mêmes données que la mémoire tampon d’entrée (car le Type de transfert de cette propriété IOCTL est METHOD_BUFFERED).

Longueur de la mémoire tampon de sortie

Identique à la mémoire tampon d’entrée.

Bloc d’état

Si l’opération réussit, le pilote de contrôleur définit le membre Status sur STATUS_SUCCESS et définit le membre Information sur le nombre total d’octets transférés pendant l’opération demandée. Si l’opération transfère N bits, le nombre d’octets transférés est (N + 7) / 8. (Autrement dit, 7 est ajouté à N pour arrondir à la limite d’octets suivante avant la division entière de 8.)

Si cette demande échoue, le membre Status est défini sur un code d’erreur et aucune donnée n’est lue à partir des broches GPIO. L’opération demandée peut échouer pour diverses raisons, notamment une entrée client non valide, de faibles ressources et un dysfonctionnement de l’appareil.

Si la mémoire tampon d’entrée n’est pas assez grande pour contenir un bit de données pour chaque broche GPIO dans la connexion cible, le membre Status est défini sur STATUS_BUFFER_TOO_SMALL. Si les broches GPIO de la connexion cible sont configurées en tant qu’entrées, le membre Status est défini sur STATUS_GPIO_OPERATION_DENIED.

Remarques

Cette requête écrit dans toutes les broches GPIO qui font partie de la connexion cible à laquelle le client envoie la demande. Par exemple, si la connexion a trois broches, les bits 0, 1 et 2 de la mémoire tampon d’entrée sont écrits dans ces trois broches. Les trois broches de cet exemple de connexion peuvent être mappées aux broches GPIO 7, 8 et 23 dans le matériel du contrôleur GPIO. Si c’est le cas, le bit 0 (le bit le moins significatif) de la mémoire tampon est écrit dans la broche GPIO 7, le bit 1 de la mémoire tampon est écrit dans la broche GPIO 8 et le bit 2 dans la mémoire tampon est écrit dans la broche GPIO 23.

Lorsque le client ouvre une connexion à un appareil GPIO cible, toutes les broches GPIO de cette connexion sont configurées en tant qu’entrées ou en sorties. Une demande IOCTL_GPIO_WRITE_PINS peut réussir uniquement si les broches cibles sont des sorties.

Le client envoie cette demande de contrôle d’E/S à l’objet file pour l’appareil cible. L’objet file est une structure FILE_OBJECT qui représente une connexion logique à la cible. Les pilotes KMDF (Kernel-Mode Driver Framework) appellent la méthode WdfIoTargetCreate pour ouvrir cette connexion. Les pilotes UMDF (User-Mode Driver Framework) appellent la méthode IWDFRemoteTarget ::OpenFileByName pour ouvrir la connexion.

Pour obtenir des exemples de code qui montrent comment utiliser la demande IOCTL_GPIO_WRITE_PINS pour écrire dans un ensemble de broches d’E/S GPIO, consultez les rubriques suivantes :

Connexion d’un pilote KMDF à des broches d’E/S GPIO

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge à partir de Windows 8.
En-tête gpio.h

Voir aussi

FILE_OBJECT

IWDFRemoteTarget ::OpenFileByName

WdfIoTargetCreate