"power"
1 つに固定。
nowait
モードは意味を持たず、無視される。
通常は、メモリ内容を保持するための最低限の電源が 供給されているが、ハードディスクにメモリ内容を保存 して電源を完全にオフするハイバーネーション状態も サスペンド状態に含まれる。
サスペンド状態への移行要因により以下を定義する。
なし。
OS 核に組み込まれて内部的に起動される。
以下の属性データをサポートする。
R | 読み込みのみ可 |
W | 書き込みのみ可 |
RW | 読み込み / 書き込み可 |
/* power データ番号 */ typedef enum { /* 共通属性 */ DN_PWEVENT = DN_EVENT, /* 個別属性 */ DN_PWSTATE = -100, DN_PWMODE = -101, DN_PWREQUEST = -102, } PowerDataNo;
DN_PWEVENT :
data: ID事象通知用メッセージバッファID を設定、または取り出す。
DN_PWSTATE :
data: PowerState[0]: 全体の状態 PowerState[1]: バッテリユニット 1 の状態 PowerState[2]: バッテリユニット 2 の状態 typedef struct { UW charge:8; /* バッテリー残り容量 */ /* 0〜100(%), 255:不明 */ BatKnd batkind:8; /* バッテリーの種類 */ PowCon battery:2; /* バッテリー接続状態 */ PowCon extpw:2; /* 外部(AC)電源状態 */ UW subbat:1; /* 副電池異常のとき 1 */ UW reserve:11; /* 予約:常に0 */ } PowerState; typedef enum { BK_none = 0, /* バッテリなし */ BK_DRY = 1, /* 乾電池 */ BK_NiCd = 2, /* ニッカド電池 */ BK_NiMH = 3, /* ニッケル水素電池 */ BK_unknown = 255 /* 不明 */ } BatKnd; typedef enum { PC_DISCONNECT = 0, /* 切断中 / 未使用 */ PC_CONNECT = 1, /* 接続中 / 供給中 */ PC_CHARGE = 2, /* 充電中 */ PC_unknown = 3 /* 不明 */ } PowCon;現在の電源状態を取り出す。
PowerState[0]
のみが
取り出される。バッテリユニット数 > 1 のときは、
要求したデータサイズを超えない範囲で、
PowerState[0],[1],[2]
が取り出される。
電源の供給状態に応じて以下の値となる。
charge | batkind | battery | extpw | |
---|---|---|---|---|
AC のみ | 0 | BK_none | PC_DISCONNECT | PC_CONNECT |
AC + バッテリ | 0〜100 | BK_xxx | PC_CHARGE | PC_CONNECT |
100 | BK_xxx | PC_CONNECT | PC_CONNECT | |
バッテリのみ | 0〜100 | BK_xxx | PC_CONNECT | PC_DISCONNECT |
不明 | 255 | BK_unknown | PC_unknown | PC_unknown |
DN_PWMODE :
data: typedef struct { UW exist:1; /* 電源管理機能の有無 */ UW enable:1; /* 電源管理対応 */ UW idle:1; /* 低消費電力モード */ UW standby:1; /* 自動スタンバイ */ UW suspend:1; /* 自動サスペンド */ UW ringrsm:1; /* リングレジューム */ UW rsv1:2; /* 予備: 常に0 */ UW inhibit:1; /* 使用禁止 */ UW reserve:23; /* 予備: 常に0 */ } PowerMode;現在の電源制御モードを設定、または取り出す。
exist | 電源制御機能の有無、または利用の可否。 0 : 無(利用不可)、1 : 有(利用可)。 |
enable | 電源制御機能への対応。 0 : 対応しない、1 : 対応する。 |
idle | アイドル(無負荷)時の低消費電力状態への移行。 0 : 禁止、1 : 許可 |
standby | 自動スタンバイ状態への移行。 0 : 禁止、1 : 許可 |
suspend | 自動サスペンド状態への移行。 0 : 禁止、1 : 許可 |
ringrsm | リングレジューム機能。 0 : 禁止、1 : 許可 |
inhibit | 電源管理機能の使用を完全に禁止。 0 : 使用許可、1 : 使用禁止 |
DN_PWREQUEST :
data: typedef enum { PW_SUSREJECT = 0, /* サスペンド要求拒否 */ PW_SUSREQ = 1, /* サスペンド要求 */ } PowRequest;電源制御要求を行う。
PW_SUSREJECT :
DE_POWEROFF, DE_POWERSUS
の事象通知によるサスペンド
要求を拒否する。事象通知がなかった時は何もしない。
PW_SUSREQ :
なし
OPEN | 特に何もしない。 ハードウェアの初期化は起動時に行われる。 |
CLOSE, CLOSEALL | 特に何もしない。 |
ABORT | 特に何もしない(待ちに入ることはないため) |
READ / WRITE | (上記参照) |
SUSPEND / RESUME | 特に何もしない。 ただし、サスンペンド中の動作は事象検出の動作は行われない。 |
以下の事象を通知する。
typedef struct { DevEvtKind kind; /* 事象種別 */ ID devid; /* デバイス ID */ PowerState stat; /* 電源状態 */ } PowerEvt; kind: DE_POWEROFF 0x31 電源スイッチオフ(強制サスペンド) DE_POWERLOW 0x32 電源残量警告 DE_POWERFAIL 0x33 電源異常(緊急サスペンド) DE_POWERSUS 0x34 自動サスペンド DE_POWERUPTM 0x35 時計更新
DE_POWEROFF :
stat: 無効(不明状態)
DE_POWERLOW :
stat: 有効
DE_POWERFAIL :
stat: 無効(不明状態)
DE_POWERSUS :
stat: 無効(不明状態)
DE_POWERUPTM :
stat: 無効(不明状態)
デバイスドライバ共通仕様を参照のこと。
DE_POWERUPTM
( システム時計の更新要求 ) の事象に関しては、
安全のため、必ず周期的に発生するようにしている。
システムの電源管理機能に関する全体の構成を以下に示す。 通常のサスペンド処理は、(1)〜(8) の経路で行われる。