Objetos e identificadores UCX usados por un controlador de controlador de host
UCX amplía la funcionalidad del objeto WDF para definir sus propios objetos UCX específicos de USB. UCX usa estos objetos para poner en cola las solicitudes a cualquier controlador de controlador de host subyacente.
Resumen
- El controlador de host usa objetos UCX para controlar las operaciones relacionadas con el controlador, su concentrador raíz y todos los puntos de conexión.
- El controlador de host crea objetos UCX y UCX administra la duración de cada objeto.
API importantes
UCX amplía la funcionalidad del objeto WDF para definir sus propios objetos UCX específicos de USB. UCX usa estos objetos para poner en cola las solicitudes a cualquier controlador de controlador de host subyacente.
Para obtener más información sobre los objetos WDF, consulte Introducción a los objetos de marco.
UCXCONTROLLER: objeto de controlador de host
Representa el controlador de host creado por el controlador de host. El controlador debe crear solo un objeto de controlador de host por instancia de controlador de host. Normalmente se crea dentro de la devolución de llamada EvtDriverDeviceAdd llamando al método UcxControllerCreate.
Cuando el controlador de host crea el objeto, el controlador registra su implementación de funciones de devolución de llamada invocadas por UCX. Además, el controlador debe identificar el tipo de bus sobre el que está conectado el controlador de host, como ACPI o PCI. El controlador también proporciona información del dispositivo del controlador de host mediante la estructura UCX_CONTROLLER_CONFIG que se pasa a la llamada UcxControllerCreate.
Para controlar las solicitudes de E/S, el controlador de host debe registrar una interfaz de dispositivo GUID_DEVINTERFACE_USB_HOST_CONTROLLER. El controlador no es necesario para implementar los IOCTL definidos en esta interfaz. En su lugar, el cliente UCX pasa las solicitudes IOCTL recibidas en esta interfaz a UCX mediante una llamada a UcxIoDeviceControl.
Estas son las funciones de devolución de llamada asociadas al objeto de controlador de host que se invocan mediante UCX. El controlador de host debe implementar estas funciones.
*EVT_UCX_CONTROLLER_USBDEVICE_ADD
Se llama cuando el controlador del concentrador ha determinado, a través de la interacción con el concentrador raíz o los concentradores externos, que hay un nuevo dispositivo en el bus.
*EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY
La llama UCX para recopilar información sobre varias características compatibles con controladores de host USB.
*EVT_UCX_CONTROLLER_RESET
La llama UCX para restablecer el hardware del controlador, posiblemente en respuesta a un error detectado.
*EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER
Se usa para recuperar el número de marcos actual del controlador de host, que usa el controlador central para programar transferencias isocrónicas.
UCXROOTHUB: objeto de concentrador raíz
Obtiene y controla el estado de los puertos raíz del controlador de host. Lo crea el controlador de host normalmente dentro de la devolución de llamada EvtDriverDeviceAdd llamando al método UcxRootHubCreate después de crear el objeto de controlador de host. Solo debe haber un objeto de concentrador raíz por instancia de controlador de host. En la llamada UcxRootHubCreate, el controlador registra sus implementaciones de devolución de llamada.
EVT_UCX_ROOTHUB_GET_INFO
Devuelve el número de puertos USB 2.0 y USB 3.0 del concentrador raíz.
EVT_UCX_ROOTHUB_GET_20PORT_INFO
Devuelve información sobre los puertos USB 2.0 o USB 3.0 (*EVT_UCX_ROOTHUB_GET_30PORT_INFO) del concentrador raíz.
Después de crear e inicializar el objeto de concentrador raíz, el controlador del concentrador interactúa con los puertos del concentrador raíz mediante el envío de transferencias de interrupción y control. UCX ayuda con estas transferencias invocando estas funciones de devolución de llamada implementadas por el controlador de host.
EVT_UCX_ROOTHUB_CONTROL_URB
Controla las solicitudes de control de características por el concentrador USB.
EVT_UCX_ROOTHUB_INTERRUPT_TX
Controla la solicitud de información sobre los puertos modificados.
Para obtener más información, consulte Funciones de devolución de llamada del concentrador raíz de un controlador de host.
UCXUSBDEVICE: objeto de dispositivo USB
Representa un dispositivo USB físico conectado al bus. Lo crea el controlador de host normalmente dentro de la devolución de llamada EVT_UCX_CONTROLLER_USBDEVICE_ADD llamando al método UcxUsbDeviceCreate.
Cuando se crea el objeto, el controlador de host registra su implementación de las funciones de devolución de llamada con la llamada UcxUsbDeviceCreate.
Estas funciones de devolución de llamada están diseñadas para mantener informado al controlador sobre el estado actual de los dispositivos USB.
EVT_UCX_USBDEVICE_ENABLE
Prepara el controlador para realizar transferencias al punto de conexión predeterminado del dispositivo.
EVT_UCX_USBDEVICE_DISABLE
Libera los recursos del controlador asociados al dispositivo y a su punto de conexión predeterminado.
EVT_UCX_USBDEVICE_ADDRESS
Programa una dirección en el controlador y envía una transferencia SET_ADDRESS al dispositivo, para llevarla al estado de dirección.
EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE
Programa puntos de conexión no predeterminados en el controlador o libera otros puntos de conexión no predeterminados.
EVT_UCX_USBDEVICE_RESET
Una notificación del controlador de que se ha restablecido un dispositivo, en cuyo caso el controlador realiza cualquier acción necesaria para sincronizar el controlador con el dispositivo USB.
EVT_UCX_USBDEVICE_UPDATE
Notifica al controlador varios bits de información relacionados con el dispositivo.
EVT_UCX_USBDEVICE_HUB_INFO
Una notificación sobre las propiedades del concentrador, si el identificador UCXUSBDEVICE es para un dispositivo concentrador.
EVT_UCX_USBDEVICE_ENDPOINT_ADD
Notifica al controlador que cree un punto de conexión para el dispositivo. EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD para el punto de conexión predeterminado.
Cuando una interfaz en un dispositivo USB 3.0 suspendido ha señalado una reactivación, se espera que el controlador llame a UcxUsbDeviceRemoteWakeNotification para notificarlo a UCX.
Una vez creado el objeto, UCX administra la duración del objeto y el controlador no debe eliminar el objeto.
UCXENDPOINT: objeto de punto de conexión
Representa un punto de conexión en un objeto de dispositivo USB. El controlador de host crea objetos de punto de conexión durante una devolución de llamada EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD o EVT_UCX_USBDEVICE_ENDPOINT_ADD. Cuando se crea un objeto de punto de conexión, el controlador registra sus funciones de devolución de llamada.
El controlador también crea un objeto de cola de marco para cada punto de conexión y pasa el WDFQUEUE para esa cola a UCX mediante una llamada a UcxEndpointSetWdfIoQueue. Una vez creado el punto de conexión, la duración del objeto y sus colas asociadas se administran mediante UCX y el controlador no debe eliminar estos objetos.
El objeto de punto de conexión implementa varias funciones de devolución de llamada que permiten al controlador ayudar a UCX con operaciones relacionadas con el punto de conexión.
EVT_UCX_ENDPOINT_ABORT
Anula la cola asociada al punto de conexión.
EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS
Notifica al controlador que puede completar las transferencias canceladas en el punto de conexión.
EVT_UCX_ENDPOINT_PURGE
Completa todas las solicitudes de E/S pendientes en el punto de conexión.
EVT_UCX_ENDPOINT_START
Inicia la cola asociada al punto de conexión.
EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD
Crear flujos estáticos.
EVT_UCX_ENDPOINT_RESET
Notifica al controlador que restablezca la programación del controlador del punto de conexión.
Cuando el controlador de host recibe un error de respuesta de ping USB 3.0 en un punto de conexión, el controlador debe llamar a UcxEndpointNoPingResponseError. Esa llamada hace que el objeto dispositivo USB reciba EVT_UCX_USBDEVICE_UPDATE. Para obtener más información, consulte Configuración de puntos de conexión USB en un controlador de host.
UCXSTREAMS: objeto de flujo
Representa una serie de canalizaciones para el dispositivo a través de un único punto de conexión. El controlador de host crea objetos de flujo en la devolución de llamada EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD llamando a UcxStaticStreamsCreate.
Durante la llamada UcxStaticStreamsCreate, el controlador de host registra sus funciones de devolución de llamada. Para un objeto de punto de conexión específico, el controlador puede determinar si ha creado un objeto de flujo y devolver el identificador UCXSTREAMS llamando a UcxEndpointGetStaticStreamsReferenced.
Una vez creado el objeto, el controlador crea un objeto de cola de marco para cada flujo y envía el identificador WDFQUEUE a UCX llamando a UcxStaticStreamsSetStreamInfo.
El objeto de flujo proporciona varias funciones de devolución de llamada para que el controlador de host ayude a UCX a administrar los flujos estáticos.
EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE
Libera los recursos del controlador para todos los flujos de un punto de conexión.
EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE
Habilita el hardware de controlador de todos los flujos para este punto de conexión.
UCX administra la duración del objeto y las colas asociadas y el controlador no debe eliminar los objetos.