アイドル時の低電力化機能のサポート

デバイスの中には、システムが作業状態のときでもスリープ状態に移行できるものがあります。このようなデバイスでは、デバイスのアイドル (未使用) 状態があらかじめ決められた (および設定可能な) 時間続くと、フレームワークがデバイスの低電力化を開始します。

これらのデバイスの中には、外部イベントの検出時にバス上でスリープ解除信号を発生させることができるものもあります。この信号にバス ドライバーが応答し、ドライバー スタックがデバイスを作業状態に戻します (外部イベントを検知しないデバイスは、フレームワークがバス ドライバーにデバイスの作業状態への復帰を開始するよう要求するまで、低電力状態のままです)。

アイドル時の低電力化が可能なデバイスでは、電源ポリシー所有者EvtDriverDeviceAdd コールバック関数で、次の手順を実行する必要があります。

  1. WdfDeviceAssignS0IdleSettings を呼び出して次の事項を指定します。

    • デバイスが移行する低電力状態
    • 低電力化を開始するまでのデバイスのアイドル状態の継続時間
    • デバイスが外部イベントを検知し、バス上でスリープ解除信号を発生させることができるようにするかどうか
    • ユーザーがデバイスのアイドル設定を制御できるようにするかどうか
    • デバイスのアイドル時の低電力化機能を有効にするかどうか

    これらの設定の詳細については、「WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体」(英語の可能性あり) を参照してください。

  2. WdfDeviceInitSetPowerPolicyEventCallbacks を呼び出して、次のイベント コールバック関数のうちデバイスに必要なものを登録します。

    • EvtDeviceArmWakeFromS0: デバイスのハードウェア (バスではない) が外部のスリープ解除イベントに応答できるようにします。
    • EvtDeviceDisarmWakeFromS0: 外部のスリープ解除イベントに応答するためのデバイスの機能 (バスの機能ではない) を無効にします。
    • EvtDeviceWakeFromS0Triggered: バスがスリープ解除信号を検出したことをドライバーに通知します。

ドライバーで (またはユーザーの指定によって) デバイスのアイドル時の低電力化機能を有効にする場合、WdfDeviceStopIdle メソッドを使用する必要が生じることがあります。このメソッドは、デバイスが作業状態 (D0) にある場合に、ドライバーが WdfDeviceResumeIdle を呼び出すまで、デバイスがアイドル状態にならないようにします。ドライバーが WdfDeviceStopIdle を呼び出したときに、デバイスは低電力状態であるが、システムは作業状態 (S0) である場合、フレームワークはバス ドライバーに対し、デバイスを作業状態 (D0) に戻すよう要求します。ドライバーで WdfDeviceStopIdle を呼び出す必要がある場合の詳細については、このメソッドのリファレンス ページを参照してください。

デバイスが低電力状態を自動的に解除できるようにする場合、デバイスのスリープを解除するためにデバイスのバス ドライバーによる処理が必要になります。バス ドライバーでは、通常、EvtDeviceEnableWakeAtBusEvtDeviceDisableWakeAtBus の各コールバック関数を指定します。これらの関数は、低電力状態を解除するためのデバイスの機能を有効化および無効化するためにバス アダプターで必要となる、すべての処理を行います。

デバイスのアイドル機能を制御するレジストリ エントリについては、「デバイスのアイドル状態およびスリープ解除動作のユーザーによる制御」を参照してください。