可选和必需的 GPIO 回调函数

常规用途 I/O (GPIO) 控制器驱动程序调用 GPIO_CLX_RegisterClient 方法,以注册为 gpioClx) gpioClx (GPIO 框架扩展的客户端。 在此调用期间,驱动程序将注册数据包传递给 GpioClx,该数据包指定由驱动程序实现的事件回调函数的列表。 GpioClx 调用这些回调函数来配置 GPIO 控制器硬件、执行 I/O 操作和管理中断。 GpioClx 需要 GPIO 控制器驱动程序来实现某些回调函数,但对其他回调函数的支持是可选的。

注册数据包是一种 GPIO_CLIENT_REGISTRATION_PACKET 结构。 如果 GPIO 控制器驱动程序实现特定的回调函数,则会将指向该回调函数的函数指针写入到此结构的相应成员中。 或者,为了指示不支持特定的回调函数,驱动程序将 NULL 写入相应的成员。

注册数据包中必须包含以下回调函数:

CLIENT_PrepareControllerCLIENT_QueryControllerBasicInformationCLIENT_StartControllerCLIENT_StopControllerCLIENT_ReleaseController 如果前面列表中缺少任何回调函数 (即,如果注册数据包中的相应函数指针为 NULL) , GPIO_CLX_RegisterClient 方法将失败。

GPIO 控制器驱动程序不需要支持从 GPIO I/O 引脚读取或写入,GPIO I/O 引脚是配置为数据输入或数据输出的引脚。 (没有 I/O 引脚的 GPIO 控制器仍可以中继来自外围设备的中断请求。) 但是,如果注册数据包包含以下 I/O 相关回调函数之一,则数据包必须包含以下两个回调函数:

CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins 此外,如果注册数据包包含上述列表中的两个回调函数,则驱动程序必须另外支持从 GPIO I/O 引脚读取和/或写入 GPIO I/O 引脚。 具体而言,注册数据包必须在以下列表中至少包含一个回调函数:

CLIENT_ReadGpioPinsCLIENT_ReadGpioPinsUsingMaskCLIENT_WriteGpioPinsCLIENT_WriteGpioPinsUsingMask 支持读取的驱动程序必须实现前面列表中的两 个 CLIENT_ReadGpioPinsXxx 回调函数之一。 支持写入的驱动程序必须实现前面列表中的两 个CLIENT_WriteGpioPinsXxx 回调函数之一。

实现CLIENT_ReadGpioPinsUsingMask/或CLIENT_WriteGpioPinsUsingMask的驱动程序必须在CLIENT_QueryControllerBasicInformation回调函数提供的设备信息中设置 FormatIoRequestsAsMasks 标志位。 实现 CLIENT_ReadGpioPins/或CLIENT_WriteGpioPins的驱动程序不得设置此标志位。 有关详细信息,请参阅 CLIENT_CONTROLLER_BASIC_INFORMATION 中的 Flags 成员的说明。

无需 GPIO 控制器驱动程序即可支持 GPIO 中断。 但是,如果注册数据包包含以下任何与中断相关的回调函数,则数据包必须包含以下所有回调函数:

CLIENT_EnableInterruptCLIENT_DisableInterruptCLIENT_MaskInterruptsCLIENT_QueryActiveInterruptsCLIENT_UnmaskInterrupt 支持中断掩码的驱动程序必须实现 CLIENT_MaskInterrupts 回调函数。 支持查询活动中断的驱动程序必须实现 CLIENT_QueryActiveInterrupts 回调函数。

CLIENT_ClearActiveInterrupts回调函数是一种特殊情况。 如果 GPIO 控制器硬件在读取活动中断时自动清除活动中断,则不需要 CLIENT_ClearActiveInterrupts 函数,并且注册数据包中的相应函数指针应设置为 NULL。 但是,如果在读取活动中断时未自动清除,并且前面列表中的与中断相关的回调函数在注册数据包中提供,则必须在数据包中包含 CLIENT_ClearActiveInterrupts 函数。 为了指示硬件在读取活动中断时自动清除活动中断,驱动程序在CLIENT_QueryControllerBasicInformation回调函数提供的设备信息中设置 ActiveInterruptsAutoClearOnRead 标志位。 有关详细信息,请参阅 CLIENT_CONTROLLER_BASIC_INFORMATION 中的 Flags 成员的说明。

如果 GPIO 控制器驱动程序支持 GPIO 中断,则注册数据包作为选项可以包含以下回调函数:

CLIENT_QueryEnabledInterruptsGpioClx 从 Windows 8.1 开始支持 CLIENT_QueryEnabledInterrupts 函数。

支持 组件级电源管理的 驱动程序必须实现以下两个回调函数:

CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext 为了指示硬件支持组件级电源管理,驱动程序在CLIENT_QueryControllerBasicInformation回调函数提供的设备信息中设置 BankIdlePowerMgmtSupported 标志位。 有关详细信息,请参阅 CLIENT_CONTROLLER_BASIC_INFORMATION 中的 Flags 成员的说明。

CLIENT_PreProcessControllerInterruptCLIENT_ReconfigureInterruptCLIENT_ControllerSpecificFunction回调函数是可选的,GpioClx 支持用于解决某些 GPIO 控制器实现中特定于硬件的问题。 只有具有特殊要求的 GPIO 控制器驱动程序才能实现这些功能。