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 메서드를 호출하여 이 콜백 함수를 UCX(USB 호스트 컨트롤러 확장)에 등록합니다.
드라이버는 첫 번째 예제와 같이 모든 개별 기능 요청 형식에 대한 콜백을 제공하거나 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 |