次の方法で共有


省略可能および必須の GPIO コールバック関数

汎用 I/O (GPIO) コントローラー ドライバーは、GPIO_CLX_RegisterClient メソッドを呼び出して、GPIO フレームワーク拡張機能 (GpioClx) のクライアントとして登録します。 この呼び出し中、ドライバーは、ドライバーが実装するイベント コールバック関数の一覧を指定する登録パケットを GpioClx に渡します。 GpioClx はこれらのコールバック関数を呼び出して、GPIO コントローラー ハードウェアの構成、I/O 操作の実行、割り込みの管理を行います。 GpioClx は、特定のコールバック関数を実装するために GPIO コントローラー ドライバーを必要としますが、他のコールバック関数のサポートは省略可能です。

登録パケットは、GPIO_CLIENT_REGISTRATION_PACKET 構造体です。 GPIO コントローラー ドライバーが特定のコールバック関数を実装する場合、そのコールバック関数への関数ポインターをこの構造体に対応するメンバーに書き込みます。 または、特定のコールバック関数がサポートされていないことを示すため、ドライバーは対応するメンバーに NULL を書き込みます。

登録パケットには、次のコールバック関数が含まれている必要があります。

CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_ReleaseController 上記の一覧にコールバック関数がない場合 (つまり、登録パケットの対応する関数ポインターが NULL の場合)、GPIO_CLX_RegisterClient メソッドは失敗します。

GPIO コントローラー ドライバーは、データ入力またはデータ出力として構成されている GPIO I/O ピンへの読み取りまたは書き込みをサポートするために必要ではありません。 (I/O ピンのない GPIO コントローラーでも、周辺機器からの割り込み要求を中継できます)。ただし、登録パケットに次のいずれかの I/O 関連コールバック関数が含まれている場合、パケットには次のコールバック関数の両方を含める必要があります。

CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins さらに、登録パケットに上記の一覧のコールバック関数 2 つが含まれている場合、ドライバーは、GPIO I/O ピンからの読み取り、GPIO I/O ピンへの書き込み、またはその両方を追加でサポートする必要があります。 特に、登録パケットには、次の一覧に少なくとも 1 つのコールバック関数が含まれている必要があります。

CLIENT_ReadGpioPins または CLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPins または CLIENT_WriteGpioPinsUsingMask 読み取りをサポートするドライバーは、上記の一覧の 2 つの CLIENT_ReadGpioPinsXxx コールバック関数のいずれかを実装する必要があります。 書き込みをサポートするドライバーは、上記の一覧の 2 つの CLIENT_WriteGpioPinsXxx コールバック関数のいずれかを実装する必要があります。

CLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPinsUsingMask、またはその両方を実装するドライバーは、FormatIoRequestsAsMasks フラグ ビットを CLIENT_QueryControllerBasicInformation コールバック関数が提供するデバイス情報に設定することが必要です。 CLIENT_ReadGpioPinsCLIENT_WriteGpioPins、またはその両方を実装するドライバーでは、このフラグ ビットを設定しないでください。 詳細については、CLIENT_CONTROLLER_BASIC_INFORMATIONFlags メンバーの説明を参照してください。

GPIO コントローラー ドライバーは、GPIO 割り込みをサポートするために必要ありません。 ただし、登録パケットに次の割り込み関連コールバック関数のいずれかが含まれている場合、パケットには次のすべてのコールバック関数が含まれている必要があります。

CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt 割り込みのマスクをサポートするドライバーは、CLIENT_MaskInterrupts コールバック機能を実装することが必要です。 アクティブな割り込みのクエリをサポートするドライバーは、CLIENT_QueryActiveInterrupts コールバック関数を実装する必要があります。

CLIENT_ClearActiveInterrupts コールバック関数は特殊なケースです。 GPIO コントローラー ハードウェアが読み取り後にアクティブな割り込みを自動的にクリアする場合、CLIENT_ClearActiveInterrupts 関数は必要なく、登録パケットの対応する関数ポインターは NULL に設定する必要があります。 ただし、アクティブな割り込みが読み取り後に自動的にクリアにならず、上記の一覧の割り込み関連のコールバック関数が登録パケットで提供されている場合は、CLIENT_ClearActiveInterrupts 関数をパケットに含める必要があります。 読み取り後にハードウェアがアクティブな割り込みを自動的にクリアすることを示すため、ドライバーは CLIENT_QueryControllerBasicInformation コールバック関数が提供するデバイス情報に ActiveInterruptsAutoClearOnRead フラグ ビットを設定します。 詳細については、CLIENT_CONTROLLER_BASIC_INFORMATIONFlags メンバーの説明を参照してください。

GPIO コントローラー ドライバーが GPIO 割り込みをサポートしている場合、登録パケットはオプションとして、次のコールバック関数を含めることができます。

CLIENT_QueryEnabledInterrupts GpioClx は、Windows 8.1 以降で CLIENT_QueryEnabledInterrupts 関数をサポートしています。

コンポーネント レベルの電源管理をサポートするドライバーは、次のコールバック関数の両方を実装する必要があります。

CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext ハードウェアがコンポーネント レベルの電源管理をサポートしていることを示すため、ドライバーはBankIdlePowerMgmtSupported フラグ ビットを CLIENT_QueryControllerBasicInformation コールバック関数が提供するデバイス情報に設定します。 詳細については、CLIENT_CONTROLLER_BASIC_INFORMATIONFlags メンバーの説明を参照してください。

The CLIENT_PreProcessControllerInterruptCLIENT_ReconfigureInterrupt、および CLIENT_ControllerSpecificFunction コールバック関数はオプション設定であり、一部の GPIO コントローラー実装でハードウェア固有の問題に対処するために GpioClx によってサポートされます。 特別な要件がある GPIO コントローラー ドライバーのみが、これらの関数を実装します。