電源スイッチによる電源オフをサスペンド状態にするには
- お世話になっております、鏑木と申します。
現在、Windows CE 6.0にてVisual Studio 2005のC++のアプリケーションを開発しております。
アプリケーションの開発において、お聞きしたいことがあり、こちらで質問させて頂きたいと思い、投稿致しました。
お聞きしたい内容はタイトルの通りなのですが、こればアプリケーションによるものなのかOSによるものなのか
いまいちはっきりせず、とりあえずあいまいに質問させて頂きました。
目的とする動作は、ボードの電源スイッチをOFFにすると、現状ではそのまま電源がオフになる。(立ち上げ時に
OSの初期化等をする)のですが、これをサスペンド状態へ移行するようにするにはどのようにすればよいでしょうか?
サスペンド状態にさせたい理由は、OSの立ち上げ時間の短縮の為です。
この方法がOSのBSPの修正なのか、それともVC++のアプリケーションの何らかの関数で出来るものなのか分かりません。
ご存じの方がいらっしゃいましたら、ご意見を頂きたいと思っております。
どうぞよろしくお願い致します。
尚、開発環境は
Windows CE 6.0
Visual Studio 2005
です。
すべての返信
- ボードメーカーに確認したほうが良いのではないでしょうか。
なお、あくまでフォーラムはCE上のアプリケーション開発に関する情報交換の場となっております。
サポートサイトではありませんので、プラットフォームについてのご質問、業務開発における質問等は
開発サポート等をご利用ください。
マイクロソフト エバンジェリスト 高橋 忍 - 高橋 忍様
お門違いの質問だったようですね。申し訳ございませんでした。 はい、サスペンド・リジュームはOS側(BSP)に実装するもので、アプリケーション側でどうこうできる種類のものではありません。
一般的にサスペンドの実装は
1. サスペンドの実装が必要なデバイスドライバにD3ステートを実装
2. カーネル内のOEMPowerOff(の前半)を実装
3. 必要に応じてパワーマネージャ(PM.DLL)をカスタマイズということが必要で、以下のいずれか、あるいは複数のサスペンドシナリオをサポートするようにします。
- 電源OFFキーでサスペンド
どれかの(たとえば電源スイッチの)デバイスドライバからSetSystemPowerState("SUSPEND")を呼び出す。- アプリケーションからサスペンド
アプリケーションからSetSystemPowerState("SUSPEND")を呼び出す。
Explorerシェルや独自シェルからSUSPENDを実行する場合はこれ- パワーマネージャー(PM.DLL)のアイドルタイマーでサスペンド
PMのレジストリ設定
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\Timeouts]
"ACUserIdle" = dword:3c; in seconds
"ACSystemIdle" = dword:12c; in seconds
"ACSuspend" = dword:0; in seconds
"BattUserIdle" = dword:3c; in seconds
"BattSystemIdle" = dword:b4; in seconds
"BattSuspend" = dword:12c; in seconds
でタイムアウト時間を設定し、これらがタイムアウトしたらサスペンドまた、サスペンドリジュームを行う機器の場合、たいていはバッテリドライバを実装する必要があるかと思いますが、その場合
- バッテリ残量が一定値を下回ったらサスペンド
Explorerシェルや独自シェルのバッテリ監視スレッドでSetSystemPowerState("SUSPEND")を行いますを実装します。
一方リジューム側の実装は4. リジュームを行うイベントを決定する
5. リジュームイベント発生時にCPU割り込みが発生するようにハードウエアを調整(設計)
6. カーネル内にリジューム処理をOEMPowerOff(の後半)に実装
7. もちろん、1.でサスペンド処理を実装したドライバにもD0ステートでリジュームを実装のようになります。
たとえば
- 電源ONキーでリジューム
- モデムの着信でリジューム
- キーボード入力、タッチパネル入力でリジューム
- リアルタイムクロックで指定時刻になったらリジューム
などのイベントを割り込みで受け取れる(あるいはCPUによっては特定GPIOにアサインする)ハードウエアがある場合にこのようなドライバ実装が可能になります。
このように実装されたBSPを使ってOSをビルドすると、それはサスペンド・リジューム対応のOSだということになります。
hnakayam


