다음을 통해 공유


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

추가 정보

UcxRootHubCreate