union CONTROLLER_ATTRIBUTE_FLAGS (gpioclx.h)
La structure CONTROLLER_ATTRIBUTE_FLAGS décrit les attributs matériels de l’appareil de contrôleur d’E/S à usage général (GPIO).
Syntaxe
typedef union _CONTROLLER_ATTRIBUTE_FLAGS {
struct {
ULONG MemoryMappedController : 1;
ULONG ActiveInterruptsAutoClearOnRead : 1;
ULONG FormatIoRequestsAsMasks : 1;
ULONG DeviceIdlePowerMgmtSupported : 1;
ULONG BankIdlePowerMgmtSupported : 1;
ULONG EmulateDebouncing : 1;
ULONG EmulateActiveBoth : 1;
ULONG IndependentIoHwSupported : 1;
ULONG Reserved : 24;
};
ULONG AsULONG;
} CONTROLLER_ATTRIBUTE_FLAGS, *PCONTROLLER_ATTRIBUTE_FLAGS;
Membres
MemoryMappedController
Indique si le contrôleur GPIO est mappé en mémoire. Si cet indicateur est défini, les registres matériels du contrôleur GPIO sont mappés aux adresses mémoire et sont directement accessibles par une routine de pilote de contrôleur GPIO qui s’exécute sur DIRQL. Sinon, les registres du contrôleur GPIO sont accessibles uniquement par le biais de demandes d’E/S, que le pilote du contrôleur GPIO envoie à IRQL = PASSIVE_LEVEL. Pour plus d'informations, consultez la section Notes.
ActiveInterruptsAutoClearOnRead
Indique si les interruptions actives sont automatiquement effacées lorsque le pilote du contrôleur GPIO les lit. Si cet indicateur est défini, GpioClx suppose que les interruptions sont automatiquement effacées lorsqu’elles sont lues et, par conséquent, ne demande pas explicitement que le pilote efface les interruptions actives pendant le traitement des interruptions. Sinon, GpioClx demande explicitement que les interruptions actives soient effacées. Pour plus d’informations, consultez la discussion du bit d’indicateur ActiveInterruptsAutoClearOnRead dans GPIO_CLIENT_REGISTRATION_PACKET.
FormatIoRequestsAsMasks
Indique si les fonctions de rappel qui lisent ou écrivent dans les broches GPIO doivent spécifier des valeurs de lecture et d’écriture en tant que masques 64 bits. Si cet indicateur est défini, GpioClx utilise des rappels CLIENT_ReadGpioPinsUsingMask qui lisent les valeurs de broche GPIO dans des masques, et CLIENT_WriteGpioPinsUsingMask des rappels qui utilisent des masques pour désigner des broches GPIO à définir et effacer. Sinon, GpioClx utilise des rappels CLIENT_ReadGpioPins et CLIENT_WriteGpioPins qui utilisent des tableaux de numéros d’épingle pour spécifier les broches GPIO auxquelles accéder. Pour plus d’informations, consultez la discussion du bit d’indicateur FormatIoRequestsAsMasks dans GPIO_CLIENT_REGISTRATION_PACKET.
DeviceIdlePowerMgmtSupported
Indique si le contrôleur GPIO prend en charge la gestion de l’alimentation au niveau de l’appareil. Si cet indicateur est défini, le contrôleur GPIO peut être placé dans un état d’alimentation faible (D3) lorsqu’il est inactif (autrement dit, lorsqu’il n’y a pas de connexion active au contrôleur). Sinon, le contrôleur GPIO reste dans l’état d’alimentation complet (D0) chaque fois que le contrôleur est allumé.
BankIdlePowerMgmtSupported
Indique si le contrôleur GPIO prend en charge la gestion de l’alimentation au niveau des composants. Si cet indicateur est défini, une ou plusieurs banques du contrôleur GPIO peuvent être placées dans un état de faible puissance indépendamment des autres banques du contrôleur GPIO. Sinon, les états de pouvoir des banques ne peuvent pas être contrôlés individuellement. Cet indicateur peut être défini uniquement pour un contrôleur GPIO dont les registres sont mappés en mémoire, comme indiqué par l’indicateur MemoryMappedController . En règle générale, seul un contrôleur GPIO qui fait partie intégrante d’un module SoC est mappé en mémoire. Un contrôleur GPIO externe au module SoC n’est généralement pas mappé en mémoire.
EmulateDebouncing
Indique si le débouchage des signaux d’entrée aux broches GPIO est effectué par le logiciel ou par le matériel. Si cet indicateur est défini, le contrôleur GPIO nécessite l’émulation du débouchage dans le logiciel par l’extension d’infrastructure GPIO (GpioClx). Sinon, le débouchage est effectué par le matériel, et le débouchage émulé par logiciel n’est pas nécessaire.
EmulateActiveBoth
Indique si le pilote du contrôleur GPIO exige que GpioClx émule les interruptions actives dans les logiciels. Si cet indicateur est défini, GpioClx émule les deux interruptions actives dans les logiciels. Sinon, GpioClx n’émule pas les interruptions actives. Pour plus d'informations, consultez la section Notes.
IndependentIoHwSupported
Reserved
Réservé pour le système.
AsULONG
Remarques
Le membre Flags de la structure CLIENT_CONTROLLER_BASIC_INFORMATION est une structure CONTROLLER_ATTRIBUTE_FLAGS .
GpioClx implémente une routine de service d’interruption (ISR) pour traiter les interruptions à partir du contrôleur GPIO. Si le bit de l’indicateur MemoryMappedController est défini, cet ISR accède directement aux registres matériels du contrôleur GPIO. Sinon, l’ISR planifie un thread de travail pour gérer l’interruption, et ce thread de travail, qui s’exécute à IRQL = PASSIVE_LEVEL, appelle les fonctions de rappel liées aux interruptions du pilote pour gérer l’interruption. Ces fonctions utilisent des demandes d’E/S pour transférer des données et contrôler des informations vers et depuis les registres du contrôleur GPIO. Étant donné que ces demandes d’E/S sont envoyées à partir d’un thread de niveau passif, elles peuvent être envoyées de manière synchrone.
Pour plus d’informations sur le bit d’indicateur MemoryMappedController , consultez Rappels liés aux interruptions.
Une interruption active-both est une interruption déclenchée par le bord pour laquelle une demande d’interruption est indiquée par une transition de faible à élevé ou de haut à faible sur la ligne d’interruption. Une fois qu’une transition de bas à élevé signale une demande d’interruption, la ligne d’interruption reste élevée jusqu’à ce qu’une transition de niveau élevé à faible signale la demande d’interruption suivante. De même, après qu’une transition de haut à bas signale une demande d’interruption, la ligne d’interruption reste faible jusqu’à ce qu’une transition de faible à élevée signale la demande d’interruption suivante.
Un appareil à bouton-pousseur est généralement connecté à une interruption active-both. Une interruption est générée lorsque l’utilisateur appuie sur le bouton, et une autre interruption est générée lorsque le bouton est relâché. Si l’ISR d’un pilote de périphérique est connecté à une interruption active-both, l’ISR est appelé sur les bords montant et descendant de la ligne de signal.
Certains contrôleurs GPIO implémentent les deux entrées d’interruption actives dans le matériel. Toutefois, si le matériel ne prend pas en charge les interruptions active-both, le pilote du contrôleur GPIO définit l’indicateur EmulateActiveBoth pour demander que GpioClx émule les interruptions actives dans les deux dans le logiciel. Un pilote qui définit cet indicateur doit implémenter une fonction de rappel CLIENT_ReconfigureInterrupt . Pour émuler une broche d’interruption active-both, GpioClx appelle cette fonction pour configurer alternativement une broche GPIO pour les interruptions en mode actif-élevé et actif-bas.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge à partir de Windows 8. |
En-tête | gpioclx.h |