EVT_UCX_ROOTHUB_CONTROL_URB Rückruffunktion (ucxroothub.h)

Der Clienttreiber verwendet diesen Rückruftyp, um Handler zu implementieren, die UCX aufruft, wenn er Funktionssteuerungsanforderungen auf dem USB-Hub empfängt.

Syntax

EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;

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

Parameter

[in] UcxRootHub

Ein Handle für ein UCX-Objekt, das den Stammhub darstellt.

[in] Request

Enthält die URB für die Featureanforderung.

Rückgabewert

Keine

Bemerkungen

Der Clienttreiber registriert diese Rückruffunktion bei der USB-Hostcontrollererweiterung (UCX), indem die UcxRootHubCreate-Methode aufgerufen wird .

Der Treiber stellt entweder Rückrufe für alle einzelnen Featureanforderungstypen bereit, wie im ersten Beispiel gezeigt, oder er kann einen einzelnen Handler vom Typ EVT_UCX_ROOTHUB_CONTROL_URB bereitstellen, den UCX für alle Hub- und Portsteuerungsübertragungen aufruft.

Der Clienttreiber gibt status in Request und im USBD_STATUS im URB-Header zurück. Der Treiber kann wdFREQUEST asynchron abschließen.

Beispiele

In diesem Beispiel wird gezeigt, wie Rückrufe für einzelne Featureanforderungstypen registriert werden.

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);

Hier sehen Sie eine Beispielimplementierung eines der URB-spezifischen Anforderungshandler.

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);
}

Anforderungen

Anforderung Wert
Zielplattform Windows
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile ucxroothub.h (include Ucxclass.h)
IRQL DISPATCH_LEVEL

Weitere Informationen

UcxRootHubCreate