Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O UCX gerencia a criação de objetos de ponto de extremidade e notifica o controlador host para programar ou desprogramar pontos de extremidade no controlador host USB.
Enquanto um endpoint é programado, ele também é gerenciado pela UCX. O estado de um ponto de extremidade muda à medida que os dispositivos são conectados e desconectados do barramento, experimenta eventos de energia, como suspensão e reinicialização, e passa pela criação de novos pontos de extremidade, como alterações de configurações alternadas.
Configuração do ponto final
UCX invoca funções de chamada de retorno implementadas pelo driver do controlador anfitrião para notificar o driver quando os pontos de extremidade devem ser programados no controlador anfitrião USB ou liberados. Quando EVT_UCX_USBDEVICE_ENABLE é chamado, o driver prepara o controlador para executar transferências para o ponto de extremidade padrão do dispositivo. A preparação do controlador inclui a programação do ponto de extremidade padrão. Quando EVT_UCX_USBDEVICE_DISABLE é chamado, o driver desprograma o ponto de extremidade padrão e libera outros recursos do controlador associados ao dispositivo. Quando EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE é chamado, o driver recebe uma lista de pontos de extremidade não padrão para programar no controlador e outra lista de pontos de extremidade não padrão para remover do controlador. Em seguida, o driver do controlador host programa os pontos de extremidade não padrão especificados no controlador e também remove os pontos de extremidade não padrão (especificados na outra lista) do controlador.
Gerenciamento de estado de fila
UCX invoca funções de retorno de chamada implementadas pelo driver do controlador de host para executar alterações no estado da fila do endpoint. Em seguida, o driver realiza a ação correspondente na fila de endpoint atribuída ao UCX e em qualquer fila de segundo nível mantida no driver. As filas de endpoints são abortadas ou eliminadas nestes cenários:
- O driver do cliente de dispositivo USB envia uma solicitação de URB_FUNCTION_ABORT_PIPE.
- Durante a suspensão.
- Quando o hub ao qual um dispositivo está conectado, deteta uma desconexão do dispositivo.
- Durante uma solicitação de configuração de interface de seleção.
Para notificar o driver do controlador host sobre a abortagem ou limpeza de fila, o UCX chama EVT_UCX_ENDPOINT_ABORT ou EVT_UCX_ENDPOINT_PURGE. Se, mais tarde, a fila de endpoint for necessária pelo UCX, este invocará o retorno de chamada EVT_UCX_ENDPOINT_START para notificar o driver para iniciar a fila.
Cancelamento de transferência
Para qualquer controlador para o qual o driver do controlador anfitrião declare GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, o driver deve chamar UcxEndpointNeedToCancelTransfers e implementar EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS para cancelar transferências USB assíncronas (Bulk ou de controle) para um dispositivo USB de velocidade total ou baixa que esteja atrás de um hub TT (Transaction Translator). Em todos os outros casos, o driver pode, opcionalmente, chamar UcxEndpointNeedToCancelTransfers para obter uma notificação de EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS que indica que o cancelamento de transferências é permitido neste ponto de extremidade e o driver pode continuar a cancelar as transferências. Como alternativa, o driver pode cancelar transferências diretamente sem chamar UcxEndpointNeedToCancelTransfers.
Se o driver do controlador host sempre falhar a solicitação para esse GUID, ele pode ignorar essas duas chamadas de função completamente.
Se o driver nunca chamar UcxEndpointNeedToCancelTransfers, o retorno de chamada EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS do driver não será chamado e poderá ser NULL durante o registro de retorno de chamada.
Se o driver pretende usar UcxEndpointNeedToCancelTransfers, o driver deve chamar o método quando uma transferência foi programada para o controlador e, em seguida, cancelada e, em seguida, aguarda EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS antes de concluí-lo.