常规用途 I/O (GPIO) 控制器驱动程序调用 GPIO_CLX_RegisterClient 方法注册为 GPIO 框架扩展 (GpioClx) 的客户端。 在此调用期间,驱动程序将一个注册包传递给 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 引脚读取或写入,这些引脚是配置为数据输入或数据输出的引脚。 (没有 I/O 引脚的 GPIO 控制器仍可以中继来自外围设备的中断请求。但是,如果注册数据包包括以下与 I/O 相关的回调函数之一,则数据包必须包括以下两个回调函数:
CLIENT_ConnectIoPinsCLIENT_DisconnectIoPins 此外,如果注册数据包包含上述列表中的两个回调函数,驱动程序必须额外支持从 GPIO I/O 引脚读取、写入 GPIO I/O 引脚或两者。 具体而言,注册数据包必须在以下列表中至少包含一个回调函数:
CLIENT_ReadGpioPins或CLIENT_ReadGpioPinsUsingMask、CLIENT_WriteGpioPins或CLIENT_WriteGpioPinsUsingMask。支持读取的驱动程序必须实现上述列表中的CLIENT_ReadGpioPins Xxx 回调函数之一。 支持写入的驱动程序必须实现上述列表中的两个 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_QueryEnabledInterrupts GpioClx 支持从 Windows 8.1 开始 CLIENT_QueryEnabledInterrupts 函数。
支持 组件级电源管理的 驱动程序必须实现以下两个回调函数:
CLIENT_RestoreBankHardwareContextCLIENT_SaveBankHardwareContext若要指示硬件支持组件级电源管理,驱动程序在CLIENT_QueryControllerBasicInformation回调函数提供的设备信息中设置 BankIdlePowerMgmtSupported 标志位。 有关详细信息,请参阅 CLIENT_CONTROLLER_BASIC_INFORMATION 中的 Flags 成员的说明。
CLIENT_PreProcessControllerInterrupt、CLIENT_ReconfigureInterrupt和CLIENT_ControllerSpecificFunction回调函数是可选的,GpioClx 支持解决某些 GPIO 控制器实现中特定于硬件的问题。 只有具有特殊要求的 GPIO 控制器驱动程序才能实现这些功能。