次の方法で共有


ACPI バッテリーおよび電源サブシステムのファームウェアの実装

Windows プラットフォームでは、ACPI 仕様の説明に従って、標準化された制御メソッド インターフェイスを使用して、バッテリ デバイスと AC アダプターを ACPI 経由によりファームウェアで公開することが期待されています。

すべてのモバイル Windows プラットフォームには、1 つの電源デバイスと 1 つ以上のバッテリが必要です。 これらのサブシステムからの情報は、電源の状態をユーザーに伝えるために使用されます。 この状態には、プラットフォームが AC 電源または DC 電源のどちらで実行されているか、各バッテリの充電レベル、バッテリ充電状態などの情報が含まれます。 Windows 電源マネージャーはこの情報を集約し、Windows バッテリ メーターおよびその他の電源管理コンポーネントで利用できるようにします。

このトピックでは、プラットフォームが Windows 電源マネージャーにサブシステムの情報を公開する方法について詳しく説明します。 詳細は、ACPI 仕様の第 10 章「電源デバイス」を参照してください。

注意

この記事で説明する情報の一部は Windows に固有であり、最近の ACPI の仕様の場合については詳しく説明しません。

ACPI 電源オブジェクト

ACPI ファームウェアは、ACPI 仕様のセクション 10.3 に従って、1 つの ACPI 電源デバイスを提供して実装する必要があります。 このオブジェクトは、"ACPI0003" のハードウェア ID (_HID) を使用して自身を報告する必要があります。

メモ 複数の電源を持つシステムでは、ACPI の 1 つの電源デバイス オブジェクトを介してすべての物理電源を多重化する必要があります。 このオブジェクトは、システムの電源入力の複合状態を表す必要があります。 クライアント システムは、複数の電源デバイス オブジェクトを提供することはできません。 (複数の電源を備えるサーバー システムには、追加の電源オブジェクトが存在する場合があります。)

また、このオブジェクトは、電源 (_PSR) メソッドを実装する必要もあります。 このメソッドは、電源の状態を返し、電源が現在オンライン (AC 電源) かオフライン (バッテリ電源) かを伝えます。 _PSR メソッドは、システムが主電源に接続されている場合は、オンライン (AC 電源) のみを報告する必要があります。 _PSR の状態が変化すると、プラットフォームは ACPI 名前空間のデバイスで割り込みと Notify(0x80) コマンドを生成する必要があります。 これは、プラットフォームによって物理的な状態の変更が検出された直後に実行する必要があります。

ACPI バッテリ制御メソッド

ACPI ファームウェアは、ACPI 仕様のセクション 10.2 に従って、システム内の各バッテリの ACPI 制御メソッド オブジェクトを提供して実装する必要があります。 各バッテリ デバイスは、次のすべての操作を行う必要があります。

  • ハードウェア ID (_HID) "PNP0C0A" で身元を示します。
  • Status (_STA) メソッドを実装して、デバイスが有効、無効、または存在しないかどうかを示します。
  • Battery Information Extended (_BIX) メソッドを使用して、静的な情報を報告します。
  • バッテリ状態 (_BST) 制御メソッドを使用してバッテリ状態を報告します。
  • バッテリ トリップ ポイント (_BTP) メカニズムを使用して、充電レベル イベントをサポートします。

必要に応じて、バッテリ デバイスは、スロット ユニット番号 (_SUN) を実装するか、ユーザー インターフェイス (UI) に表示するためにバッテリの順序を示します。

次の説明では、これらのメソッドの詳細と、その Windows 固有の要件について説明します。

バッテリの静的情報の ACPI 実装

ACPI ファームウェアは、設計容量、サイクル数、シリアル番号など、バッテリに関する静的な情報を提供する各バッテリの _BIX メソッドを実装する必要があります。 次の表では、ACPI 仕様のセクション 10.2.2.2 で説明されているフィールドの定義を拡張し、この情報の Windows 固有の要件を列挙しています。

