次の方法で共有


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 ピンの 3 つへの接続を開いた場合、1 バイト バッファーには、接続内の 3 つのピンから読み取られた 3 つの 1 ビット値を格納するのに十分な大きさがあります。

ステータス ブロック

操作が成功した場合、GPIO コントローラー ドライバーは Status メンバーをSTATUS_SUCCESSに設定し、要求された操作中に転送された合計バイト数に Information メンバーを設定します。 操作が N ビットを転送する場合、転送されるバイト数は (N + 7) / 8 になります。 (つまり、N に 7 が追加され、整数除算の前の次のバイト境界に 8 で切り上げられます)。

この要求が失敗した場合、 Status メンバーはエラー コードに設定され、GPIO ピンからデータが読み取られます。 要求された操作は、さまざまな理由で失敗する可能性があります。これには、無効なクライアント入力、リソースの不足、デバイスの誤動作が含まれる可能性があります。

出力バッファーが、ターゲット接続内のすべての GPIO ピンから読み取られたデータを格納するのに十分な大きさでない場合、 Status メンバーは STATUS_BUFFER_TOO_SMALL に設定されます。 ターゲット接続の GPIO ピンが出力として構成されている場合、 Status メンバーは STATUS_GPIO_OPERATION_DENIED に設定されます。

注釈

この要求は、クライアントが要求を送信するターゲット接続の一部であるすべての GPIO ピンを読み取ります。 たとえば、接続に 3 つのピンがある場合、これらのピンから読み取られた 1 ビット値は、出力バッファーのビット 0、1、および 2 に保存されます。 この例の接続の 3 つのピンは、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 以降でサポートされています。
Header gpio.h

こちらもご覧ください

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate