EVT_ACX_CIRCUIT_POWER_UP função de retorno de chamada (acxcircuit.h)
O retorno de chamada EVT_ACX_CIRCUIT_POWER_UP é usado pelo driver para adicionar funcionalidade no caminho de energia de um objeto ACXCIRCUIT.
Sintaxe
EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;
NTSTATUS EvtAcxCircuitPowerUp(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
WDF_POWER_DEVICE_STATE PreviousState
)
{...}
Parâmetros
Device
Um objeto WDFDEVICE (descrito em WDF – Resumo dos objetos da estrutura) associado ao ACXCIRCUIT especificado.
Circuit
O objeto ACXCIRCUIT (descrito em Resumo de objetos ACX) foi ativado.
PreviousState
Um enumerador tipo WDF_POWER_DEVICE_STATE que identifica o estado de energia do dispositivo anterior.
Valor de retorno
Retorna STATUS_SUCCESS
se a chamada foi bem-sucedida. Caso contrário, ele retornará um código de erro apropriado. Para obter mais informações, consulte Usando valores NTSTATUS.
Se o driver falhar nesse retorno de chamada, a estrutura ACX desligará o ACXSTREAMS associado, se houver, e marcará o ACXCIRCUIT como exclusão pendente. A estrutura ACX não falha no retorno de chamada ACX EvtDeviceD0Entry sublinhado, o que permite que ACXCIRCUITs de trabalho existentes desse dispositivo sejam usados para criar caminhos de áudio de trabalho.
Observações
Para registrar uma função de retorno de chamada EvtCircuitPowerUp, um driver deve chamar AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.
Se o driver tiver registrado uma função de retorno de chamada EvtCircuitPowerUp para um dispositivo, a estrutura chamará a função sempre que o dispositivo entrar em seu estado de trabalho (D0). Um dispositivo entrará no estado D0 quando ocorrer um destes procedimentos:
- Um dispositivo é enumerado (porque o dispositivo foi conectado ou o sistema foi reinicializado).
- O sistema e todos os seus dispositivos retornam aos seus estados de trabalho de um estado de baixa potência.
- O dispositivo retorna ao seu estado de trabalho depois que inseriu um estado de baixa potência porque estava ocioso (se o dispositivo dá suporte a ociosidade de baixa potência).
- O Gerenciador de Plug and Play redistribuiu os recursos de hardware do sistema entre os dispositivos do sistema.
- A estrutura chama a função de retorno de chamada EvtDeviceD0Entry imediatamente após o dispositivo entrar em seu estado de trabalho (D0) e estiver disponível para o driver, mas antes que as interrupções do dispositivo tenham sido habilitadas. O parâmetro PreviousState identifica o estado de energia do dispositivo em que o dispositivo estava antes de entrar no estado D0. Quando a estrutura chama EvtDeviceD0Entry pela primeira vez, ela fornece um valor PreviousState de WdfPowerDeviceD3Final.
Essa função de retorno de chamada deve executar todas as operações necessárias para tornar o dispositivo totalmente operacional.
Para obter mais informações sobre drivers que fornecem essa função de retorno de chamada, consulte Suporte ao PnP e ao Gerenciamento de Energia nodo Driver de Funções.
A função de retorno de chamada EvtCircuitPowerUp é chamada em IRQL = PASSIVE_LEVEL. Você não deve tornar essa função de retorno de chamada paginável.
Exemplo
O uso de exemplo é mostrado abaixo. Este exemplo mostra como iniciar alguns valores de temporizador para uso no código de teste.
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));
Requisitos do ACX
versão mínima do ACX: 1.0
Para obter mais informações sobre versões do ACX, consulte visão geral da versão do ACX.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | acxcircuit.h |
IRQL | PASSIVE_LEVEL |
Consulte também
- cabeçalho acxcircuit.h
- suporte a PnP e gerenciamento de energia no do Driver de Funções