Compartilhar via


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

Confira também

UcxRootHubCreate