Drivers USB do lado do dispositivo no Windows
Descreve a arquitetura da pilha de funções USB.
Em um dispositivo USB, a pilha de funções USB refere-se a um grupo de drivers que são enumerados pelo Gerenciador Plug and Play, quando ACPI cria um dispositivo USB objeto de dispositivo físico (PDO).
Em um único dispositivo de configuração, um dispositivo USB pode definir uma ou mais interfaces. Por exemplo, o protocolo MTP (Media Transfer Protocol) para transferir arquivos de e para o dispositivo. Um dispositivo USB composto pode suportar várias interfaces em uma única configuração. A pilha de funções USB cria PDOs para cada interface e o Gerenciador PnP carrega o driver de classe que cria o objeto de dispositivo de função (FDO) para essa interface.
A pilha de funções USB é conceituada nesta imagem:
Aplicativos e serviços
- Todas as solicitações de modo de usuário são enviadas para o GenericUSBFn.sys de driver de classe de modo kernel fornecido pela Microsoft. Você pode criar um serviço de modo de usuário que se comunica com GenericUSBFn.sys enviando códigos de controle de E/S (IOCTLs), conforme definido em genericusbfnioctl.h. Para obter mais informações sobre essas IOCTLs, consulte Comunicando-se com GenericUSBFn.sys de um serviço de modo de usuário
Driver de classe de função USB
Um driver de classe de função USB implementa a funcionalidade de uma interface específica (ou grupo de interfaces) no dispositivo USB. MTP e IpOverUsb são exemplos de drivers de classe fornecidos pelo sistema. O driver de classe pode ser implementado puramente como um driver de modo kernel, ou pode ser um serviço de modo de usuário emparelhado com o driver de classe fornecido pelo sistema GenericUSBFn.sys.
Um driver de classe de função envia solicitações para o controlador usando o driver de classe de função USB para interfaces de programação UFX.
Extensão de classe de função USB (UFX)
A extensão de classe de função USB (UFX) é uma extensão fornecida pelo sistema para o Kernel-Mode Driver Framework (KMDF). USB é um barramento padrão e tem algumas funcionalidades e capacidades necessárias. A UFX é responsável por implementar a lógica de função USB que é comum a todos os controladores de função USB e manipular e/ou despachar solicitações de drivers de classe de função USB. Em particular, o UFX lida com o processo de enumeração do dispositivo e processamento de transferências de controle padrão. Para realizar algumas dessas operações, a UFX precisa conhecer as capacidades do barramento. Esses recursos são relatados à UFX quando a interface de extensão de classe é estabelecida.
O UFX expõe IOCTLs padrão que as camadas superiores (driver de classe de função USB e serviços de modo de usuário) podem usar para enviar solicitações ao controlador. Além disso, o UFX notifica as camadas superiores sobre as solicitações padrão recebidas do host.
Driver do cliente de função USB
O UFX fornece uma interface abstrata que funciona consistentemente em diferentes controladores. No entanto, os controladores têm capacidades diferentes, com limitações como o número de pontos de extremidade, os tipos de pontos de extremidade, baixa potência, despertar remoto. Por exemplo, certos controladores suportam DMA, enquanto outros não. Alguns controladores implementam fluxos no hardware, enquanto outros controladores esperam que o driver manipule fluxos. Por esses motivos, somente a funcionalidade comum é manipulada no UFX. Transferências, gerenciamento de energia, suporte a fluxo e outros recursos que variam de controlador para controlador são manipulados pelo driver do cliente.
O driver do cliente de função USB é responsável por implementar operações específicas do controlador. Isso inclui a implementação de transferências de dados de endpoint, alterações de estado do dispositivo USB (redefinir, suspender, retomar), detecção de anexar/desanexar, detecção de porta/carregador. O driver cliente também é responsável por lidar com o gerenciamento de energia e eventos PnP.
O driver do cliente de função é escrito como driver KMDF (Kernel-Mode Driver Framework ) usando o driver de classe de função USB para interfaces de programação UFX.
A Microsoft fornece drivers de cliente de função in-box (UfxChipidea.sys, Ufxsynopsys.sys) para controladores ChipIdea e Synopsys.
Driver de filtro inferior USB
Um driver de filtro inferior USB suporta a detecção de carregadores se o controlador de função usar os drivers Synopsys e ChipIdea in-box. O driver do filtro gerencia o carregamento USB a partir da detecção da porta USB. Ele deve publicar um GUID para cada tipo de carregador suportado e uma lista das propriedades desse carregador. Se um carregador específico for configurável, o driver de filtro USB inferior define uma lista de PropertyIDs suportados e seus tipos de valor correspondentes que podem ser enviados a ele, para configurar o carregador. O driver também notifica a pilha de bateria quando ela pode começar a carregar e a quantidade máxima de corrente que o dispositivo pode extrair. Para drivers cliente que não sejam drivers Synopsys e ChipIdea, a lógica de carregamento pode ser implementada no driver cliente.
Um driver de classe de função envia solicitação para UFX usando interfaces de programação para suportar carregadores proprietários.