Поделиться через


функция обратного вызова 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 для запроса функции.

Возвращаемое значение

Никакой

Замечания

Драйвер клиента регистрирует эту функцию обратного вызова с расширением контроллера USB-узла (UCX), вызвав метод UcxRootHubCreate.

Драйвер либо предоставляет обратные вызовы для всех типов запросов отдельных функций, как показано в первом примере, либо может предоставить один обработчик типа EVT_UCX_ROOTHUB_CONTROL_URB, что UCX вызывает все передачи концентраторов и портов.

Драйвер клиента возвращает состояние завершения в запроса и в заголовке 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);
}

Требования

Требование Ценность
целевая платформа Виндоус
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
заголовка ucxroothub.h (include Ucxclass.h)
IRQL DISPATCH_LEVEL

См. также

UcxRootHubCreate