次の方法で共有


EVT_UCX_ROOTHUB_CONTROL_URB コールバック関数 (ucxroothub.h)

クライアント ドライバーは、このコールバックの種類を使用して、USB ハブで機能制御要求を受信したときに UCX が呼び出すハンドラーを実装します。

構文

EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;

void EvtUcxRoothubControlUrb(
  [in] UCXROOTHUB UcxRootHub,
  [in] WDFREQUEST Request
)
{...}

パラメーター

[in] UcxRootHub

ルート ハブを表す UCX オブジェクトへのハンドル。

[in] Request

機能要求の URB が含まれます。

戻り値

なし

解説

クライアント ドライバーは、 UcxRootHubCreate メソッドを呼び出すことによって、USB ホスト コントローラー拡張機能 (UCX) にこのコールバック関数を登録します。

ドライバーは、最初の例に示すように、個々のすべての機能要求の種類に対してコールバックを提供するか、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
Header ucxroothub.h (Ucxclass.h を含む)
IRQL DISPATCH_LEVEL

こちらもご覧ください

UcxRootHubCreate