トピック 説明 Windows 固有の要件
リビジョン リビジョン_BIX 示します。 0x0 に設定する必要があります。
電力の単位 ハードウェアによって報告される単位が、mA と mAh、または mW と mWh かどうかを判断します。 単位が mW および mWh であることを示すには、0x0 に設定する必要があります。 この値は実行時に変更することはできません。
設計容量 バッテリの元の容量 (mWh) を示します。 正確な値に設定する必要があり、0x0 または 0xFFFFFFFF には設定できません。 この値は実行時に変更することはできません。
最後の完全バッテリ充電 バッテリの現在の完全充電の容量を示します。 正確な値に設定する必要があり、0x0 または 0xFFFFFFFF には設定できません。 この値は、サイクル数が増えるごとに更新する必要があります。 この値は、バッテリの放電時には一定でなければなりません。 この値は、バッテリが満充電に達した場合にのみ更新することをお勧めします。
バッテリー技術 バッテリが充電可能か 1 回限りの使用かを示します。 充電可能であることを示すには、0x1 に設定する必要があります。
設計電圧 バッテリの設計電圧を示します。 バッテリが新品の場合、設計電圧 (mV) に設定する必要があります。 0x0 または 0xFFFFFFFF に設定しないでください。 この値は実行時に変更することはできません。
警告の設計容量 OEM が提供するバッテリ低下の警告レベルを示します。 Windows はこの値を無視します。
低設計容量 システムの電源がオフになるのを防ぐために、Windows を直ちにシャットダウンまたは休止状態にする必要がある、バッテリ切れのレベルを示します。 バッテリ設計容量の 0 から 5% の範囲内の値に設定する必要があります。
バッテリ容量の粒度 1 警告の設計容量と低設計容量の間でハードウェアが検出できる、充電の最小残量を示します。 バッテリ設計容量の 1% 未満の値に設定する必要があります。
バッテリ容量の粒度 2 最後の完全充電の容量と警告の設計容量の間でハードウェアが検出できる、充電の最小残量を示します。 75 mW 以下の値 (25 wh バッテリの約 0.25%) に設定する必要があります。 バッテリ設計容量の (1/400)。
サイクル数 バッテリのサイクル数を示します。 0x0 より大きい値に設定する必要があります。 0xFFFFFFFFF に設定しないでください。
測定精度 バッテリ容量の測定精度を示します。 精度が 95% 以上であることを示す 95,000 以上に設定する必要があります。
最大サンプリング時間 2 つの連続する _BST 評価間でサポートされる最大サンプリング時間。これにより、残量の差異が示されます。 特定の要件はありません。
最小サンプリング時間 2 つの連続する _BST 評価間でサポートされる最小サンプリング時間。これにより、残量の差異が示されます。 特定の要件はありません。
最大平均間隔 バッテリ燃料計でサポートされる最大平均間隔 (ミリ秒)。 特定の要件はありません。
最小平均間隔 バッテリ燃料計でサポートされる最小平均間隔 (ミリ秒)。 特定の要件はありません。
モデル番号 OEM が提供するバッテリ モデル番号 NULL は指定できません。
シリアル番号 OEM が提供するバッテリ シリアル番号。 NULL は指定できません。
バッテリの種類 OEM が提供するバッテリの種類の情報。 特定の要件はありません。
OEM 情報 OEM が提供する情報。 特定の要件はありません。

これらの要件に加えて、プラットフォーム ファームウェアは、_BIX 内のバッテリ状態データが変更されるたびに、ACPI 名前空間のバッテリ デバイスで割り込みおよび Notify(0x81) コマンドを生成する必要があります。 これには、最後の完全充電の容量、設計容量、サイクル数が含まれます。 これは、プラットフォームによって状態の変更が検出された直後に実行する必要があります。

最後の完全充電の容量は、バッテリが最後に完全に充電された時間を保持すると予想されるエネルギーの推定量を表します。 Windows はこの値を、バッテリが充電されている場合にのみ更新されると想定します。 そのため、バッテリの放電中は、最後の完全充電の容量の値は変更してはなりません。 この値は、バッテリが満充電に達した場合にのみ更新することをお勧めします。

バッテリのリアルタイムの状態に関する情報の ACPI 実装

ACPI ファームウェアは、残量や現在の消耗速度などの、バッテリの状態に関するリアルタイム情報を提供するために、_BST メソッドをバッテリごとに実装する必要があります。 次の表では、ACPI 仕様のセクション 10.2.2.6 で説明されているフィールドの定義を拡張し、この情報の Windows 固有の要件を列挙しています。

トピック 説明 Windows 固有の要件
バッテリの状態 バッテリが現在充電中か、放電中か、またはバッテリ切れの状態かを示します。 バッテリの状態は、バッテリが充電されている場合にのみ充電を報告する必要があります。 同様に、バッテリの状態は、バッテリが放電されている場合にのみ、放電を報告する必要があります。 充電も放電もしていないバッテリは、どちらのビットも報告してはなりません。
バッテリの存在率 バッテリから、現在の消耗速度 (ミリワット) を示します。 0x0 より大きく、0xFFFFFFFF 未満の値でなければなりません。 _BIX の測定精度の値の範囲内で正確である必要があります。
バッテリ残量 バッテリ残量 (mWh) を示します。 0x0 より大きく、0xFFFFFFFF 未満でなければなりません。 _BIX の測定精度の値の範囲内で正確である必要があります。
バッテリの現在の電圧 バッテリの端子間の現在の電圧を示します。 0x0 から 0xFFFFFFFF の間の値 (ミリボルト) である必要があります。

