GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS fonction de rappel (gpioclx.h)
La fonction de rappel d’événement CLIENT_QueryEnabledInterrupts interroge l’état d’un ensemble de broches d’E/S à usage général (GPIO) pour déterminer quelles broches sont à la fois configurées comme entrées d’interruption et activées pour les interruptions.
Syntaxe
GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS GpioClientQueryEnabledInterrupts;
NTSTATUS GpioClientQueryEnabledInterrupts(
[in] PVOID Context,
[in] PGPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS QueryEnabledParameters
)
{...}
Paramètres
[in] Context
Pointeur vers le contexte de périphérique du pilote du contrôleur GPIO.
[in] QueryEnabledParameters
Pointeur vers une structure de GPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS allouée par l’appelant. Avant d’appeler cette fonction, l’appelant écrit un ID de banque dans le membre BankId de cette structure pour spécifier la banque de broches GPIO à interroger. Si elle réussit, la fonction écrit une valeur de masque dans le membre EnabledMask de cette structure pour indiquer les interruptions activées dans la banque spécifiée.
Valeur retournée
La fonction CLIENT_QueryEnabledInterrupts retourne STATUS_SUCCESS si l’appel réussit. Sinon, il retourne un code d’erreur approprié.
Remarques
À partir de Windows 8.1, le pilote de contrôleur GPIO peut, en option, implémenter une fonction de rappel CLIENT_QueryEnabledInterrupts. Si elle est implémentée, cette fonction est appelée par l’extension d’infrastructure GPIO (GpioClx) pour déterminer quelles interruptions sont activées dans une banque de broches GPIO.
Le paramètre QueryEnabledParameters pointe vers une structure de GPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS allouée par l’appelant . L’appelant définit la valeur du membre BankId de cette structure. La fonction CLIENT_QueryEnabledInterrupts écrit dans le membre EnabledMask de la structure.
Pour inscrire la fonction de rappel CLIENT_QueryEnabledInterrupts de votre pilote, appelez la méthode GPIO_CLX_RegisterClient . Cette méthode accepte, en tant que paramètre d’entrée, un pointeur vers une structure de GPIO_CLIENT_REGISTRATION_PACKET qui contient un pointeur de fonction CLIENT_QueryEnabledInterrupts .
La fonction CLIENT_QueryEnabledInterrupts est facultative. Si votre pilote n’implémente pas cette fonction, définissez le CLIENT_QueryEnabledInterrupts membre de la structure GPIO_CLIENT_REGISTRATION_PACKET sur NULL.
Si la fonction CLIENT_QueryEnabledInterrupts est implémentée, GpioClx utilise cette fonction pour améliorer la fiabilité et la diagnostics du pilote. GpioClx appelle cette fonction pour vérifier que l’ensemble des interruptions activées sur le contrôleur GPIO correspond à ce qu’attend GpioClx. En règle générale, une incompatibilité indique un bogue de pilote qui peut potentiellement provoquer une tempête d’interruption. GpioClx utilise cette fonction pour effectuer une validation d’état plus étendue dans les builds vérifiées (débogage) et réduit le nombre d’appels à cette fonction dans les builds gratuites (commerciales) afin d’éviter d’avoir un impact sur les performances. Si elle est implémentée, cette fonction doit lire directement l’état matériel au lieu de lire une version mise en cache ou gérée par logiciel de l’état.
GpioClx appelle la fonction de rappel CLIENT_QueryEnabledInterrupts à PASSIVE_LEVEL ou DIRQL, en fonction des informations de l’appareil que la fonction de rappel CLIENT_QueryControllerBasicInformation fournit à GpioClx. La fonction CLIENT_QueryControllerBasicInformation fournit des informations sur l’appareil sous la forme d’une structure de CLIENT_CONTROLLER_BASIC_INFORMATION . Si le bit d’indicateur MemoryMappedController est défini dans le membre Flags de cette structure, GpioClx appelle la fonction CLIENT_QueryEnabledInterrupts au niveau de DIRQL, qui est l’IRQL auquel s’exécute l’ISR dans GpioClx. Sinon, cette fonction est appelée à PASSIVE_LEVEL. Pour plus d’informations sur ce bit d’indicateur, consultez Fonctions de rappel GPIO facultatives et requises.
Exemples
Pour définir une fonction de rappel CLIENT_QueryEnabledInterrupts , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction de rappel aide l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification à la recherche d’erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.
Par exemple, pour définir une fonction de rappel CLIENT_QueryEnabledInterrupts nommée MyEvtGpioQueryEnabledInterrupts
, utilisez le type de fonction GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS, comme indiqué dans cet exemple de code :
GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS MyEvtGpioQueryEnabledInterrupts;
Ensuite, implémentez votre fonction de rappel comme suit :
_Use_decl_annotations_
NTSTATUS
MyEvtGpioQueryEnabledInterrupts(
PVOID Context,
PGPIO_QUERY_ENABLED_INTERRUPTS_PARAMETERS QueryEnabledParameters
)
{ ... }
Le type de fonction GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS est défini dans le fichier d’en-tête Gpioclx.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction GPIO_CLIENT_QUERY_ENABLED_INTERRUPTS dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF. Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge à partir de Windows 8.1. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | gpioclx.h |
IRQL | Consultez la section Notes. |
Voir aussi
CLIENT_CONTROLLER_BASIC_INFORMATION
CLIENT_QueryControllerBasicInformation