Fonctions de rappel GPIO facultatives et requises
Un pilote de contrôleur d’E/S à usage général (GPIO) appelle la méthode GPIO_CLX_RegisterClient pour s’inscrire en tant que client de l’extension d’infrastructure GPIO (GpioClx). Pendant cet appel, le pilote transmet un paquet d’inscription à GpioClx qui spécifie une liste de fonctions de rappel d’événements implémentées par le pilote. GpioClx appelle ces fonctions de rappel pour configurer le matériel du contrôleur GPIO, effectuer des opérations d’E/S et gérer les interruptions. GpioClx nécessite un pilote de contrôleur GPIO pour implémenter certaines fonctions de rappel, mais la prise en charge d’autres fonctions de rappel est facultative.
Le paquet d’inscription est une structure GPIO_CLIENT_REGISTRATION_PACKET . Si le pilote du contrôleur GPIO implémente une fonction de rappel particulière, il écrit le pointeur de la fonction vers cette fonction de rappel dans le membre correspondant de cette structure. Ou, pour indiquer qu’une fonction de rappel particulière n’est pas prise en charge, le pilote écrit NULL dans le membre correspondant.
Les fonctions de rappel suivantes doivent être incluses dans le paquet d’inscription :
CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_ReleaseController S’il manque une fonction de rappel dans la liste précédente (autrement dit, si le pointeur de fonction correspondant dans le paquet d’inscription est NULL), la méthode GPIO_CLX_RegisterClient échoue.
Un pilote de contrôleur GPIO n’est pas nécessaire pour prendre en charge la lecture ou l’écriture dans des broches d’E/S GPIO, qui sont des broches configurées en tant qu’entrées de données ou sorties de données. (Un contrôleur GPIO sans broches d’E/S peut toujours relayer les demandes d’interruption provenant d’appareils périphériques.) Toutefois, si le paquet d’inscription inclut l’une des fonctions de rappel liées aux E/S suivantes, le paquet doit inclure les deux fonctions de rappel suivantes :
CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins En outre, si le paquet d’inscription inclut les deux fonctions de rappel de la liste précédente, le pilote doit en outre prendre en charge la lecture à partir des broches d’E/S GPIO, l’écriture dans des broches d’E/S GPIO ou les deux. Plus précisément, le paquet d’inscription doit inclure au moins une fonction de rappel dans la liste suivante :
CLIENT_ReadGpioPins ou CLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPins ou CLIENT_WriteGpioPinsUsingMask Un pilote qui prend en charge les lectures doit implémenter l’une des deux fonctions de rappel xxx CLIENT_ReadGpioPinsde la liste précédente. Un pilote qui prend en charge les écritures doit implémenter l’une des deux fonctions de rappel CLIENT_WriteGpioPinsXxx de la liste précédente.
Un pilote qui implémente CLIENT_ReadGpioPinsUsingMask, CLIENT_WriteGpioPinsUsingMask ou les deux doit définir le bit d’indicateur FormatIoRequestsAsMasks dans les informations de périphérique fournies par la fonction de rappel CLIENT_QueryControllerBasicInformation . Un pilote qui implémente CLIENT_ReadGpioPins, CLIENT_WriteGpioPins ou les deux ne doit pas définir ce bit d’indicateur. Pour plus d’informations, consultez la description du membre Flags dans CLIENT_CONTROLLER_BASIC_INFORMATION.
Un pilote de contrôleur GPIO n’est pas nécessaire pour prendre en charge les interruptions GPIO. Toutefois, si le paquet d’inscription inclut l’une des fonctions de rappel suivantes liées à l’interruption, le paquet doit inclure toutes les fonctions de rappel suivantes :
CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt Un pilote prenant en charge le masquage des interruptions doit implémenter la fonction de rappel CLIENT_MaskInterrupts . Un pilote qui prend en charge l’interrogation des interruptions actives doit implémenter la fonction de rappel CLIENT_QueryActiveInterrupts .
La fonction de rappel CLIENT_ClearActiveInterrupts est un cas particulier. Si le matériel du contrôleur GPIO efface automatiquement les interruptions actives lors de leur lecture, la fonction CLIENT_ClearActiveInterrupts n’est pas nécessaire et le pointeur de fonction correspondant dans le paquet d’inscription doit être défini sur NULL. Toutefois, si les interruptions actives ne sont pas effacées automatiquement lorsqu’elles sont lues, et si les fonctions de rappel liées aux interruptions de la liste précédente sont fournies dans le paquet d’inscription, la fonction CLIENT_ClearActiveInterrupts doit être incluse dans le paquet. Pour indiquer que le matériel efface automatiquement les interruptions actives lorsqu’elles sont lues, le pilote définit le bit d’indicateur ActiveInterruptsAutoClearOnRead dans les informations de l’appareil fournies par la fonction de rappel CLIENT_QueryControllerBasicInformation . Pour plus d’informations, consultez la description du membre Flags dans CLIENT_CONTROLLER_BASIC_INFORMATION.
Si le pilote du contrôleur GPIO prend en charge les interruptions GPIO, le paquet d’inscription peut, en option, inclure la fonction de rappel suivante :
CLIENT_QueryEnabledInterrupts GpioClx prend en charge la fonction CLIENT_QueryEnabledInterrupts à partir de Windows 8.1.
Un pilote qui prend en charge la gestion de l’alimentation au niveau des composants doit implémenter les deux fonctions de rappel suivantes :
CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext Pour indiquer que le matériel prend en charge la gestion de l’alimentation au niveau des composants, le pilote définit le bit d’indicateur BankIdlePowerMgmtSupported dans les informations de l’appareil fournies par la fonction de rappel CLIENT_QueryControllerBasicInformation . Pour plus d’informations, consultez la description du membre Flags dans CLIENT_CONTROLLER_BASIC_INFORMATION.
Les fonctions de rappel CLIENT_PreProcessControllerInterrupt, CLIENT_ReconfigureInterrupt et CLIENT_ControllerSpecificFunction sont facultatives et prises en charge par GpioClx pour résoudre les problèmes spécifiques au matériel dans certaines implémentations de contrôleur GPIO. Seuls les pilotes de contrôleur GPIO avec des exigences spéciales implémentent ces fonctions.