다음을 통해 공유


USB Type-C Policy Manager 클라이언트 드라이버 작성

Microsoft에서 제공하는 USB Type-C 정책 관리자는 USB Type-C 커넥터의 활동을 모니터링합니다. Windows 버전 1809에는 정책 관리자에 클라이언트 드라이버를 작성하는 데 사용할 수 있는 프로그래밍 인터페이스 집합이 도입되었습니다(이 항목에서는 PM 클라이언트 드라이버 라고 함). 클라이언트 드라이버는 USB Type-C 커넥터에 대한 정책 결정에 참여할 수 있습니다. 이 집합을 사용하면 커널 모드 내보내기 드라이버 또는 사용자 모드 드라이버를 작성하도록 선택할 수 있습니다.

정책 관리자는 UCM(USB 커넥터 관리자), USB 호스트 컨트롤러 및 USB 함수 및 PM 클라이언트 드라이버에서 정보를 가져오고 조정합니다. UI 알림이 필요한 경우 정책 관리자는 시스템 셸에 요청을 보냅니다.

USB 정책 관리자에 대한 아키텍처 블록 다이어그램.

드라이버에 대한 전체 보기는 아키텍처: Windows 시스템용 USB Type-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. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACKHubArrivalRemoval 을 이벤트 데이터로 호출합니다. 호출에는 허브 핸들도 포함됩니다.
  3. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 구현에서 드라이버는 UsbPm_RetrieveHubProperties 호출하여 허브의 커넥터 수를 구한 다음 , UsbPm_RetrieveConnectorProperties 호출하고 UsbPm_RetrieveConnectorState 호출하여 각 커넥터에 대한 자세한 정보를 가져옵니다.

3: 커넥터 상태 변경

  1. 커넥터 상태 변경(예: Type-C 연결/분리, PD 계약 협상)으로 인해 Policy Manager는 커넥터별 상태 정보를 업데이트합니다.
  2. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 이벤트 데이터로 ConnectorStateChange 를 사용하여 호출됩니다. 호출에는 커넥터 핸들도 포함됩니다.
  3. 클라이언트 드라이버의 완료 루틴도 호출되고 그에 따라 작업을 수행합니다.
  4. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 구현에서 드라이버는 UsbPm_RetrieveConnectorProperties 호출합니다. 지정된 커넥터 핸들을 사용하여 드라이버는 최신 커넥터 상태를 가져오고 검사하며 로컬 복사본을 업데이트하기로 결정할 수 있습니다.

4: 클라이언트 드라이버에서 시작한 변경 내용

  1. 변경을 요청하려면 클라이언트 드라이버가 UsbPm_AssignConnectorPowerLevel 호출합니다.

    클라이언트 드라이버는 UsbPm_Register 사용하여 등록된EVT_USBPM_EVENT_CALLBACK 콜백 내에서 이 함수를 호출할 수 있습니다.

  2. 정책 관리자는 요청을 UCM(USB 커넥터 관리자)에 전달합니다. UcmCx용 클라이언트 드라이버는 요청된 상태를 변경하기 위해 적절한 작업을 수행합니다.

  3. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 이벤트 데이터로 ConnectorStateChange 를 사용하여 호출됩니다. 호출에는 커넥터 핸들도 포함됩니다.

  4. 클라이언트 드라이버의 완료 루틴도 호출되고 그에 따라 작업을 수행합니다.

  5. 콜백 내에서 클라이언트 드라이버는 지정된 커넥터 핸들을 사용하여 UsbPm_RetrieveConnectorState 호출하여 최신 커넥터 상태를 가져와 검사하고 로컬 복사본을 업데이트할 수 있습니다.

5: 허브 제거

  1. UCM은 UcmCx 디바이스의 개별 커넥터가 아닌 UcmCx 디바이스가 제거될 때 정책 관리자에게 알 수 있습니다. 정책 관리자는 허브 컬렉션에서 허브를 제거합니다.
  2. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 구현은 HubRemoval 을 이벤트 데이터로 사용하여 호출됩니다. 호출에는 허브 핸들도 포함됩니다.
  3. 클라이언트 드라이버의 EVT_USBPM_EVENT_CALLBACK 구현에서 클라이언트 드라이버는 제거되는 허브 및 커넥터에 대해 클린 작업을 수행합니다. 드라이버는 UsbPm_RetrieveHubPropertiesUsbPm_RetrieveConnectorProperties 호출하여 허브 및 커넥터의 속성을 가져올 수 있습니다.

6: 클라이언트 등록 취소

  1. 클라이언트 드라이버는 드라이버에 더 이상 알림이 필요하지 않은 경우 UsbPm_Deregister 호출합니다.
  2. 정책 관리자는 클라이언트 핸들 등록을 등록 취소된 것으로 표시하고 EVT_USBPM_EVENT_CALLBACK 콜백을 호출하지 않습니다.

참고 항목