Configuración de puntos de conexión USB en un controlador de controlador de host USB
UCX administra la creación de objetos de punto de conexión y notifica al controlador de host que programe o desprograme los puntos de conexión en el controlador de host USB.
Mientras se programa un punto de conexión, UCX también lo administra. El estado de un punto de conexión cambia a medida que los dispositivos están conectados y se desconectan del bus, experimentan eventos de energía como la suspensión y el restablecimiento, y se someten a una nueva creación de puntos de conexión, como cambios de configuración alternativos.
Configuración de punto de conexión
UCX invoca las funciones de devolución de llamada implementadas por el controlador del controlador host para notificar al controlador cuando los puntos de conexión deben programarse en el controlador de host USB o liberarse. Cuando se llama a EVT_UCX_USBDEVICE_ENABLE , el controlador prepara el controlador para realizar transferencias al punto de conexión predeterminado del dispositivo. La preparación del controlador incluye la programación del punto de conexión predeterminado. Cuando se llama a EVT_UCX_USBDEVICE_DISABLE , el controlador desprograma el punto de conexión predeterminado y libera otros recursos de controlador asociados al dispositivo. Cuando se llama a EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE , el controlador recibe una lista de puntos de conexión no predeterminados para programar en el controlador y se da otra lista de puntos de conexión no predeterminados que se van a quitar del controlador. A continuación, el controlador del controlador de host programa los puntos de conexión no predeterminados especificados en el controlador y también quita los puntos de conexión no predeterminados (especificados en la otra lista) del controlador.
Administración del estado de la cola
UCX invoca funciones de devolución de llamada implementadas por el controlador del controlador de host para realizar cambios en el estado de la cola del punto de conexión. A continuación, el controlador realiza la acción correspondiente en la cola del punto de conexión dada a UCX y en las colas de segundo nivel que se mantienen dentro del controlador. Las colas de puntos de conexión se anulan o purgan en estos escenarios:
- El controlador cliente del dispositivo USB envía una solicitud de URB_FUNCTION_ABORT_PIPE.
- Durante la suspensión.
- Cuando el concentrador al que está conectado un dispositivo, detecta una desconexión del dispositivo.
- Durante una solicitud de configuración de interfaz de selección.
Para notificar al controlador del controlador de host una anulación o purga de cola, UCX llama EVT_UCX_ENDPOINT_ABORT o EVT_UCX_ENDPOINT_PURGE. Si ucx necesita en algún momento posterior la cola del punto de conexión, UCX invoca la devolución de llamada EVT_UCX_ENDPOINT_START para notificar al controlador que inicie la cola.
Cancelación de transferencia
Para cualquier controlador para el que el controlador del host declare GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, el controlador debe llamar a UcxEndpointNeedToCancelTransfers e implementar EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS para cancelar transferencias USB asincrónicas (masivas o de control) a un dispositivo USB de velocidad completa o baja que está detrás de un concentrador de Traductor de transacciones (TT). En todos los demás casos, el controlador puede llamar opcionalmente a UcxEndpointNeedToCancelTransfers para obtener una notificación de EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS que indica que se permiten transferencias de cancelación en este punto de conexión y el controlador puede continuar con la cancelación de las transferencias. Como alternativa, el controlador puede cancelar las transferencias directamente sin llamar a UcxEndpointNeedToCancelTransfers.
Si el controlador del controlador de host siempre produce un error en la solicitud de este GUID, puede omitir estas dos llamadas de función por completo.
Si el controlador nunca llama a UcxEndpointNeedToCancelTransfers, no se llama a la devolución de llamada EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS del controlador y puede ser NULL durante el registro de devolución de llamada.
Si el controlador pretende usar UcxEndpointNeedToCancelTransfers, el controlador debe llamar al método cuando se haya programado una transferencia en el controlador y, a continuación, se cancele y espere a que EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS antes de completarlo.