Share via


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 de Objetos de Estrutura) associado ao ACXCIRCUIT especificado.

Circuit

O objeto ACXCIRCUIT (descrito em Resumo de Objetos ACX) ligado.

PreviousState

Um enumerador com tipo WDF_POWER_DEVICE_STATE que identifica o estado de energia do dispositivo anterior.

Retornar valor

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á ACXCIRCUIT como pending-delete. A estrutura ACX não falha no retorno de chamada ACX EvtDeviceD0Entry sublinhado, permitindo que ACXCIRCUITs de trabalho existentes desse dispositivo sejam usados para criar caminhos de áudio em funcionamento.

Comentários

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 dos seguintes procedimentos:

  • Um dispositivo é enumerado (porque o dispositivo foi conectado ou o sistema foi reinicializado).
  • O sistema e todos os seus dispositivos retornam para seus estados de trabalho de um estado de baixa energia.
  • O dispositivo retorna ao seu estado de trabalho depois de entrar em um estado de baixa energia porque estava ocioso (se o dispositivo oferecer suporte a ociosidade de baixa energia).
  • 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 a PnP e Gerenciamento de Energia no 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

Confira também