Optionale und erforderliche GPIO-Rückruffunktionen

Ein GPIO-Controllertreiber (General Purpose E/O) ruft die GPIO_CLX_RegisterClient-Methode auf, um sich als Client der GPIO-Frameworkerweiterung (GpioClx) zu registrieren. Während dieses Aufrufs übergibt der Treiber ein Registrierungspaket an GpioClx, das eine Liste der vom Treiber implementierten Ereignisrückruffunktionen angibt. GpioClx ruft diese Rückruffunktionen auf, um die GPIO-Controllerhardware zu konfigurieren, E/A-Vorgänge auszuführen und Interrupts zu verwalten. GpioClx erfordert einen GPIO-Controllertreiber, um bestimmte Rückruffunktionen zu implementieren, aber die Unterstützung für andere Rückruffunktionen ist optional.

Das Registrierungspaket ist eine GPIO_CLIENT_REGISTRATION_PACKET Struktur. Wenn der GPIO-Controllertreiber eine bestimmte Rückruffunktion implementiert, schreibt er den Funktionszeiger auf diese Rückruffunktion in das entsprechende Element dieser Struktur. Oder um anzugeben, dass eine bestimmte Rückruffunktion nicht unterstützt wird, schreibt der Treiber NULL in den entsprechenden Member.

Die folgenden Rückruffunktionen müssen im Registrierungspaket enthalten sein:

CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_ReleaseController Wenn eine Rückruffunktion in der vorherigen Liste fehlt (d. h. wenn der entsprechende Funktionszeiger im Registrierungspaket NULL ist), schlägt die GPIO_CLX_RegisterClient-Methode fehl.

Ein GPIO-Controllertreiber ist nicht erforderlich, um das Lesen oder Schreiben von GPIO-E/A-Pins zu unterstützen, bei denen es sich um Pins handelt, die als Dateneingaben oder Datenausgaben konfiguriert sind. (Ein GPIO-Controller ohne E/A-Pins kann trotzdem Interruptanforderungen von Peripheriegeräten weiterleiten.) Wenn das Registrierungspaket jedoch eine der folgenden E/A-bezogenen Rückruffunktionen enthält, muss das Paket die beiden folgenden Rückruffunktionen enthalten:

CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins Wenn das Registrierungspaket die beiden Rückruffunktionen in der vorherigen Liste enthält, muss der Treiber außerdem das Lesen von GPIO-E/A-Pins, das Schreiben in GPIO-E/A-Pins oder beides unterstützen. Insbesondere muss das Registrierungspaket mindestens eine Rückruffunktion in der folgenden Liste enthalten:

CLIENT_ReadGpioPins oder CLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPins oder CLIENT_WriteGpioPinsUsingMask Ein Treiber, der Lesevorgänge unterstützt, muss eine der beiden CLIENT_ReadGpioPinsXxx-Rückruffunktionen in der vorherigen Liste implementieren. Ein Treiber, der Schreibvorgänge unterstützt, muss eine der beiden CLIENT_WriteGpioPinsXxx-Rückruffunktionen in der vorherigen Liste implementieren.

Ein Treiber, der CLIENT_ReadGpioPinsUsingMask, CLIENT_WriteGpioPinsUsingMask oder beide implementiert, muss das FormatIoRequestsAsMasks-Flagbit in den Geräteinformationen festlegen, die von der CLIENT_QueryControllerBasicInformation Rückruffunktion bereitgestellt werden. Ein Treiber, der CLIENT_ReadGpioPins, CLIENT_WriteGpioPins oder beides implementiert, darf dieses Flagbit nicht festlegen. Weitere Informationen finden Sie in der Beschreibung des Flags-Elements in CLIENT_CONTROLLER_BASIC_INFORMATION.

Ein GPIO-Controllertreiber ist nicht erforderlich, um GPIO-Interrupts zu unterstützen. Wenn das Registrierungspaket jedoch eine der folgenden Interrupt-bezogenen Rückruffunktionen enthält, muss das Paket alle folgenden Rückruffunktionen enthalten:

CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt Ein Treiber, der die Maskierung von Interrupts unterstützt, muss die CLIENT_MaskInterrupts Rückruffunktion implementieren. Ein Treiber, der die Abfrage aktiver Interrupts unterstützt, muss die CLIENT_QueryActiveInterrupts Rückruffunktion implementieren.

Die CLIENT_ClearActiveInterrupts Rückruffunktion ist ein Sonderfall. Wenn die GPIO-Controllerhardware aktive Interrupts beim Lesen automatisch löscht, ist die CLIENT_ClearActiveInterrupts Funktion nicht erforderlich, und der entsprechende Funktionszeiger im Registrierungspaket sollte auf NULL festgelegt werden. Wenn aktive Interrupts jedoch nicht automatisch gelöscht werden, wenn sie gelesen werden, und wenn die interruptbezogenen Rückruffunktionen in der vorherigen Liste im Registrierungspaket angegeben werden, muss die CLIENT_ClearActiveInterrupts-Funktion im Paket enthalten sein. Um anzugeben, dass die Hardware die aktiven Interrupts automatisch löscht, wenn sie gelesen werden, legt der Treiber das ActiveInterruptsAutoClearOnRead-Flagbit in den Geräteinformationen fest, die von der CLIENT_QueryControllerBasicInformation Rückruffunktion bereitgestellt werden. Weitere Informationen finden Sie in der Beschreibung des Flags-Elements in CLIENT_CONTROLLER_BASIC_INFORMATION.

Wenn der GPIO-Controllertreiber GPIO-Interrupts unterstützt, kann das Registrierungspaket optional die folgende Rückruffunktion enthalten:

CLIENT_QueryEnabledInterrupts GpioClx unterstützt die CLIENT_QueryEnabledInterrupts-Funktion ab Windows 8.1.

Ein Treiber, der die Energieverwaltung auf Komponentenebene unterstützt, muss die beiden folgenden Rückruffunktionen implementieren:

CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext Um anzugeben, dass die Hardware die Energieverwaltung auf Komponentenebene unterstützt, legt der Treiber das Flagbit BankIdlePowerMgmtSupported in den Geräteinformationen fest, die von der CLIENT_QueryControllerBasicInformation Rückruffunktion bereitgestellt werden. Weitere Informationen finden Sie in der Beschreibung des Flags-Elements in CLIENT_CONTROLLER_BASIC_INFORMATION.

Die Rückruffunktionen CLIENT_PreProcessControllerInterrupt, CLIENT_ReconfigureInterrupt und CLIENT_ControllerSpecificFunction sind optional und werden von GpioClx unterstützt, um hardwarespezifische Probleme in einigen GPIO-Controllerimplementierungen zu beheben. Nur GPIO-Controllertreiber mit besonderen Anforderungen implementieren diese Funktionen.