EVT_UCX_ROOTHUB_CONTROL_URB função de retorno de chamada (ucxroothub.h)
O driver cliente usa esse tipo de retorno de chamada para implementar manipuladores que o UCX chama quando recebe solicitações de controle de recursos no hub USB.
Sintaxe
EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;
void EvtUcxRoothubControlUrb(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
Parâmetros
[in] UcxRootHub
Um identificador para um objeto UCX que representa o hub raiz.
[in] Request
Contém o URB para a solicitação de recurso.
Retornar valor
Nenhum
Comentários
O driver cliente registra essa função de retorno de chamada com a UCX (extensão do controlador de host USB) chamando o método UcxRootHubCreate .
O driver fornece retornos de chamada para todos os tipos de solicitação de recurso individuais, conforme mostrado no primeiro exemplo, ou pode fornecer um único manipulador do tipo EVT_UCX_ROOTHUB_CONTROL_URB que o UCX chama para todas as transferências de controle de porta e hub.
O driver do cliente retorna status de conclusão em Solicitação e no USBD_STATUS no cabeçalho URB. O driver pode concluir o WDFREQUEST de forma assíncrona.
Exemplos
Este exemplo mostra como registrar retornos de chamada para tipos de solicitação de recursos individuais.
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubClearHubFeature;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubClearPortFeature;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubGetHubStatus;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubGetPortStatus;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubSetHubFeature;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubSetPortFeature;
EVT_UCX_ROOTHUB_CONTROL_URB RootHub_EvtRootHubGetPortErrorCount;
...
//
// Create the root hub
//
UCX_ROOTHUB_CONFIG_INIT(&ucxRootHubConfig,
RootHub_EvtRootHubClearHubFeature,
RootHub_EvtRootHubClearPortFeature,
RootHub_EvtRootHubGetHubStatus,
RootHub_EvtRootHubGetPortStatus,
RootHub_EvtRootHubSetHubFeature,
RootHub_EvtRootHubSetPortFeature,
RootHub_EvtRootHubGetPortErrorCount,
RootHub_EvtRootHubInterruptTx,
RootHub_EvtRootHubGetInfo,
RootHub_EvtRootHubGet20PortInfo,
RootHub_EvtRootHubGet30PortInfo);
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_ROOTHUB_CONTEXT);
status = UcxRootHubCreate(ucxController,
&ucxRootHubConfig,
&objectAttributes,
&ucxRootHub);
Aqui está um exemplo de implementação de um dos manipuladores de solicitação específicos do URB.
VOID
RootHub_EvtRootHubClearHubFeature(
UCXROOTHUB UcxRootHub,
WDFREQUEST ControlUrb
)
/*++
Routine Description:
UCX calls this routine when it receives a new Clear Hub Feature request.
--*/
{
UNREFERENCED_PARAMETER(UcxRootHub);
DbgTrace(TL_INFO, RootHub, "RootHub_EvtRootHubClearHubFeature");
WDF_REQUEST_PARAMETERS_INIT(&wdfRequestParams);
WdfRequestGetParameters(WdfRequest, &wdfRequestParams);
urb = (PURB)wdfRequestParams.Parameters.Others.Arg1;
setupPacket = (PWDF_USB_CONTROL_SETUP_PACKET)&urb->UrbControlTransferEx.SetupPacket[0];
...
WdfRequestComplete(ControlUrb, STATUS_SUCCESS);
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | ucxroothub.h (inclua Ucxclass.h) |
IRQL | DISPATCH_LEVEL |