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