IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)
Mit dem IOCTL_GPIO_WRITE_PINS E/A-Steuerungscode kann ein Client des allgemeinen I/O-Controllers (GPIO) in eine Reihe von GPIO-Pins schreiben, die als Ausgaben konfiguriert sind. In der Regel sind die Clients eines GPIO-Controllers Treiber für Peripheriegeräte, die eine Verbindung mit GPIO-Pins herstellen.
Hauptcode
Eingabepuffer
Der Eingabepuffer.
Eingabepufferlänge
Der Eingabepuffer sollte groß genug sein, um Daten für alle GPIO-Pins zu enthalten, die Teil der Zielverbindung sind, an die der Client die Anforderung sendet. Wenn die GPIO-Controllerhardware beispielsweise 64 GPIO-Pins implementiert und der Client eine Verbindung mit drei dieser GPIO-Pins öffnet, ist ein 1-Byte-Puffer ausreichend groß, um die drei 1-Bit-Werte zum Schreiben in die drei Pins in der Verbindung zu enthalten.
Ausgabepuffer
Der Ausgabepuffer enthält dieselben Daten wie der Eingabepuffer (da der TransferType- für diese IOCTL METHOD_BUFFERED ist).
Länge des Ausgabepuffers
Identisch mit dem Eingabepuffer.
Statusblock
Wenn der Vorgang erfolgreich ist, legt der Controllertreiber den Status Member auf STATUS_SUCCESS fest und legt das Information Member auf die Gesamtanzahl der bytes, die während des angeforderten Vorgangs übertragen werden. Wenn der Vorgang N-Bits überträgt, wird die Anzahl der übertragenen Bytes (N + 7) / 8. (Das heißt, 7 wird N hinzugefügt, um die nächste Bytegrenze vor der ganzzahligen Division um 8 aufzurunden.)
Wenn diese Anforderung fehlschlägt, wird der Status Member auf einen Fehlercode festgelegt, und es werden keine Daten aus den GPIO-Pins gelesen. Der angeforderte Vorgang kann aus verschiedenen Gründen fehlschlagen, was zu ungültigen Clienteingaben, niedrigen Ressourcen und Gerätefehlern führen kann.
Wenn der Eingabepuffer nicht groß genug ist, um ein Bit von Daten für jeden GPIO-Pin in der Zielverbindung zu enthalten, wird der Status Member auf STATUS_BUFFER_TOO_SMALL festgelegt. Wenn die GPIO-Pins in der Zielverbindung als Eingaben konfiguriert sind, wird der Status Member auf STATUS_GPIO_OPERATION_DENIED festgelegt.
Bemerkungen
Diese Anforderung schreibt in alle GPIO-Pins, die Teil der Zielverbindung sind, an die der Client die Anforderung sendet. Wenn die Verbindung z. B. drei Pins, Bits 0, 1 und 2 aus dem Eingabepuffer enthält, werden in diese drei Pins geschrieben. Die drei Pins in diesem Beispiel können GPIO-Pins 7, 8 und 23 in der GPIO-Controllerhardware zugeordnet werden. Wenn ja, wird Bit 0 (das geringste signifikante Bit) im Puffer in GPIO-Pin 7 geschrieben, Bit 1 im Puffer wird in GPIO-Pin 8 geschrieben, und Bit 2 im Puffer wird in GPIO-Pin 23 geschrieben.
Wenn der Client eine Verbindung mit einem ZIEL-GPIO-Gerät öffnet, werden alle GPIO-Pins in dieser Verbindung entweder als Eingaben oder als Ausgaben konfiguriert. Eine IOCTL_GPIO_WRITE_PINS Anforderung kann nur erfolgreich ausgeführt werden, wenn die Ziel-Pins ausgegeben werden.
Der Client sendet diese E/A-Steuerelementanforderung an das Dateiobjekt für das Zielgerät. Das Dateiobjekt ist eine FILE_OBJECT Struktur, die eine logische Verbindung mit dem Ziel darstellt. Kernelmodustreiberframework (KMDF)-Treiber rufen die WdfIoTargetCreate Methode auf, um diese Verbindung zu öffnen. Benutzermodustreiberframework (UMDF)-Treiber rufen die IWDFRemoteTarget::OpenFileByName Methode auf, um die Verbindung zu öffnen.
Codebeispiele, die zeigen, wie Sie die IOCTL_GPIO_WRITE_PINS-Anforderung zum Schreiben in eine Reihe von GPIO-E/A-Pins verwenden, finden Sie in den folgenden Themen:
Verbinden eines KMDF-Treibers mit GPIO-I/O-Pins
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Wird ab Windows 8 unterstützt. |
Header- | gpio.h |