编写 USB 类型 C 策略管理器客户端驱动程序

Microsoft 提供的 USB 类型 C 策略管理器监视 USB 类型 C 连接器的活动。 Windows 版本 1809 引入了一组编程接口,可用于在本主题) 中将客户端驱动程序写入策略管理器 (称为 PM 客户端驱动程序 。 客户端驱动程序可以参与 USB 类型 C 连接器的策略决策。 使用此集,可以选择编写内核模式导出驱动程序或用户模式驱动程序。

策略管理器从 USB 连接器管理器 (UCM) 、USB 主机控制器和 USB 功能以及 PM 客户端驱动程序获取和协调信息。 需要 UI 通知时,策略管理器会将请求发送到系统 Shell。

USB 策略管理器的体系结构框图。

有关驱动程序的完整视图,请参阅 体系结构:Windows 系统的 USB 类型 C 设计

重要的 API

PM API 在 Usbpmapi.h 标头中声明。

1:客户端注册

  1. 客户端驱动程序调用 UsbPm_Register 来注册驱动程序的回调函数。
  2. 客户端驱动程序等待来自策略管理器的事件。

    成功的 UsbPm_Register 调用不保证客户端驱动程序已请求访问权限。 策略管理器准备就绪后,驱动程序 EVT_USBPM_EVENT_CALLBACK 使用 PolicyManagerArrival 作为指示授予的实际访问权限的事件数据进行调用。

  3. UsbPm_Register调用返回注册句柄。

    客户端驱动程序可能在 UsbPm_Register 返回之前收到 EVT_USBPM_EVENT_CALLBACK

2:中心到达

  1. 当 UCMCX 设备到达时,POlicy Manager 会收到通知,并跟踪所有中心句柄以及每个中心上所有连接器的属性和状态。
  2. 使用 HubArrivalRemoval 作为事件数据调用客户端驱动程序的EVT_USBPM_EVENT_CALLBACK。 调用还包含中心句柄。
  3. 在客户端驱动程序的 EVT_USBPM_EVENT_CALLBACK 实现中,驱动程序调用 UsbPm_RetrieveHubProperties 以获取中心上的连接器数,然后调用 UsbPm_RetrieveConnectorPropertiesUsbPm_RetrieveConnectorState 以获取有关每个连接器的详细信息。

3:连接器状态更改

  1. 由于连接器状态更改(例如,Type-C 附加/分离、PD 协定协商),策略管理器会更新每个连接器的状态信息。
  2. 使用 ConnectorStateChange 作为事件数据调用客户端驱动程序的EVT_USBPM_EVENT_CALLBACK。 调用还包含连接器句柄。
  3. 客户端驱动程序的完成例程也会被调用,并相应地执行操作。
  4. 在客户端驱动程序的 EVT_USBPM_EVENT_CALLBACK 实现中,驱动程序调用 UsbPm_RetrieveConnectorProperties。 通过使用给定的连接器句柄,驱动程序获取最新的连接器状态,对其进行检查,并可能决定更新其本地副本。

4:客户端驱动程序发起的更改

  1. 若要请求更改,客户端驱动程序调用 UsbPm_AssignConnectorPowerLevel

    客户端驱动程序可以在使用 UsbPm_Register 注册的EVT_USBPM_EVENT_CALLBACK回调中调用此函数。

  2. 策略管理器将请求转发到 UCM) (USB 连接器管理器。 UcmCx 的客户端驱动程序会执行相应的操作来更改请求的状态。

  3. 使用 ConnectorStateChange 作为事件数据调用客户端驱动程序的EVT_USBPM_EVENT_CALLBACK。 调用还包含连接器句柄。

  4. 客户端驱动程序的完成例程也会被调用,并相应地执行操作。

  5. 在回调中,客户端驱动程序使用给定的连接器句柄调用 UsbPm_RetrieveConnectorState 以获取最新的连接器状态,对其进行检查,并可能决定更新其本地副本。

5:删除中心

  1. 当 UcmCx 设备 (UcmCx 设备上的单个连接器) 被删除时,UCM 会通知策略管理器。 策略管理器从中心集合中删除中心。
  2. 使用 HubRemoval 作为事件数据调用客户端驱动程序的EVT_USBPM_EVENT_CALLBACK实现。 调用还包含中心句柄。
  3. 在客户端驱动程序的 EVT_USBPM_EVENT_CALLBACK 实现中,客户端驱动程序对要删除的中心和连接器执行清理任务。 驱动程序可以调用 UsbPm_RetrieveHubPropertiesUsbPm_RetrieveConnectorProperties 来获取中心和连接器的属性。

6:客户端注销

  1. 当驱动程序不再需要任何通知时,客户端驱动程序调用 UsbPm_Deregister
  2. 策略管理器将客户端句柄注册标记为已取消注册,并且不会调用 EVT_USBPM_EVENT_CALLBACK 回调。

另请参阅