Compartir a través de


EVT_UCX_ROOTHUB_CONTROL_URB función de devolución de llamada (ucxroothub.h)

El controlador cliente usa este tipo de devolución de llamada para implementar controladores a los que UCX llama cuando recibe solicitudes de control de características en el concentrador USB.

Sintaxis

EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;

void EvtUcxRoothubControlUrb(
  [in] UCXROOTHUB UcxRootHub,
  [in] WDFREQUEST Request
)
{...}

Parámetros

[in] UcxRootHub

Identificador de un objeto UCX que representa el centro raíz.

[in] Request

Contiene el URB de la solicitud de característica.

Valor devuelto

None

Observaciones

El controlador cliente registra esta función de devolución de llamada con la extensión del controlador de host USB (UCX) llamando al método UcxRootHubCreate .

El controlador proporciona devoluciones de llamada para todos los tipos de solicitud de características individuales, como se muestra en el primer ejemplo, o puede proporcionar un único controlador de tipo EVT_UCX_ROOTHUB_CONTROL_URB que UCX llama para todas las transferencias de control de concentrador y puerto.

El controlador cliente devuelve el estado de finalización en Request y en el USBD_STATUS en el encabezado URB. El controlador puede completar WDFREQUEST de forma asincrónica.

Ejemplos

En este ejemplo se muestra cómo registrar devoluciones de llamada para tipos de solicitud de características individuales.

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);

Esta es una implementación de ejemplo de uno de los controladores de solicitudes específicos de 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 Value
Plataforma de destino Windows
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado ucxroothub.h (incluya Ucxclass.h)
IRQL DISPATCH_LEVEL

Consulte también

UcxRootHubCreate