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
Oggetto ACXCIRCUIT (descritto in Riepilogo degli oggetti ACX) alimentato.
PreviousState
Enumeratore WDF_POWER_DEVICE_STATE tipizzato 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 di 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 ha esito negativo con il callback ACX EvtDeviceD0Entry, in modo da consentire l'uso di ACXCIRCUITs esistenti da questo dispositivo per creare percorsi audio funzionanti.
Osservazioni
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 entra nello stato D0 quando si verifica uno dei seguenti:
- Un dispositivo viene enumerato (perché il dispositivo è stato collegato o il sistema è stato riavviato).
- Il sistema e tutti i suoi dispositivi tornano agli stati di lavoro da uno stato a basso consumo.
- Il dispositivo torna allo stato di funzionamento dopo che è entrato in uno stato a basso consumo perché era inattivo (se il dispositivo supporta l'inattività a basso consumo).
- Il gestore 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 in Driver di funzione.
La funzione di callback EvtCircuitPowerUp viene chiamata in IRQL = PASSIVE_LEVEL. Non è consigliabile rendere pageable questa funzione di callback.
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 ACX
versione minima di ACX: 1.0
Per altre informazioni sulle versioni di ACX, vedere panoramica della versione ACX.
Fabbisogno
Requisito | Valore |
---|---|
intestazione | acxcircuit.h |
IRQL | PASSIVE_LEVEL |