次の方法で共有


IOCTL_GPIO_WRITE_PINS IOCTL (gpio.h)

IOCTL_GPIO_WRITE_PINS I/O コントロール コードを使用すると、汎用 I/O (GPIO) コントローラーのクライアントは、出力として構成されている一連の GPIO ピンに書き込みます。 通常、GPIO コントローラーのクライアントは、GPIO ピンに接続される周辺機器のドライバーです。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

入力バッファー。

入力バッファーの長さ

入力バッファーは、クライアントが要求を送信するターゲット接続の一部であるすべての GPIO ピンのデータを格納するのに十分な大きさにする必要があります。 たとえば、GPIO コントローラー ハードウェアが 64 個の GPIO ピンを実装し、クライアントがこれらの GPIO ピンの 3 つに接続を開いた場合、1 バイトのバッファーには、接続内の 3 つのピンに書き込む 3 つの 1 ビット値を格納するのに十分な大きさがあります。

出力バッファー

出力バッファーには、入力バッファーと同じデータが含まれます (この IOCTL の TransferType がMETHOD_BUFFEREDされているため)。

出力バッファーの長さ

入力バッファーと同じです。

ステータス ブロック

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

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

入力バッファーがターゲット接続の GPIO ピンごとに 1 ビットのデータを格納するのに十分な大きさでない場合、 Status メンバーはSTATUS_BUFFER_TOO_SMALLに設定されます。 ターゲット接続の GPIO ピンが入力として構成されている場合、 Status メンバーは STATUS_GPIO_OPERATION_DENIED に設定されます。

注釈

この要求は、クライアントが要求を送信するターゲット接続の一部であるすべての GPIO ピンに書き込みます。 たとえば、接続に 3 つのピンがある場合、入力バッファーからのビット 0、1、および 2 は、これら 3 つのピンに書き込まれます。 この例の接続の 3 つのピンは、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 ピンに書き込む方法を示すコード例については、次のトピックを参照してください。

KMDF ドライバーの GPIO I/O ピンへの接続

要件

要件
サポートされている最小のクライアント Windows 8 以降でサポートされています。
Header gpio.h

こちらもご覧ください

FILE_OBJECT

IWDFRemoteTarget::OpenFileByName

WdfIoTargetCreate