_BST のデータが変更された場合、プラットフォームは、ACPI 名前空間のバッテリデバイスで割り込みと Notify(0x80) を生成する必要があります。 これは、プラットフォームによって物理的な状態の変更が検出された直後に実行する必要があります。 これには、充電ビット (Bit0) または放電ビット (Bit1) の "バッテリの状態" フィールドの変更が含まれます。

さらに、プラットフォームは _BTP-Battery Trip Point- メソッドを実装する必要があります。 _BTP を使用すると、Windows は残りの容量のしきい値を指定できます。このしきい値を超えると、プラットフォームは ACPI 名前空間のバッテリ デバイスで割り込みと Notify(0x80) を生成する必要があります。 _BTP メソッドでは、Windows がバッテリを定期的にポーリングする必要がなくなります。

Windows OS 固有のバッテリ制御メソッド

ACPI 仕様では、デバイス固有のメソッドまたは_DSM 制御メソッドを使用して、デバイスおよびオペレーティング システム固有の制御メソッドを提供しています。 _DSM については、ACPI 仕様の 9.14.1 セクションを参照してください。

Windows 8 では、制御メソッドのバッテリ デバイスに対して次の _DSM メソッドがサポートされています。

温度充電率の方向

トピック 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 制御メソッドのバッテリ ドライバー サポートの拡張を示す GUID。
リビジョン ID 0 この機能の最初のリビジョン。
関数インデックス 0x1 バッテリ充電スロットルを設定します
引数 温度制限 温度充電制限を示す 0 から 100 までの整数値。 値を 40% に設定すると、バッテリは最大充電率の 40% で充電されます。 値を 0% に設定すると、このメソッドが再度呼び出されるまで、バッテリの充電を停止する必要があることを示します。
戻り値 なし 該当なし

ユーザーが保守点検できるバッテリ

トピック 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 制御メソッドのバッテリ ドライバー サポートの拡張を示す GUID。
リビジョン ID 0 この機能の最初のリビジョン。
関数インデックス 0x2 この_DSM は、バッテリ デバイスがユーザーが保守点検できるかどうかを OSPM が判断するためのものであることを示します。
引数 なし 引数は必要ありません。
戻り値 1 つの整数を含むパッケージ。 ユーザーがバッテリを保守点検できず、エンドユーザーがバッテリを交換できない場合、またはエンドユーザーが追加の工具を使用して交換できる場合、0x0。 追加の工具を使用せずにエンドユーザーがバッテリを交換できる場合、0x1。

充電ウォッチドッグが必要です

トピック 説明
UUID 4c2067e3-887d-475c-9720-4af1d3ed602e Windows 制御メソッドのバッテリ ドライバー サポートの拡張を示す GUID。
リビジョン ID 0 この機能の最初のリビジョン。
関数インデックス 0x3 この_DSM は、制御メソッド バッテリが高電流充電を維持するために定期的なウォッチドッグのリセットを必要とするかどうか、およびウォッチドッグをリセットする必要がある期間を OSPM が判断するためのものであることを示します。
引数 なし 引数は必要ありません。
戻り値 1 つの整数を含むパッケージ。 バッテリがウォッチ ドッグサービスを必要としない場合、0x0。 0x0000001e と 0x12C を含む値は、ポーリング間隔の最大値 (秒) を示します。 それ以外の値は無視され、0x0 として扱われ、ウォッチドッグのリセットは必要ありません。 有効なウォッチドッグ間隔が指定されている場合、_BST メソッドの BatteryState の値が充電に設定されているときは、指定されたウォッチドッグ値より短い間隔で_BST メソッドが実行されます。 この値の動的更新はサポートされていません。

Windows には、デスクトップ トレイ アプリケーションにシステム バッテリの詳細ビューがあります。 各バッテリは、現在の状態と共に、ユーザー インターフェイスに一覧表示されます。 次の UI の例は、2 つのバッテリを示しています。

Windows がバッテリを表示する順序は、ファームウェアによって指定できます。 これを実現するには、ACPI 仕様の 6.1.11 セクションで定義されているように、スロット ユーザー番号 (_SUN) メソッドを使用します。 _SUN メソッドは、バッテリの一意の ID を表す整数を返します。 Windows は、_SUN メソッドの値に基づいて、各バッテリ オブジェクトを昇順で一覧表示します。

_SUN メソッドを含むバッテリ オブジェクトがある場合は、すべてのバッテリ オブジェクトも _SUN メソッドを提供する必要があります。 Windows は、一部のバッテリに _SUN メソッドがあるものの、その他のバッテリにはないというケースはサポートしません。 _SUN オブジェクトが指定されていない場合、Windows デバイス インスタンスの完全なパスに基づいてバッテリが並べ替えられます。この構成はサポートされていますが、推奨されません。