共用方式為


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

WDFDEVICE 物件 (WDF - 與 指定 ACXCIRCUIT 相關聯的架構物件摘要) 。

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 和電源管理

EvtCircuitPowerUp 回呼函式會在 IRQL = PASSIVE_LEVEL呼叫。 您不應該讓這個回呼函式可分頁。

範例

範例使用方式如下所示。 此範例示範開始一些定時器值,以用於測試程序代碼。

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

另請參閱