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 を呼び出すと、WdfPowerDeviceD3Final の PreviousState 値が提供されます。
このコールバック関数は、デバイスを完全に動作させるために必要な操作を実行する必要があります。
このコールバック関数を提供するドライバーの詳細については、「Function Driverでの 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 |
関連項目
- acxcircuit.h ヘッダー を する
- ファンクション ドライバー で PnP と電源管理をサポートする