embeddedなブログ

組み込みシステムに関することや趣味に関することをダラダラと書いていきます(^^)

Windows CEにおけるパワーマネージメントの実装

2011-10-31 10:38:32 | Windows Embedded CompactまたはCE

Windows CEのパワーマネージメント(パワマネ)は、大きく2つの区分に分けて定義されます。更にこれらの区分間の関連付けが定義され、その関連付けに従ってパワマネが実行されます。

まず、その区分について説明します。2つの区分は、システムとデバイスです。

  • システム電源管理
    • システム全体の電源状態を定義します。
    • On(電源ON)、Suspended(サスペンド)、UserIdle(ユーザーアイドル)、Off(電源OFF)などいくつかの状態を名前で定義します。
  • デバイス電源管理
    • 個々のデバイスの電源状態を定義します。
    • ディスプレイ、ネットワークコントローラ、USBコントローラなどデバイス毎に状態を定義します。
    • D4/D3/D2/D1/D0の5つの状態で定義されます。
      • D0(Full On) 電源がONの状態です。最も電力が消費される状態
      • D1(Low On) すべての機能が動作しているが、一部低電力モードになっている状態
      • D2(Standby) 一部のデバイスだけが電源供給されている状態。キーボード操作などで復帰できる。
      • D3(Sleep) スリープ状態。一部のデバイスだけが電源供給されている。デバイスからの割り込みなどでのみ復帰できる。
      • D4(Off) 電源OFFの状態。

そして、上記のシステムと個々のデバイスの電源状態の関連付けを定義します。例えば、システムの電源状態がOnのときには、全てのデバイスはD0状態とするなど。 この定義は以下のようにレジストリで実装できます。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\On]
    "Default"=dword:0           ; D0
    "Flags"=dword:10000         ; POWER_STATE_ON

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\UserIdle]
    "Default"=dword:1           ; D1
    "Flags"=dword:11000000      ; POWER_STATE_USERIDLE | POWER_STATE_PASSWORD

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\SystemIdle]
    "Default"=dword:2           ; D2
    "Flags"=dword:01000000      ; POWER_STATE_USERIDLE

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Suspend]
    "Default"=dword:3           ; D3
    "Flags"=dword:200000        ; POWER_STATE_SUSPEND

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Reboot]
    "Default"=dword:4           ; D4
    "Flags"=dword:800000        ; POWER_STATE_RESET

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Off]
    "Default"=dword:4           ; D4
    "Flags"=dword:20000         ; POWER_STATE_OFF


Default値は、デバイスがデフォルトで取る電源状態(0ならD0)です。Flagsは、SetSystemPowerState関数で渡される引数で以下のように定義されています。

#define POWER_STATE(f)           ((f) &  0xFFFF0000)        // power state mask
#define POWER_STATE_ON           (DWORD)(0x00010000)        // on state
#define POWER_STATE_OFF          (DWORD)(0x00020000)        // no power, full off
#define POWER_STATE_CRITICAL     (DWORD)(0x00040000)        // critical off
#define POWER_STATE_BOOT         (DWORD)(0x00080000)        // boot state
#define POWER_STATE_IDLE         (DWORD)(0x00100000)        // idle state
#define POWER_STATE_SUSPEND      (DWORD)(0x00200000)        // suspend state
#define POWER_STATE_UNATTENDED   (DWORD)(0x00400000)        // Unattended state.
#define POWER_STATE_RESET        (DWORD)(0x00800000)        // reset state
#define POWER_STATE_USERIDLE     (DWORD)(0x01000000)        // user idle state
#define POWER_STATE_BACKLIGHTON  (DWORD)(0x02000000)        // device scree backlight on
#define POWER_STATE_PASSWORD     (DWORD)(0x10000000)        // This state is password protected.


すべてのデバイスの電源状態が必ずデフォルト通りであるとは限らず、一部例外的な電源状態にする必要もあります。これらの定義方法については、次回説明をします。

 


最新の画像もっと見る