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


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

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

None

Remarks

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

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

Драйвер клиента возвращает состояние завершения в запросе и в USBD_STATUS в заголовке URB. Драйвер может выполнять 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