Partilhar via


Escrever um driver de cliente USB Type-C Policy Manager

O USB Type-C Policy Manager fornecido pela Microsoft monitoriza as atividades dos conectores Type-C USB. Windows, versão 1809, apresenta um conjunto de interfaces de programação que você pode usar para escrever um driver de cliente para o Policy Manager (chamado de driver de cliente PM neste tópico). O driver do cliente pode participar das decisões de política para conectores Type-C USB. Com esse conjunto, você pode optar por escrever um driver de exportação de modo kernel ou um driver de modo de usuário.

O Policy Manager obtém e coordena as informações do USB Connector Manager (UCM), do controlador de host USB e da função USB e do driver do cliente PM. Quando a notificação da interface do usuário é necessária, o Policy Manager envia a solicitação para o Shell do sistema.

Diagrama de blocos arquitetónico para o USB Policy Manager.

Para obter uma visão completa dos drivers, consulte Arquitetura: design USB Type-C para um sistema Windows.

APIs importantes

Os APIs PM são declarados no cabeçalho Usbpmapi.h.

1: Registo de Cliente

  1. O driver cliente chama UsbPm_Register para registrar as funções de retorno de chamada do driver.
  2. O driver do cliente aguarda um evento do Policy Manager.

    Uma chamada UsbPm_Register bem-sucedida não garante que o driver do cliente tenha solicitado acesso. Quando o Policy Manager estiver pronto, o EVT_USBPM_EVENT_CALLBACK do driver será invocado com PolicyManagerArrival como os dados de evento que indicam o acesso real concedido.

  3. A chamada UsbPm_Register retorna o identificador de registro.

    O controlador cliente pode receber EVT_USBPM_EVENT_CALLBACK mesmo antes de UsbPm_Register retornar.

2: Chegada ao Hub

  1. Quando um dispositivo UCMCX chega, o POlicy Manager é notificado e controla todas as alças de hub, juntamente com as propriedades e estados de todos os conectores em cada hub.
  2. O EVT_USBPM_EVENT_CALLBACK do driver do cliente é invocado com HubArrivalRemoval como os dados do evento. A chamada também contém os identificadores de hub.
  3. Na implementação do driver cliente de EVT_USBPM_EVENT_CALLBACK, o driver chama UsbPm_RetrieveHubProperties para obter o número de conectores no hub e, em seguida, chama UsbPm_RetrieveConnectorProperties e UsbPm_RetrieveConnectorState para obter mais informações sobre cada conector.

3: Alteração do estado do conector

  1. Devido a uma alteração no estado do conector, como a anexação/desanexação de Type-C ou a negociação do contrato PD, o Gerenciador de Políticas atualiza as informações de estado para cada conector.
  2. O EVT_USBPM_EVENT_CALLBACK do driver do cliente é invocado com ConnectorStateChange como os dados do evento. A chamada também contém os manípulos do conector.
  3. A rotina de conclusão do driver de cliente também é chamada e age de acordo.
  4. Na implementação do driver cliente de EVT_USBPM_EVENT_CALLBACK, o driver chama UsbPm_RetrieveConnectorProperties. Usando a alça de conector fornecida, o driver obtém o estado mais recente do conector, inspeciona-o e pode decidir atualizar sua cópia local.

4: Alteração iniciada pelo driver do cliente

  1. Para solicitar uma alteração, o driver do cliente chama UsbPm_AssignConnectorPowerLevel.

    O driver do cliente pode chamar esta função dentro do callback EVT_USBPM_EVENT_CALLBACK registado usando UsbPm_Register.

  2. O Policy Manager encaminha a solicitação para o USB Connector Manager (UCM). O driver do cliente para UcmCx executa a ação apropriada para alterar o estado solicitado.

  3. O EVT_USBPM_EVENT_CALLBACK do driver do cliente é invocado com ConnectorStateChange como os dados do evento. A chamada também contém o identificador do conector.

  4. A rotina de conclusão do controlador cliente também é chamada e age de acordo.

  5. Dentro do retorno de chamada, o driver do cliente chama UsbPm_RetrieveConnectorState com o identificador de conector fornecido para obter o estado mais recente do conector, inspeciona-o e pode decidir atualizar sua cópia local.

5: Remoção do Hub

  1. O UCM notifica o Policy Manager quando um dispositivo UcmCx (não um conector individual em um dispositivo UcmCx) é removido. O Policy Manager remove o hub de sua coleção de hubs.
  2. A implementação EVT_USBPM_EVENT_CALLBACK do driver de cliente é invocada com HubRemoval como os dados do evento. A chamada também contém o identificador de hub.
  3. Na implementação do driver cliente de EVT_USBPM_EVENT_CALLBACK, o driver cliente executa tarefas de limpeza para o hub e conectores que estão sendo removidos. O driver pode chamar UsbPm_RetrieveHubProperties e UsbPm_RetrieveConnectorProperties para obter as propriedades do hub e conectores.

6: Cancelamento de Registo de Cliente

  1. O driver do cliente chama UsbPm_Deregister quando o driver não precisa mais de notificações.
  2. O Gerente de Políticas marca o registo do identificador do cliente como anulado e não invoca o callback EVT_USBPM_EVENT_CALLBACK.

Ver também