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 を pending-delete としてタグ付けします。 ACX フレームワークは下線 ACX EvtDeviceD0Entry コールバックに失敗しません。これにより、このデバイスの既存の作業 ACXCIRCUIT を使用して、動作するオーディオ パスを構築できます。

注釈

EvtCircuitPowerUp コールバック関数を登録するには、ドライバーで AcxCircuitInitSetAcxCircuitPnpPowerCallbacks を呼び出す必要があります。

ドライバーがデバイスの EvtCircuitPowerUp コールバック関数を登録している場合、フレームワークは、デバイスが動作 (D0) 状態になるたびに関数を呼び出します。 次のいずれかが発生すると、デバイスは D0 状態になります。

  • デバイスが列挙されます (デバイスが接続されたか、システムが再起動されたため)。
  • システムとそのすべてのデバイスは、低電力状態から動作状態に戻ります。
  • デバイスがアイドル状態であったため(デバイスが低電力アイドルをサポートしている場合)、低電力状態になった後に動作状態に戻ります。
  • プラグ アンド プレイ マネージャーは、システムのデバイス間でシステムのハードウェア リソースを再配布しました。
  • フレームワークは、デバイスが動作 (D0) 状態に入った直後に EvtDeviceD0Entry コールバック関数を呼び出し、ドライバーで使用できますが、デバイスの割り込みが有効になっている前に呼び出します。 PreviousState パラメーターは、デバイスが D0 状態になるまでのデバイスの電源状態を識別します。 フレームワークが最初に EvtDeviceD0Entry を呼び出すと、PreviousState 値 WdfPowerDeviceD3Final が提供されます。

このコールバック関数は、デバイスを完全に動作させるために必要な操作を実行する必要があります。

このコールバック関数を提供するドライバーの詳細については、「 Function Driver での PnP と Power Management のサポート」を参照してください。

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 バージョンの概要」を参照してください。

要件

要件
Header acxcircuit.h
IRQL PASSIVE_LEVEL

こちらもご覧ください