EVT_ACX_CIRCUIT_POWER_UP回调函数 (acxcircuit.h)
驱动程序使用 EVT_ACX_CIRCUIT_POWER_UP 回调在 ACXCIRCUIT 对象的电源上行路径中添加功能。
语法
EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;
NTSTATUS EvtAcxCircuitPowerUp(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
WDF_POWER_DEVICE_STATE PreviousState
)
{...}
参数
Device
与指定的 ACXCIRCUIT 关联的 WDFDEVICE 对象(WDF - 框架对象摘要)对象。
Circuit
ACXCIRCUIT 对象(ACX 对象摘要)已启动。
PreviousState
标识上一个设备电源状态的WDF_POWER_DEVICE_STATE类型枚举器。
返回值
如果调用成功,则返回 STATUS_SUCCESS
。 否则,它将返回适当的错误代码。 有关详细信息,请参阅 使用 NTSTATUS 值。
如果驱动程序失败此回调,ACX 框架将关闭关联的 ACXSTREAMS(如果有),并将 ACXCIRCUIT 标记为挂起删除。 ACX 框架不会使下划线 ACX EvtDeviceD0Entry 回调失败,这允许来自此设备的现有工作 ACXCIRCUIT 用于生成工作音频路径。
言论
若要注册 EvtCircuitPowerUp 回调函数,驱动程序必须调用 AcxCircuitInitSetAcxCircuitPnpPowerCallbacks。
如果驱动程序为设备注册了 EvtCircuitPowerUp 回调函数,则框架每次设备进入其工作状态(D0)时都会调用该函数。 发生以下情况之一时,设备将进入 D0 状态:
- 枚举设备(因为设备已插入或系统重新启动)。
- 系统及其所有设备都从低功率状态返回到其工作状态。
- 设备进入低功率状态后返回其工作状态,因为它处于空闲状态(如果设备支持低功率空闲)。
- 即插即用管理器在系统设备中重新分发了系统的硬件资源。
- 框架在设备进入工作状态(D0)状态后立即调用 EvtDeviceD0Entry 回调函数,并可供驱动程序使用,但在设备中断启用之前。 PreviousState 参数标识设备进入 D0 状态之前设备电源状态。 当框架首次调用 EvtDeviceD0Entry 时,它提供 WdfPowerDeviceD3Final 的 PreviousState 值。
此回调函数必须执行使设备完全正常运行所需的任何作。
有关提供此回调函数的驱动程序的详细信息,请参阅函数驱动程序 支持 PnP 和电源管理。
在 IRQL = PASSIVE_LEVEL 调用 EvtCircuitPowerUp 回调函数。 不应使此回调函数可分页。
例
示例用法如下所示。 此示例演示如何启动一些计时器值,以便在测试代码中使用。
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));
ACX 要求
最低 ACX 版本: 1.0
有关 ACX 版本的详细信息,请参阅 ACX 版本概述。
要求
要求 | 价值 |
---|---|
标头 | acxcircuit.h |
IRQL | PASSIVE_LEVEL |
另请参阅
- acxcircuit.h 标头
- 在函数驱动程序 中支持 PnP 和电源管理