Controladores del lado del dispositivo USB en Windows
Describe la arquitectura de la pila de funciones USB.
En un dispositivo USB, la pila de funciones USB hace referencia a un grupo de controladores enumerados por plug and Play Manager, cuando ACPI crea un objeto de dispositivo físico del dispositivo USB (PDO).
En un único dispositivo de configuración, un dispositivo USB puede definir una o varias interfaces. Por ejemplo, el Protocolo de transferencia de medios (MTP) para transferir archivos hacia y desde el dispositivo. Un dispositivo USB compuesto puede admitir varias interfaces en una sola configuración. La pila de funciones USB crea PPO para cada interfaz y PnP Manager carga el controlador de clase que crea el objeto de dispositivo de función (FDO) para esa interfaz.
La pila de funciones USB se conceptualiza en esta imagen:
Aplicaciones y servicios
- Todas las solicitudes en modo de usuario se envían al controlador de clase de modo kernel proporcionado por Microsoft GenericUSBFn.sys. Puede crear un servicio en modo de usuario que se comunique con GenericUSBFn.sys enviando códigos de control de E/S (IOCTLs) tal como se define en genericusbfnioctl.h. Para obtener más información sobre estas ICTL, consulte Comunicación con GenericUSBFn.sys desde un servicio en modo de usuario.
Controlador de clase de función USB
Un controlador de clase de función USB implementa la funcionalidad de una interfaz específica (o grupo de interfaces) en el dispositivo USB. MTP e IpOverUsb son ejemplos de controladores de clase proporcionados por el sistema. El controlador de clase se puede implementar únicamente como controlador en modo kernel o puede ser un servicio en modo de usuario emparejado con el controlador de clase proporcionado por el sistema GenericUSBFn.sys.
Un controlador de clase de función envía solicitudes al controlador mediante el controlador de clase de función USB a interfaces de programación UFX.
Extensión de clase de función USB (UFX)
La extensión de la clase de función USB (UFX) es una extensión proporcionada por el sistema al marco de controladores en modo kernel (KMDF). USB es un bus estándar y tiene algunas funcionalidades y funcionalidades necesarias. UFX es responsable de implementar la lógica de función USB que es común a todos los controladores de funciones USB y controlar o enviar solicitudes desde controladores de clase de función USB. En concreto, UFX controla el proceso de enumerar el dispositivo y procesar las transferencias de control estándar. Para realizar algunas de estas operaciones, UFX debe conocer las capacidades del bus. Esas funcionalidades se notifican a UFX cuando se establece la interfaz de extensión de clase.
UFX expone las ICTL estándar que las capas superiores (servicios de controlador de clase de función USB y de modo de usuario) pueden usar para enviar solicitudes al controlador. Además, UFX notifica a las capas superiores las solicitudes estándar recibidas del host.
Controlador cliente de funciones USB
UFX proporciona una interfaz abstracta que funciona de forma coherente en diferentes controladores. Sin embargo, los controladores tienen diferentes funcionalidades, con limitaciones como el número de puntos de conexión, los tipos de puntos de conexión, baja energía, reactivación remota. Por ejemplo, algunos controladores admiten DMA, mientras que otros no. Algunos controladores implementan secuencias en el hardware, mientras que otros controladores esperan que el controlador controle las secuencias. Por estas razones, solo se controla la funcionalidad común en UFX. Las transferencias, la administración de energía, la compatibilidad con secuencias y otras características que varían de controlador a controlador se controlan mediante el controlador cliente.
El controlador cliente de función USB es responsable de implementar operaciones específicas del controlador. Entre ellas se incluyen la implementación de transferencias de datos de punto de conexión, cambios de estado del dispositivo USB (restablecimiento, suspensión, reanudación), detección de conexión/desasociación, detección de puerto/cargador. El controlador cliente también es responsable de controlar la administración de energía y los eventos PnP.
El controlador cliente de funciones se escribe como controlador del marco de controladores del modo kernel (KMDF) mediante el uso del controlador de clase de función USB a interfaces de programación UFX.
Microsoft proporciona controladores de cliente de funciones integradas (UfxChipidea.sys, Ufxsynopsys.sys) para controladores ChipIdea y Synopsys.
Controlador de filtro inferior USB
Un controlador de filtro inferior USB admite la detección de cargadores si el controlador de funciones usa los controladores de Synopsys y ChipIdea en caja. El controlador de filtro administra la carga USB a partir de la detección de puertos USB. Debe publicar un GUID para cada tipo de cargador que admita y una lista de las propiedades del cargador. Si se puede configurar un cargador específico, el controlador de filtro USB inferior define una lista de los PropertyID admitidos y sus tipos de valor correspondientes que se pueden enviar a él, para configurar el cargador. El controlador también notifica a la pila de batería cuando puede comenzar a cargarse y la cantidad máxima de corriente que el dispositivo puede dibujar. En el caso de los controladores de cliente distintos de Synopsys y ChipIdea, la lógica de carga se puede implementar en el controlador cliente.
Un controlador de clase de función envía una solicitud a UFX mediante interfaces de programación para admitir cargadores propietarios.