Condividi tramite


Funzioni di callback facoltative e necessarie per GPIO

Un driver controller di I/O (GPIO) per utilizzo generico chiama il metodo GPIO_CLX_RegisterClient per registrare come client dell'estensione del framework GPIO (GpioClx). Durante questa chiamata, il driver passa un pacchetto di registrazione a GpioClx che specifica un elenco di funzioni di callback eventi implementate dal driver. GpioClx chiama queste funzioni di callback per configurare l'hardware del controller GPIO, eseguire operazioni di I/O e gestire gli interruzioni. GpioClx richiede un driver del controller GPIO per implementare determinate funzioni di callback, ma il supporto per altre funzioni di callback è facoltativo.

Il pacchetto di registrazione è una struttura GPIO_CLIENT_REGISTRATION_PACKET . Se il driver del controller GPIO implementa una funzione di callback specifica, scrive il puntatore della funzione a tale funzione di callback nel membro corrispondente di questa struttura. In alternativa, per indicare che una determinata funzione di callback non è supportata, il driver scrive NULL nel membro corrispondente.

Le funzioni di callback seguenti devono essere incluse nel pacchetto di registrazione:

CLIENT_PrepareController CLIENT_QueryControllerBasicInformationCLIENT_StartController CLIENT_StopController CLIENT_ReleaseController Se manca una funzione di callback nell'elenco precedente, ovvero se il puntatore della funzione corrispondente nel pacchetto di registrazione è NULL, il metodo GPIO_CLX_RegisterClient ha esito negativo.

Un driver del controller GPIO non è necessario per supportare la lettura da o la scrittura nei pin di I/O GPIO, che sono pin configurati come input dati o output dei dati. Un controller GPIO senza pin di I/O potrebbe comunque inviare richieste di interruzione dai dispositivi periferici. Tuttavia, se il pacchetto di registrazione include una delle funzioni di callback correlate all'I/O seguenti, il pacchetto deve includere entrambe le funzioni di callback seguenti:

CLIENT_ConnectIoPins CLIENT_DisconnectIoPins Inoltre, se il pacchetto di registrazione include le due funzioni di callback nell'elenco precedente, il driver deve inoltre supportare la lettura da pin I/O GPIO, scrittura in pin I/O GPIO o entrambi. In particolare, il pacchetto di registrazione deve includere almeno una funzione di callback nell'elenco seguente:

CLIENT_ReadGpioPinsoCLIENT_ReadGpioPinsUsingMask CLIENT_WriteGpioPins o CLIENT_WriteGpioPinsUsingMask Driver che supporta le letture devono implementare una delle due funzionidi callback xxx CLIENT_ReadGpioPins Xxx nell'elenco precedente. Un driver che supporta le scritture deve implementare una delle due funzioni di callback Xxx CLIENT_WriteGpioPinsnell'elenco precedente.

Un driver che implementa CLIENT_ReadGpioPinsUsingMask, CLIENT_WriteGpioPinsUsingMask o entrambi, deve impostare il flag FormatIoRequestsAsMasks nelle informazioni sul dispositivo fornite dalla funzione di callback CLIENT_QueryControllerBasicInformation. Un driver che implementa CLIENT_ReadGpioPins, CLIENT_WriteGpioPins o entrambi, non deve impostare questo bit di flag. Per altre informazioni, vedere la descrizione del membro Flags in CLIENT_CONTROLLER_BASIC_INFORMATION.

Un driver del controller GPIO non è necessario per supportare gli interruzioni GPIO. Tuttavia, se il pacchetto di registrazione include una delle funzioni di callback correlate all'interruzione seguenti, il pacchetto deve includere tutte le funzioni di callback seguenti:

CLIENT_EnableInterrupt CLIENT_DisableInterrupt CLIENT_MaskInterrupts CLIENT_QueryActiveInterrupts CLIENT_UnmaskInterrupt driver A che supporta la maschera di interruzioni deve implementare la funzione di callback CLIENT_MaskInterrupts. Un driver che supporta la query di interruzioni attive deve implementare la funzione di callback CLIENT_QueryActiveInterrupts .

La funzione di callback CLIENT_ClearActiveInterrupts è un caso speciale. Se l'hardware del controller GPIO cancella automaticamente gli interruzioni attivi quando vengono letti, la funzione CLIENT_ClearActiveInterrupts non è necessaria e il puntatore della funzione corrispondente nel pacchetto di registrazione deve essere impostato su NULL. Tuttavia, se gli interruzioni attive non vengono cancellati automaticamente quando vengono letti e se le funzioni di callback correlate all'interruzione nell'elenco precedente vengono fornite nel pacchetto di registrazione, la funzione CLIENT_ClearActiveInterrupts deve essere inclusa nel pacchetto. Per indicare che l'hardware cancella automaticamente gli interruzioni attivi quando vengono letti, il driver imposta il bit del flag ActiveInterruptsAutoClearOnRead nelle informazioni sul dispositivo fornite dalla funzione di callback CLIENT_QueryControllerBasicInformation. Per altre informazioni, vedere la descrizione del membro Flags in CLIENT_CONTROLLER_BASIC_INFORMATION.

Se il driver del controller GPIO supporta gli interruzioni GPIO, il pacchetto di registrazione può, come opzione, includere la funzione di callback seguente:

CLIENT_QueryEnabledInterrupts GpioClx supporta la funzione CLIENT_QueryEnabledInterrupts a partire da Windows 8.1.

Un driver che supporta la gestione della potenza a livello di componente deve implementare entrambe le funzioni di callback seguenti:

CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext Per indicare che l'hardware supporta la gestione della potenza a livello di componente, il driver imposta il flag BankIdlePowerMgmtSupported nelle informazioni sul dispositivo fornite dalla funzione di callback CLIENT_QueryControllerBasicInformation. Per altre informazioni, vedere la descrizione del membro Flags in CLIENT_CONTROLLER_BASIC_INFORMATION.

Le funzioni di CLIENT_PreProcessControllerInterrupt, CLIENT_ReconfigureInterrupt e CLIENT_ControllerSpecificFunction callback sono facoltative e sono supportate da GpioClx per risolvere i problemi specifici dell'hardware in alcune implementazioni del controller GPIO. Solo i driver del controller GPIO con requisiti speciali implementano queste funzioni.