GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT funzione di callback (gpioclx.h)
La funzione di callback degli eventi CLIENT_PreProcessControllerInterrupt esegue qualsiasi pre-elaborazione di un interruzione di I/O (GPIO) per utilizzo generico che deve essere eseguita immediatamente se l'ISR è pianificata per l'esecuzione in un secondo momento.
Sintassi
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;
NTSTATUS GpioClientPreProcessControllerInterrupt(
[in] PVOID Context,
[in] BANK_ID BankId,
ULONG64 EnabledMask
)
{...}
Parametri
[in] Context
Puntatore al contesto del dispositivo del controller GPIO.
[in] BankId
Banca che contiene il pin GPIO interrotto. Se N è il numero di banche nel controller GPIO, BankId è un intero nell'intervallo da 0 a N-1. L'estensione del framework GPIO ha ottenuto in precedenza il numero di banche nel controller dalla funzione di callback degli eventi CLIENT_QueryControllerBasicInformation . Per altre informazioni, vedere Osservazioni in CLIENT_CONTROLLER_BASIC_INFORMATION.
EnabledMask
Valore restituito
La funzione CLIENT_PreProcessControllerInterrupt restituisce STATUS_SUCCESS se la chiamata ha esito positivo. In caso contrario, restituisce un codice di errore appropriato.
Commenti
Questa funzione di callback è facoltativa. Un driver del controller GPIO implementa questa funzione solo se esegue la maggior parte della gestione degli interruzioni in PASSIVE_LEVEL, ma deve eseguire un'elaborazione iniziale di un interruzione in DIRQL.
In genere, un driver del controller GPIO può accedere a un controller GPIO mappato alla memoria in DIRQL, ma può accedere a un controller GPIO connesso serialmente solo in PASSIVE_LEVEL. Tuttavia, alcuni controller GPIO connessi serialmente potrebbero perdere dati di stato di interruzione se ritardano l'acquisizione dei bit di stato di interruzione fino a quando irQL non scende a PASSIVE_LEVEL. Quando irQL viene successivamente eliminato in PASSIVE_LEVEL, l'estensione del framework GPIO (GpioClx) può chiamare la funzione di callback del driver CLIENT_QueryActiveInterrupts per recuperare il contenuto del registro.
Il driver del controller GPIO indica se deve gestire gli interruzioni in PASSIVE_LEVEL nelle informazioni sul dispositivo passate a GpioClx durante il callback CLIENT_QueryControllerBasicInformation. Se il controller GPIO è mappato alla memoria, in modo che il driver possa accedere ai registri del controller in DIRQL, il driver imposta il flag MemoryMappedController nel membro Flags della struttura CLIENT_CONTROLLER_BASIC_INFORMATION che il driver passa a GpioClx. In caso contrario, il driver imposta MemoryMappedController = 0 per indicare che il driver deve gestire gli interruzioni in PASSIVE_LEVEL. Per altre informazioni, vedere ISR a livello passivo.
Per registrare la funzione di callback del driver CLIENT_PreProcessControllerInterrupt , chiamare il metodo GPIO_CLX_RegisterClient . Questo metodo accetta, come parametro di input, un puntatore a una struttura GPIO_CLIENT_REGISTRATION_PACKET che contiene un puntatore alla funzione CLIENT_PreProcessControllerInterrupt .
Esempio
Per definire una funzione di callback CLIENT_PreProcessControllerInterrupt , è prima necessario specificare una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una funzione di callback CLIENT_PreProcessControllerInterrupt denominata MyEvtGpioPreProcessInterrupt
, usare il tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, come illustrato nell'esempio di codice seguente:
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;
Implementare quindi la funzione di callback come indicato di seguito:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioPreProcessInterrupt(
PVOID Context
)
{ ... }
Il tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT è definito nel file di intestazione Gpioclx.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver KMDF. Per altre informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato a partire da Windows 8. |
Piattaforma di destinazione | Desktop |
Intestazione | gpioclx.h |
IRQL | Chiamata in DIRQL. |