"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) の経路で行われる。
