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 universel (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 aux broches GPIO.
Code principal
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 TransferType pour cette 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 du 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 par 8.)
Si cette requête échoue, l’état membre 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 différentes raisons, ce qui peut inclure une entrée client non valide, des ressources faibles et un dysfonctionnement de l’appareil.
Si la mémoire tampon d’entrée n’est pas suffisamment 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 dans 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 requête. Par exemple, si la connexion a trois broches, bits 0, 1 et 2 à partir 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. Dans ce cas, le bit 0 (le bit le moins significatif) dans la mémoire tampon est écrit dans la broche GPIO 7, le bit 1 dans 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 tant que sorties. Une requête 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 de fichier de l’appareil cible. L’objet fichier est une structure FILE_OBJECT qui représente une connexion logique à la cible. 'infrastructure de pilote en mode noyau (KMDF) appelle la méthode WdfIoTargetCreate pour ouvrir cette connexion. 'infrastructure de pilotes en mode utilisateur (UMDF) appelle la méthode IWDFRemoteTarget ::OpenFileByName pour ouvrir la connexion.
Pour obtenir des exemples de code qui montrent comment utiliser la demande de 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
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Prise en charge à partir de Windows 8. |
d’en-tête | gpio.h |