Scrivere un driver client USB Type-C Policy Manager

Microsoft ha fornito USB Type-C Policy Manager monitora le attività dei connettori USB Type-C. Windows, versione 1809, introduce un set di interfacce di programmazione che è possibile usare per scrivere un driver client in Policy Manager (denominato driver client PM in questo argomento). Il driver client può partecipare alle decisioni dei criteri per i connettori USB Type-C. Con questo set è possibile scegliere di scrivere un driver di esportazione in modalità kernel o un driver in modalità utente.

Gestione criteri ottiene e coordina le informazioni da USB Connector Manager (UCM), controller host USB e funzione USB e il driver client PM. Quando è necessaria la notifica dell'interfaccia utente, Gestione criteri invia la richiesta a System Shell.

Diagramma a blocchi architechtural per USB Policy Manager.

Per una visualizzazione completa dei driver, vedere Architettura: progettazione USB Type-C per un sistema Windows.

API importanti

Le API PM vengono dichiarate nell'intestazione Usbpmapi.h .

1: Registrazione client

  1. Il driver client chiama UsbPm_Register per registrare le funzioni di callback del driver.
  2. Il driver client attende un evento da Policy Manager.

    Una chiamata UsbPm_Register riuscita non garantisce che il driver client abbia richiesto l'accesso. Quando Gestione criteri è pronto, il EVT_USBPM_EVENT_CALLBACK del driver viene richiamato con PolicyManagerArrival come dati dell'evento che indica l'accesso effettivo concesso.

  3. La chiamata UsbPm_Register restituisce l'handle di registrazione.

    Il driver client può ricevere EVT_USBPM_EVENT_CALLBACK anche prima che UsbPm_Register restituisca.

2: Arrivo hub

  1. Quando arriva un dispositivo UCMCX, POlicy Manager riceve una notifica e tiene traccia di tutti gli handle dell'hub insieme alle proprietà e agli stati di tutti i connettori in ogni hub.
  2. Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con HubArrivalRemoval come dati dell'evento. La chiamata contiene anche gli handle dell'hub.
  3. Nell'implementazione del driver client di EVT_USBPM_EVENT_CALLBACK, il driver chiama UsbPm_RetrieveHubProperties per ottenere il numero di connettori nell'hub e quindi chiama UsbPm_RetrieveConnectorProperties e UsbPm_RetrieveConnectorState per ottenere altre informazioni su ogni connettore.

3: Modifica dello stato del connettore

  1. A causa di una modifica dello stato del connettore, ad esempio, collegamento/scollegamento type-C, contratto PD negoziato, Policy Manager aggiorna le informazioni sullo stato per connettore.
  2. Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con ConnectorStateChange come dati dell'evento. La chiamata contiene anche gli handle del connettore.
  3. La routine di completamento del driver client viene chiamata anche e viene eseguita di conseguenza.
  4. Nell'implementazione del driver client di EVT_USBPM_EVENT_CALLBACK, il driver chiama UsbPm_RetrieveConnectorProperties. Usando l'handle del connettore specificato, il driver ottiene lo stato del connettore più recente, lo controlla e può decidere di aggiornare la copia locale.

4: Modifica avviata dal driver client

  1. Per richiedere una modifica, il driver client chiama UsbPm_AssignConnectorPowerLevel.

    Il driver client può chiamare questa funzione all'interno del callback EVT_USBPM_EVENT_CALLBACK registrato usando UsbPm_Register.

  2. Gestione criteri inoltra la richiesta a Gestione connettori USB (UCM). Il driver client per UcmCx esegue l'azione appropriata per modificare lo stato richiesto.

  3. Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con ConnectorStateChange come dati dell'evento. La chiamata contiene anche l'handle del connettore.

  4. La routine di completamento del driver client viene chiamata anche e viene eseguita di conseguenza.

  5. All'interno del callback, il driver client chiama UsbPm_RetrieveConnectorState con l'handle del connettore specificato per ottenere lo stato del connettore più recente, controllarlo e può decidere di aggiornarne la copia locale.

5: Rimozione dell'hub

  1. UCM notifica a Gestione criteri quando viene rimosso un dispositivo UcmCx (non un singolo connettore in un dispositivo UcmCx). Policy Manager rimuove l'hub dalla raccolta dell'hub.
  2. L'implementazione EVT_USBPM_EVENT_CALLBACK del driver client viene richiamata con HubRemoval come dati dell'evento. La chiamata contiene anche l'handle dell'hub.
  3. Nell'implementazione del driver client di EVT_USBPM_EVENT_CALLBACK, il driver client esegue attività di pulizia per l'hub e i connettori rimossi. Il driver può chiamare UsbPm_RetrieveHubProperties e UsbPm_RetrieveConnectorProperties per ottenere le proprietà di hub e connettori.

6: Registrazione client

  1. Il driver client chiama UsbPm_Deregister quando il driver non necessita più di notifiche.
  2. Gestione criteri contrassegna la registrazione del client come deregistered e non richiama EVT_USBPM_EVENT_CALLBACK callback.

Vedere anche