GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION fonction de rappel (gpioclx.h)
La fonction de rappel d’événement CLIENT_ControllerSpecificFunction effectue une opération spécifique à un contrôleur d’E/S à usage général (GPIO).
Syntaxe
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;
NTSTATUS GpioClientControllerSpecificFunction(
[in] PVOID Context,
[in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}
Paramètres
[in] Context
Pointeur vers le contexte de périphérique du pilote de contrôleur GPIO.
[in, out] Parameters
Pointeur vers une structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS qui contient les mémoires tampons d’entrée et de sortie pour l’opération spécifique au contrôleur.
Valeur de retour
La fonction CLIENT_ControllerSpecificFunction retourne STATUS_SUCCESS si l’appel réussit. Les valeurs de retour possibles incluent les codes d’erreur suivants.
Retourner le code | Description |
---|---|
|
Le contrôleur GPIO ne prend pas en charge l’opération spécifiée par les paramètres d’entrée. |
|
La taille de la mémoire tampon d’entrée ou de la mémoire tampon de sortie est trop petite. |
Remarques
En guise d’option, un pilote de contrôleur GPIO peut prendre en charge les requêtes IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION. Ce type de demande de contrôle d’E/S (IOCTL) effectue des opérations spécifiques au contrôleur à l’avantage des pilotes de périphériques qui nécessitent ces opérations. Pour prendre en charge ce IOCTL, un pilote de contrôleur GPIO implémente une fonction CLIENT_ControllerSpecificFunction.
L’extension de framework GPIO (GpioClx) prend en charge la fonction CLIENT_ControllerSpecificFunction pour répondre aux besoins spécifiques de certaines plateformes matérielles. Les pilotes de contrôleur GPIO classiques n’implémentent pas cette fonction. Un pilote de périphérique qui utilise IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION demandes pour effectuer une opération spécifique au matériel sur une plateforme risque de perdre la compatibilité avec d’autres plateformes qui ne prennent pas en charge cette opération.
En règle générale, la fonction CLIENT_ControllerSpecificFunction programme le contrôleur GPIO pour effectuer une opération spécifique au matériel sur un ensemble de broches GPIO. Les paramètres d’entrée et de sortie de cette opération sont définis par le développeur pour le pilote du contrôleur GPIO. Seul un pilote de périphérique qui connaît les opérations particulières implémentées par un pilote de contrôleur GPIO peut demander ces opérations.
Lorsque GpioClx reçoit une demande de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION, il vérifie si le pilote du contrôleur GPIO a implémenté une fonction CLIENT_ControllerSpecificFunction. Dans ce cas, GpioClx copie les descriptions des mémoires tampons d’entrée et de sortie du IOCTL vers une structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS et transmet un pointeur à cette structure en tant que paramètre à la fonction CLIENT_ControllerSpecificFunction. Si les valeurs de paramètre dans la structure GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS sont valides, la fonction effectue l’opération demandée et retourne STATUS_SUCCESS.
Si GpioClx reçoit une demande de IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION et que le pilote du contrôleur GPIO n’implémente pas de fonction CLIENT_ControllerSpecificFunction, GpioClx termine le IOCTL avec le code d’erreur STATUS_NOT_IMPLEMENTED.
Exemples
Pour définir une fonction de rappel CLIENT_ControllerSpecificFunction, 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 fonctions de rappel permet d'Analyse du code pour les pilotes, static Driver Verifier (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.
Par exemple, pour définir une fonction de rappel CLIENT_ControllerSpecificFunction nommée MyEvtGpioControllerSpecificFunction
, utilisez le type de fonction GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION, comme illustré dans cet exemple de code :
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;
Ensuite, implémentez votre fonction de rappel comme suit :
_Use_decl_annotations_
NTSTATUS
MyEvtGpioControllerSpecificFunction(
PVOID Context,
PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{ ... }
Le type de fonction GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION est défini dans le fichier d’en-tête Gpioclx.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les 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_CONTROLLER_SPECIFIC_FUNCTION 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 annoter le comportement de la fonction.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Prise en charge à partir de Windows 8. |
plateforme cible | Bureau |
d’en-tête | gpioclx.h |
IRQL | Appelé à PASSIVE_LEVEL. |