Condividi tramite


EVT_ACX_CIRCUIT_POWER_UP funzione di callback (acxcircuit.h)

Il callback EVT_ACX_CIRCUIT_POWER_UP viene usato dal driver per aggiungere funzionalità nel percorso di alimentazione di un oggetto ACXCIRCUIT.

Sintassi

EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;

NTSTATUS EvtAcxCircuitPowerUp(
  WDFDEVICE Device,
  ACXCIRCUIT Circuit,
  WDF_POWER_DEVICE_STATE PreviousState
)
{...}

Parametri

Device

Oggetto WDFDEVICE (descritto in WDF - Riepilogo degli oggetti framework) associato all'oggetto ACXCIRCUIT specificato.

Circuit

L'oggetto ACXCIRCUIT (descritto in Riepilogo degli oggetti ACX) è alimentato.

PreviousState

Enumeratore tipizzato WDF_POWER_DEVICE_STATE che identifica lo stato di alimentazione del dispositivo precedente.

Valore restituito

Restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, restituisce un codice di errore appropriato. Per altre informazioni, vedere Uso dei valori NTSTATUS. Se il driver non riesce, il framework ACX arresta l'ACXSTREAMS associato, se presente, e contrassegna ACXCIRCUIT come eliminazione in sospeso. Il framework ACX non riesce il callback ACX EvtDeviceD0Entry, in modo da consentire l'uso di ACXCIRCUIT esistenti da questo dispositivo per creare percorsi audio funzionanti.

Commenti

Per registrare una funzione di callback EvtCircuitPowerUp, un driver deve chiamare AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Se il driver ha registrato una funzione di callback EvtCircuitPowerUp per un dispositivo, il framework chiama la funzione ogni volta che il dispositivo entra nello stato di lavoro (D0). Un dispositivo entrerà nello stato D0 quando si verifica una delle condizioni seguenti:

  • Un dispositivo viene enumerato perché il dispositivo è stato collegato o il sistema è stato riavviato.
  • Il sistema e tutti i relativi dispositivi tornano agli stati di lavoro da uno stato a basso consumo.
  • Il dispositivo torna allo stato di lavoro dopo che è entrato in uno stato di bassa potenza perché era inattivo (se il dispositivo supporta l'inattività a basso consumo).
  • Il responsabile Plug and Play ha ridistribuito le risorse hardware del sistema tra i dispositivi del sistema.
  • Il framework chiama la funzione di callback EvtDeviceD0Entry immediatamente dopo che il dispositivo entra nello stato di lavoro (D0) ed è disponibile per il driver, ma prima che gli interrupt del dispositivo siano stati abilitati. Il parametro PreviousState identifica lo stato di alimentazione del dispositivo in cui si trovava il dispositivo prima che entrasse nello stato D0. Quando il framework chiama per la prima volta EvtDeviceD0Entry, fornisce un valore PreviousState di WdfPowerDeviceD3Final.

Questa funzione di callback deve eseguire tutte le operazioni necessarie per rendere il dispositivo completamente operativo.

Per altre informazioni sui driver che forniscono questa funzione di callback, vedere Supporto di PnP e risparmio energia nel driver di funzione.

La funzione di callback EvtCircuitPowerUp viene chiamata in IRQL = PASSIVE_LEVEL. Non è consigliabile rendere questa funzione di callback visualizzabile.

Esempio

Di seguito è riportato un esempio di utilizzo. Questo esempio mostra l'avvio di alcuni valori timer da usare nel codice di test.

EVT_ACX_CIRCUIT_POWER_UP            CodecR_EvtCircuitPowerUp;

NTSTATUS
CreateCircuit()
{
    ...
    ACX_CIRCUIT_PNPPOWER_CALLBACKS_INIT(&powerCallbacks);
    powerCallbacks.EvtAcxCircuitPowerUp = CodecR_EvtCircuitPowerUp;
    powerCallbacks.EvtAcxCircuitPowerDown = CodecR_EvtCircuitPowerDown;
    AcxCircuitInitSetAcxCircuitPnpPowerCallbacks(circuitInit, &powerCallbacks);
    ...
}

NTSTATUS
CodecR_EvtCircuitPowerUp (
    _In_ WDFDEVICE  Device,
    _In_ ACXCIRCUIT Circuit,
    _In_ WDF_POWER_DEVICE_STATE PreviousState
    )
{
    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(PreviousState);

    CODEC_RENDER_CIRCUIT_CONTEXT *  circuitCtx;
    CODEC_MUTE_ELEMENT_CONTEXT *    muteCtx;
    CODEC_VOLUME_ELEMENT_CONTEXT *  volumeCtx;

    PAGED_CODE();

    // for testing.
    circuitCtx = GetRenderCircuitContext(Circuit);
    ASSERT(circuitCtx);

    ASSERT(circuitCtx->MuteElement);
    muteCtx = GetCodecMuteElementContext(circuitCtx->MuteElement);
    ASSERT(muteCtx);

    ASSERT(muteCtx->Timer);
    WdfTimerStart(muteCtx->Timer, WDF_REL_TIMEOUT_IN_MS(10));

    ASSERT(circuitCtx->VolumeElement);
    volumeCtx = GetCodecVolumeElementContext(circuitCtx->VolumeElement);
    ASSERT(volumeCtx);

    ASSERT(volumeCtx->Timer);
    WdfTimerStart(volumeCtx->Timer, WDF_REL_TIMEOUT_IN_MS(1000));

Requisiti di ACX

Versione minima di ACX: 1.0

Per altre informazioni sulle versioni ACX, vedere La panoramica della versione di ACX.

Requisiti

Requisito Valore
Intestazione acxcircuit.h
IRQL PASSIVE_LEVEL

Vedi anche