Driver lato dispositivo USB in Windows
Descrive l'architettura dello stack di funzioni USB.
In un dispositivo USB, lo stack di funzioni USB fa riferimento a un gruppo di driver enumerati da Plug and Play Manager, quando ACPI crea un oggetto dispositivo fisico del dispositivo USB (PDO).
In un singolo dispositivo di configurazione, un dispositivo USB può definire una o più interfacce. Ad esempio, media transfer protocol (MTP) per il trasferimento di file da e verso il dispositivo. Un dispositivo USB composito può supportare più interfacce in una singola configurazione. Lo stack di funzioni USB crea PDO per ogni interfaccia e PnP Manager carica il driver di classe che crea l'oggetto dispositivo funzione (FDO) per tale interfaccia.
Lo stack di funzioni USB è concettualizzato in questa immagine:
Applicazioni e servizi
- Tutte le richieste in modalità utente vengono inviate al driver della classe in modalità kernel fornito da Microsoft GenericUSBFn.sys. È possibile creare un servizio in modalità utente che comunica con GenericUSBFn.sys inviando codici di controllo I/O (IOCTLs) definiti in genericusbfnioctl.h. Per altre informazioni su questi IOCTL, vedere Comunicazione con GenericUSBFn.sys da un servizio in modalità utente
Driver della classe di funzioni USB
Un driver della classe di funzione USB implementa la funzionalità di un'interfaccia specifica (o gruppo di interfacce) nel dispositivo USB. MTP e IpOverUsb sono esempi di driver di classe forniti dal sistema. Il driver di classe può essere implementato esclusivamente come driver in modalità kernel oppure può essere un servizio in modalità utente associato al driver di classe fornito dal sistema GenericUSBFn.sys.
Un driver della classe di funzione invia richieste al controller usando il driver della classe di funzione USB alle interfacce di programmazione UFX.
Estensione della classe di funzioni USB (UFX)
L'estensione della classe di funzione USB (UFX) è un'estensione fornita dal sistema a Kernel-Mode Driver Framework (KMDF). USB è un bus standard e dispone di alcune funzionalità e funzionalità necessarie. UFX è responsabile dell'implementazione della logica della funzione USB comune a tutti i controller di funzione USB e alla gestione e/o all'invio di richieste dai driver della classe di funzione USB. In particolare, UFX gestisce il processo di enumerazione del dispositivo ed elaborazione dei trasferimenti di controllo standard. Per eseguire alcune di queste operazioni, UFX deve conoscere le funzionalità del bus. Queste funzionalità vengono segnalate a UFX quando viene stabilita l'interfaccia di estensione della classe.
UFX espone IOCTLs standard che i livelli superiori (driver della classe di funzione USB e servizi in modalità utente) possono usare per inviare richieste al controller. Inoltre, UFX invia una notifica ai livelli superiori sulle richieste standard ricevute dall'host.
Driver client di funzioni USB
UFX fornisce un'interfaccia astratta che funziona in modo coerente tra controller diversi. Tuttavia, i controller hanno funzionalità diverse, con limitazioni come il numero di endpoint, i tipi di endpoint, bassa potenza, riattivazione remota. Ad esempio, alcuni controller supportano DMA, mentre altri no. Alcuni controller implementano flussi nell'hardware, mentre altri controller prevedono che il driver gestisca i flussi. Per questi motivi, solo le funzionalità comuni vengono gestite in UFX. Trasferimenti, risparmio energia, supporto del flusso e altre funzionalità che variano da controller a controller vengono gestiti dal driver client.
Il driver client della funzione USB è responsabile dell'implementazione di operazioni specifiche del controller. Questi includono l'implementazione di trasferimenti di dati degli endpoint, modifiche dello stato del dispositivo USB (reimpostazione, sospensione, ripresa), rilevamento di collegamento/scollegamento, rilevamento di porte/caricabatterie. Il driver client è anche responsabile della gestione del risparmio energia e degli eventi PnP.
Il driver client di funzione viene scritto come driver Kernel-Mode Driver Framework (KMDF) usando il driver della classe di funzione USB per le interfacce di programmazione UFX.
Microsoft fornisce driver client di funzioni predefiniti (UfxChipidea.sys, Ufxsynopsys.sys) per i controller ChipIdea e Synopsys.
Driver filtro usb inferiore
Un driver di filtro usb inferiore supporta il rilevamento dei caricabatterie se il controller funzione usa i driver Synopsys e ChipIdea in-box. Il driver filtro gestisce la ricarica USB a partire dal rilevamento delle porte USB. Deve pubblicare un GUID per ogni tipo di caricabatterie supportato e un elenco delle proprietà del caricabatterie. Se un caricabatterie specifico è configurabile, il driver di filtro USB inferiore definisce un elenco di PropertyID supportati e i relativi tipi di valore che possono essere inviati, per configurare il caricabatterie. Il driver notifica anche lo stack di batteria quando può iniziare a caricare e la quantità massima di corrente che il dispositivo può disegnare. Per i driver client diversi da Synopsys e ChipIdea, la logica di ricarica può essere implementata nel driver client.
Un driver di classe funzione invia una richiesta a UFX usando interfacce di programmazione per supportare i caricabatterie proprietari.