この章の目次にもどる
前頁:第7章 RS-232Cにもどる
次頁:第9章 スクリーン(ディスプレイ)にすすむ

第8章 電源管理(パワーマネージメント)

8.1 対象デバイス

8.2 固有機能

8.3 起動パラメータ

なし。
OS 核に組み込まれて内部的に起動される。

8.4 属性データ

以下の属性データをサポートする。

R 読み込みのみ可
W 書き込みのみ可
RW読み込み / 書き込み可
/* power データ番号 */
typedef enum {
    /* 共通属性 */
    DN_PWEVENT    = DN_EVENT,
    /* 個別属性 */
    DN_PWSTATE    = -100,
    DN_PWMODE     = -101,
    DN_PWREQUEST  = -102,
} PowerDataNo;
DN_PWEVENT :
事象通知用メッセージバッファID (RW)
data:   ID
事象通知用メッセージバッファID を設定、または取り出す。
DN_PWSTATE :
電源状態の取り出し (R)
 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;
現在の電源状態を取り出す。
バッテリユニット数 <= 1 のときは、 PowerState[0] のみが 取り出される。バッテリユニット数 > 1 のときは、 要求したデータサイズを超えない範囲で、 PowerState[0],[1],[2] が取り出される。 電源の供給状態に応じて以下の値となる。
  chargebatkindbatteryextpw
AC のみ 0BK_nonePC_DISCONNECTPC_CONNECT
AC + バッテリ 0〜100BK_xxxPC_CHARGEPC_CONNECT
100BK_xxxPC_CONNECTPC_CONNECT
バッテリのみ 0〜100BK_xxxPC_CONNECTPC_DISCONNECT
不明 255BK_unknownPC_unknownPC_unknown
DN_PWMODE :
電源制御モード (RW)
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 :
電源制御要求 (W)
data:
typedef enum {
    PW_SUSREJECT    = 0,    /* サスペンド要求拒否   */
    PW_SUSREQ       = 1,    /* サスペンド要求   */
} PowRequest;
電源制御要求を行う。
PW_SUSREJECT :
DE_POWEROFF, DE_POWERSUS の事象通知によるサスペンド 要求を拒否する。事象通知がなかった時は何もしない。
PW_SUSREQ :
強制サスペンドを要求する。
強制サスペンドが禁止の時は何もしない。

8.5 固有データ

なし

8.6 基本操作

OPEN特に何もしない。
ハードウェアの初期化は起動時に行われる。
CLOSE, CLOSEALL特に何もしない。
ABORT特に何もしない(待ちに入ることはないため)
READ / WRITE(上記参照)
SUSPEND / RESUME特に何もしない。
ただし、サスンペンド中の動作は事象検出の動作は行われない。

8.7 事象通知

以下の事象を通知する。

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 :
電源の残量が一定値 ( 5 % 程度 ) 以上から以下に遷移したことを通知(警告)する。
通知される残量の具体的な値はハードウェアや実装に依存する。
stat: 有効
DE_POWERFAIL :
電源の残量がわずかのため、緊急サスペンド要求が発生したことを通知する。
stat: 無効(不明状態)
DE_POWERSUS :
ユーザ操作が一定時間ないことによる自動サスペンド要求が発生したことを通知する。
stat: 無効(不明状態)
DE_POWERUPTM :
システム時計の更新要求が発生したことを通知する。 実際に更新が必要かどうかに無関係に、周期的に通知されることもある。
stat: 無効(不明状態)

8.8 エラーコード

デバイスドライバ共通仕様を参照のこと。

8.9 インプリメント依存事項 ( PC/AT 版 )

電源管理ドライバ

システム全体構成

システムの電源管理機能に関する全体の構成を以下に示す。 通常のサスペンド処理は、(1)〜(8) の経路で行われる。

電源管理の全体構造
図 13 : 電源管理の全体構造

この章の目次にもどる
前頁:第7章 RS-232Cにもどる
次頁:第9章 スクリーン(ディスプレイ)にすすむ