EVT_UCX_ROOTHUB_CONTROL_URB回调函数 (ucxroothub.h)

客户端驱动程序使用此回调类型来实现 UCX 在 USB 集线器上收到功能控制请求时调用的处理程序。

语法

EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;

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

参数

[in] UcxRootHub

表示根中心的 UCX 对象的句柄。

[in] Request

包含功能请求的 URB

返回值

备注

客户端驱动程序通过调用 UcxRootHubCreate 方法将此回调函数注册到 USB 主机控制器扩展 (UCX) 。

驱动程序可以为所有单独的功能请求类型提供回调(如第一个示例所示),也可以提供 UCX 针对所有中心和端口控制传输调用 EVT_UCX_ROOTHUB_CONTROL_URB 类型的单个处理程序。

客户端驱动程序在 “请求” 中返回完成状态,在 URB 标头USBD_STATUS返回完成状态。 驱动程序可以异步完成 WDFREQUEST。

示例

此示例演示如何为单个功能请求类型注册回调。

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

下面是一个特定于 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);
}

要求

要求
目标平台 Windows
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 ucxroothub.h (包括 Ucxclass.h)
IRQL DISPATCH_LEVEL

另请参阅

UcxRootHubCreate