Funciones de devolución de llamada GPIO opcionales y necesarias
Un controlador de E/S de uso general (GPIO) llama al método GPIO_CLX_RegisterClient para registrarse como cliente de la extensión del marco GPIO (GpioClx). Durante esta llamada, el controlador pasa un paquete de registro a GpioClx que especifica una lista de funciones de devolución de llamada de eventos implementadas por el controlador. GpioClx llama a estas funciones de devolución de llamada para configurar el hardware del controlador GPIO, realizar operaciones de E/S y administrar interrupciones. GpioClx requiere un controlador de controlador GPIO para implementar determinadas funciones de devolución de llamada, pero la compatibilidad con otras funciones de devolución de llamada es opcional.
El paquete de registro es una estructura GPIO_CLIENT_REGISTRATION_PACKET . Si el controlador del controlador GPIO implementa una función de devolución de llamada determinada, escribe el puntero de función en esa función de devolución de llamada en el miembro correspondiente de esta estructura. O bien, para indicar que no se admite una función de devolución de llamada determinada, el controlador escribe NULL en el miembro correspondiente.
Las siguientes funciones de devolución de llamada deben incluirse en el paquete de registro:
CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_ReleaseController Si falta alguna función de devolución de llamada en la lista anterior (es decir, si el puntero de función correspondiente en el paquete de registro es NULL), se produce un error en el método GPIO_CLX_RegisterClient .
No se requiere un controlador de controlador GPIO para admitir la lectura o escritura en patillas de E/S de GPIO, que son patillas configuradas como entradas de datos o salidas de datos. (Un controlador GPIO sin patillas de E/S todavía podría retransmitir solicitudes de interrupción desde dispositivos periféricos). Sin embargo, si el paquete de registro incluye cualquiera de las siguientes funciones de devolución de llamada relacionadas con E/S, el paquete debe incluir las siguientes funciones de devolución de llamada:
CLIENT_ConnectIoPins CLIENT_DisconnectIoPins Además, si el paquete de registro incluye las dos funciones de devolución de llamada de la lista anterior, el controlador también debe admitir la lectura de patillas de E/S de GPIO, escribir en patillas de E/S de GPIO o ambas. En concreto, el paquete de registro debe incluir al menos una función de devolución de llamada en la lista siguiente:
CLIENT_ReadGpioPins o CLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPins o CLIENT_WriteGpioPinsUsingMask Un controlador que admita lecturas debe implementar una de las dos funciones de devolución de llamada xxx de CLIENT_ReadGpioPinsen la lista anterior. Un controlador que admita escrituras debe implementar una de las dos funciones de devolución de llamada xxx CLIENT_WriteGpioPinsen la lista anterior.
Un controlador que implemente CLIENT_ReadGpioPinsUsingMask, CLIENT_WriteGpioPinsUsingMask o ambos, debe establecer el bit de marca FormatIoRequestsAsMasks en la información del dispositivo proporcionada por la función de devolución de llamada de CLIENT_QueryControllerBasicInformation . Un controlador que implementa CLIENT_ReadGpioPins, CLIENT_WriteGpioPins o ambos, no debe establecer este bit de marca. Para obtener más información, vea la descripción del miembro Flags en CLIENT_CONTROLLER_BASIC_INFORMATION.
No se requiere un controlador de controlador GPIO para admitir interrupciones de GPIO. Sin embargo, si el paquete de registro incluye cualquiera de las siguientes funciones de devolución de llamada relacionadas con interrupciones, el paquete debe incluir todas las siguientes funciones de devolución de llamada:
CLIENT_EnableInterruptCLIENT_DisableInterrupt CLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt Un controlador que admita el enmascaramiento de interrupciones debe implementar la función de devolución de llamada de CLIENT_MaskInterrupts. Un controlador que admita la consulta de interrupciones activas debe implementar la función de devolución de llamada CLIENT_QueryActiveInterrupts .
La función de devolución de llamada CLIENT_ClearActiveInterrupts es un caso especial. Si el hardware del controlador GPIO borra automáticamente las interrupciones activas cuando se leen, la función CLIENT_ClearActiveInterrupts no es necesaria y el puntero de función correspondiente del paquete de registro debe establecerse en NULL. Sin embargo, si las interrupciones activas no se borran automáticamente cuando se leen, y si las funciones de devolución de llamada relacionadas con interrupciones de la lista anterior se proporcionan en el paquete de registro, la función CLIENT_ClearActiveInterrupts debe incluirse en el paquete. Para indicar que el hardware borra automáticamente las interrupciones activas cuando se leen, el controlador establece el bit de marca ActiveInterruptsAutoClearOnRead en la información del dispositivo proporcionada por la función de devolución de llamada CLIENT_QueryControllerBasicInformation . Para obtener más información, vea la descripción del miembro Flags en CLIENT_CONTROLLER_BASIC_INFORMATION.
Si el controlador del controlador GPIO admite interrupciones de GPIO, el paquete de registro puede, como opción, incluir la siguiente función de devolución de llamada:
CLIENT_QueryEnabledInterrupts GpioClx admite la función CLIENT_QueryEnabledInterrupts a partir de Windows 8.1.
Un controlador que admita la administración de energía de nivel de componente debe implementar las siguientes funciones de devolución de llamada:
CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext Para indicar que el hardware admite la administración de energía de nivel de componente, el controlador establece el bit de marca BankIdlePowerMgmtSupported en la información del dispositivo proporcionada por la función de devolución de llamada CLIENT_QueryControllerBasicInformation . Para obtener más información, vea la descripción del miembro Flags en CLIENT_CONTROLLER_BASIC_INFORMATION.
Las funciones de devolución de llamada CLIENT_PreProcessControllerInterrupt, CLIENT_ReconfigureInterrupt y CLIENT_ControllerSpecificFunction son opcionales y son compatibles con GpioClx para solucionar problemas específicos del hardware en algunas implementaciones del controlador GPIO. Solo los controladores de controlador GPIO con requisitos especiales implementan estas funciones.