IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)
IOCTL_GPIO_WRITE_PINS I/O 控制程式代碼可讓一般用途 I/O 的用戶端 (GPIO) 控制器寫入設定為輸出的一組 GPIO 針腳。 一般而言,GPIO 控制器的用戶端是連接到 GPIO 針腳的周邊裝置驅動程式。
主要程序代碼
輸入緩衝區
輸入緩衝區。
輸入緩衝區長度
輸入緩衝區應該夠大,足以包含用戶端傳送要求的目標連線一部分的所有 GPIO 針腳數據。 例如,如果 GPIO 控制器硬體實作 64 個 GPIO 針腳,而用戶端會開啟與其中三個 GPIO 針腳的連接,則一位元節緩衝區就夠大,足以包含三個 1 位值,以寫入連線中的三個針腳。
輸出緩衝區
輸出緩衝區包含與輸入緩衝區相同的數據 (,因為此 IOCTL 的 TransferType 是METHOD_BUFFERED) 。
輸出緩衝區長度
與輸入緩衝區相同。
狀態區塊
如果作業成功,控制器驅動程式會將 Status 成員設定為 STATUS_SUCCESS,並將 Information 成員設定為要求作業期間傳輸的位元組總數。 如果作業傳輸 N 個位,則傳輸的位元元數目會 (N + 7) / 8。 (也就是說,7 會新增至 N,以四捨五入到下一個字節界限,然後整數除以 8.)
如果此要求失敗, Status 成員會設定為錯誤碼,而且不會從 GPIO 針腳讀取任何數據。 要求的作業可能會因為各種原因而失敗,包括無效的用戶端輸入、低資源和裝置故障。
如果輸入緩衝區不夠大,無法包含目標連線中每個 GPIO 針腳的一位數據, 則 Status 成員會設定為 STATUS_BUFFER_TOO_SMALL。 如果目標連線中的 GPIO 針腳設定為輸入, 則 Status 成員會設定為 STATUS_GPIO_OPERATION_DENIED。
備註
此要求會寫入用戶端傳送要求的目標連線的所有 GPIO 針腳。 例如,如果連線有三個針腳,則輸入緩衝區中的位0、1和2會寫入這三個針腳。 此範例連線中的三個針腳可能會對應至 GPIO 控制器硬體中的 GPIO 針腳 7、8 和 23。 如果是,位 0 (緩衝區中最小有效位) 會寫入 GPIO 針腳 7、緩衝區中的位 1 寫入 GPIO 針腳 8,而緩衝區中的位 2 則會寫入 GPIO 針腳 23。
當客戶端開啟目標 GPIO 裝置的連線時,此連線中的所有 GPIO 針腳都會設定為輸入或輸出。 只有在目標針腳是輸出時, IOCTL_GPIO_WRITE_PINS 要求才會成功。
用戶端會將此 I/O 控制要求傳送至目標裝置的檔案物件。 檔案對像是 FILE_OBJECT 結構,代表目標的邏輯連線。 核心模式驅動程式架構 (KMDF) 驅動程式呼叫 WdfIoTargetCreate 方法來開啟此連線。 使用者模式驅動程式架構 (UMDF) 驅動程式呼叫 IWDFRemoteTarget::OpenFileByName 方法來開啟連線。
如需示範如何使用 IOCTL_GPIO_WRITE_PINS 要求寫入一組 GPIO I/O 針腳的程式代碼範例,請參閱下列主題:
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始支援。 |
標頭 | gpio.h |