IOCTL_GPIO_READ_PINS IOCTL (gpio.h)

IOCTL_GPIO_READ_PINS I/O 控制程式代碼可讓一般用途 I/O (GPIO) 控制器的用戶端從一組設定為輸入的 GPIO 針腳讀取。 一般而言,GPIO 控制器的用戶端是連接到 GPIO 針腳的周邊裝置驅動程式。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

沒有輸入緩衝區。

輸入緩衝區長度

無。

輸出緩衝區

輸出緩衝區。

輸出緩衝區長度

輸出緩衝區應該夠大,足以包含用戶端傳送要求的目標連線之所有 GPIO 針腳的讀取。 例如,如果 GPIO 控制器硬體實作 64 GPIO 針腳,而用戶端會開啟這三個 GPIO 針腳的連線,則一位元節緩衝區就夠大,足以包含從連線中的三個針腳讀取的三個 1 位值。

狀態區塊

如果作業成功,GPIO 控制器驅動程式會將 Status 成員設定為 STATUS_SUCCESS,並將 Information 成員設定為要求作業期間傳輸的位元組總數。 如果作業傳輸 N 個位,則傳輸的位元元數目會 (N + 7) / 8。 (也就是說,7 會新增至 N,以四捨五入到下一個字節界限,再將整數除以 8.)

如果此要求失敗, Status 成員會設定為錯誤碼,而且不會從 GPIO 針腳讀取任何數據。 要求的作業可能會因為各種原因而失敗,其中包括無效的用戶端輸入、低資源和裝置故障。

如果輸出緩衝區不夠大,無法包含從目標連線中所有 GPIO 針腳讀取的數據, 則 Status 成員會設定為 STATUS_BUFFER_TOO_SMALL。 如果目標連線中的 GPIO 針腳設定為輸出, 狀態 成員會設定為STATUS_GPIO_OPERATION_DENIED。

備註

此要求會讀取用戶端傳送要求的目標連線一部分的所有 GPIO 針腳。 例如,如果連接有三個針腳,則從這些針腳讀取的1位值會儲存在輸出緩衝區中的位0、1和2。 此範例連線中的三個針腳可能會對應至 GPIO 控制器硬體中的 GPIO 針腳 7、8 和 23。 如果是,GPIO 針腳 7 會儲存在位 0 (緩衝區的最小有效位) ,GPIO 針腳 8 會儲存在緩衝區的位 1 中,而 GPIO 針腳 23 則會儲存在緩衝區的位 2 中。

當客戶端開啟與目標 GPIO 裝置的連線時,此連線中的所有 GPIO 針腳都會設定為輸入或輸出。 只有在目標針腳是輸入時, IOCTL_GPIO_READ_PINS 要求才能成功。

用戶端會將這個 I/O 控制要求傳送至目標裝置的檔案物件。 檔案物件是代表目標邏輯連接的 FILE_OBJECT 結構。 核心模式驅動程式架構 (KMDF) 驅動程式呼叫 WdfIoTargetCreate 方法來開啟此連線。 使用者模式驅動程式架構 (UMDF) 驅動程式呼叫 IWDFRemoteTarget::OpenFileByName 方法來開啟連線。

如需示範如何使用 IOCTL_GPIO_READ_PINS 要求來讀取一組 GPIO I/O 針腳的程式代碼範例,請參閱下列主題:

將 KMDF 驅動程式連線到 GPIO I/O 針腳

規格需求

需求
最低支援的用戶端 從 Windows 8 開始支援。
標頭 gpio.h

另請參閱

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate