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.
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
- Il driver client chiama UsbPm_Register per registrare le funzioni di callback del driver.
- 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.
- 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
- 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.
- Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con HubArrivalRemoval come dati dell'evento. La chiamata contiene anche gli handle dell'hub.
- 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
- 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.
- Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con ConnectorStateChange come dati dell'evento. La chiamata contiene anche gli handle del connettore.
- La routine di completamento del driver client viene chiamata anche e viene eseguita di conseguenza.
- 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
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.
Gestione criteri inoltra la richiesta a Gestione connettori USB (UCM). Il driver client per UcmCx esegue l'azione appropriata per modificare lo stato richiesto.
Il EVT_USBPM_EVENT_CALLBACK del driver client viene richiamato con ConnectorStateChange come dati dell'evento. La chiamata contiene anche l'handle del connettore.
La routine di completamento del driver client viene chiamata anche e viene eseguita di conseguenza.
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
- 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.
- 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.
- 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
- Il driver client chiama UsbPm_Deregister quando il driver non necessita più di notifiche.
- Gestione criteri contrassegna la registrazione del client come deregistered e non richiama EVT_USBPM_EVENT_CALLBACK callback.