EVT_ACX_CIRCUIT_POWER_UP función de devolución de llamada (acxcircuit.h)
El controlador usa la EVT_ACX_CIRCUIT_POWER_UP devolución de llamada para agregar funcionalidad en la ruta de acceso de encendido de un objeto ACXCIRCUIT.
Sintaxis
EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;
NTSTATUS EvtAcxCircuitPowerUp(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
WDF_POWER_DEVICE_STATE PreviousState
)
{...}
Parámetros
Device
Objeto WDFDEVICE (descrito en WDF - Resumen de objetos de marco) asociado al ACXCIRCUIT especificado.
Circuit
El objeto ACXCIRCUIT (descrito en Resumen de objetos ACX) se ha encendido.
PreviousState
Enumerador con tipo WDF_POWER_DEVICE_STATE que identifica el estado de alimentación del dispositivo anterior.
Valor devuelto
Devuelve STATUS_SUCCESS
si la llamada se realizó correctamente. De lo contrario, devuelve un código de error adecuado. Para obtener más información, vea Uso de valores NTSTATUS.
Si el controlador produce un error en esta devolución de llamada, el marco ACX apaga el ACXSTREAMS asociado si existe y etiqueta ACXCIRCUIT como pendiente de eliminación. El marco ACX no produce un error en la devolución de llamada DE ACX EvtDeviceD0Entry, lo que permite que los ACXCIRCUITs de trabajo existentes desde este dispositivo se usen para crear rutas de audio de trabajo.
Comentarios
Para registrar una función de devolución de llamada EvtCircuitPowerUp, un controlador debe llamar a AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.
Si el controlador ha registrado una función de devolución de llamada EvtCircuitPowerUp para un dispositivo, el marco llama a la función cada vez que el dispositivo entra en su estado de trabajo (D0). Un dispositivo entrará en el estado D0 cuando se produzca una de las siguientes acciones:
- Se enumera un dispositivo (porque el dispositivo se ha conectado o se ha reiniciado el sistema).
- El sistema y todos sus dispositivos vuelven a sus estados de trabajo desde un estado de bajo consumo.
- El dispositivo vuelve a su estado de trabajo después de haber entrado en un estado de bajo consumo porque estaba inactivo (si el dispositivo admite inactividad de bajo consumo).
- El administrador de Plug and Play ha redistribuido los recursos de hardware del sistema entre los dispositivos del sistema.
- El marco llama a la función de devolución de llamada EvtDeviceD0Entry inmediatamente después de que el dispositivo entre en su estado de funcionamiento (D0) y está disponible para el controlador, pero antes de que se hayan habilitado las interrupciones del dispositivo. El parámetro PreviousState identifica el estado de alimentación del dispositivo en el que estaba el dispositivo antes de entrar en el estado D0. Cuando el marco llama por primera vez a EvtDeviceD0Entry, proporciona un valor PreviousState de WdfPowerDeviceD3Final.
Esta función de devolución de llamada debe realizar las operaciones necesarias para que el dispositivo esté totalmente operativo.
Para obtener más información sobre los controladores que proporcionan esta función de devolución de llamada, consulte Compatibilidad con PnP y Administración de energía en el controlador de funciones.
Se llama a la función de devolución de llamada EvtCircuitPowerUp en IRQL = PASSIVE_LEVEL. No debe hacer que esta función de devolución de llamada se pueda paginar.
Ejemplo
A continuación se muestra el uso de ejemplo. En este ejemplo se muestra cómo iniciar algunos valores de temporizador para usarlos en el código de prueba.
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 de ACX
Versión mínima de ACX: 1.0
Para obtener más información sobre las versiones de ACX, consulte Introducción a la versión de ACX.
Requisitos
Requisito | Valor |
---|---|
Header | acxcircuit.h |
IRQL | PASSIVE_LEVEL |