EVT_UCX_ROOTHUB_CONTROL_URB funzione di callback (ucxroothub.h)

Il driver client usa questo tipo di callback per implementare gestori chiamate da UCX quando riceve le richieste di controllo delle funzionalità nell'hub USB.

Sintassi

EVT_UCX_ROOTHUB_CONTROL_URB EvtUcxRoothubControlUrb;

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

Parametri

[in] UcxRootHub

Handle per un oggetto UCX che rappresenta l'hub radice.

[in] Request

Contiene l'OGGETTO URB per la richiesta di funzionalità.

Valore restituito

nessuno

Osservazioni

Il driver client registra questa funzione di callback con l'estensione del controller host USB (UCX) chiamando il metodo UcxRootHubCreate .

Il driver fornisce callback per tutti i singoli tipi di richiesta di funzionalità, come illustrato nel primo esempio oppure può fornire un singolo gestore di tipo EVT_UCX_ROOTHUB_CONTROL_URB che UCX chiama tutti i trasferimenti di hub e controllo porta.

Il driver client restituisce lo stato di completamento nella richiesta e nell'USBD_STATUS nell'intestazione URB. Il driver può completare in modo asincrono WDFREQUEST.

Esempio

In questo esempio viene illustrato come registrare i callback per i singoli tipi di richiesta di funzionalità.

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

Ecco un'implementazione di esempio di uno dei gestori di richieste specifici di 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);
}

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione ucxroothub.h (includere Ucxclass.h)
IRQL DISPATCH_LEVEL

Vedi anche

UcxRootHubCreate