次の方法で共有


電源および充電サブシステムの実装

Windows プラットフォームでバッテリー電源および充電サブシステムを使用する場合は、ACPI コントロール メソッド バッテリー インターフェイスが実装されます。 Windows では、このインターフェイスを使用して、バッテリー サブシステムから状態情報を取得し、バッテリー イベントの通知を受信します。

Windows バッテリーおよび電源サブシステム ドライバー モデル

Windows は、堅牢なバッテリーおよび電源サブシステム デバイス ドライバー モデルを備えています。 電源管理情報は、バッテリー デバイス ドライバー経由で Windows 電源マネージャーに伝達されます。 次に、この情報は集約され、バッテリー デバイスの IRP と電源管理ソフトウェア API セットを介して Windows ユーザー インターフェイスに公開されます。

Windows 用のバッテリー ドライバー モデルはポート/ミニポート モデルです。つまり、次のブロック図に示すように、バッテリー モデルとインターフェイスは、ミニポート ドライバーを介して新しいバッテリーの種類を公開できるよう定義されています。 ただし、実際には、ACPI コントロール メソッド バッテリー インターフェイスだけが使用されます。 USB 接続の無停電電源装置 (UPS) デバイス用のヒューマン インターフェイス デバイス (HID) バッテリー ミニポート ドライバーがサポートされます。しかし、このドライバーはシステム バッテリーには使用されません。

すべての Windows プラットフォームは、そのバッテリーおよび充電サブシステムを ACPI コントロール メソッド バッテリー インターフェイスを介して公開することが求められています。 プラットフォーム固有のバッテリー充電サブシステムに対して、バッテリー ミニポート インターフェイスを使用すべきではありません。 ACPI 5.0 の仕様には、Windows がバッテリー情報および現在の状態を取得できるようにするための制御方法が定義されています。 さらに、ACPI インターフェイスには、ハードウェア プラットフォームがバッテリーと電源の変更 (AC からバッテリー電源への切り替えなど) を Windows に通知できるようにするためのイベントが用意されています。

バッテリー状態の取得

バッテリーは、状態情報 (残りの充電容量や現在のドレイン速度など) を定期的に Windows 電源マネージャーから要求されます。 この要求は、上位レベルのユーザー インターフェイス コンポーネントである電源マネージャー自体で、またはアプリケーション内で発生します。 この要求は、電源マネージャーによって、バッテリー デバイスへの I/O 要求パケット (IRP) に変換されてから、Windows コントロール メソッド バッテリー ドライバーである Cmbatt.sys によって適切なコントロール メソッドに変換されます。 このメソッドが実行され、その結果がドライバー スタックに返されます。

状態情報の場合、バッテリー状態 (_BST) メソッドが適切なコントロール メソッドとなります。 この _BST メソッドでは、ACPI ファームウェアで電源サブシステムから現在の情報を取得する必要があります。 _BST メソッドの結果は必要な情報を含むバッファーであり、これはコントロール メソッドのバッテリー ドライバーに返されます。 このコントロール メソッドのバッテリー ドライバーによって、バッファーの内容が、バッテリー ドライバーと電源マネージャーで必要とされる形式に変換されます。

状態変化の通知

電源サブシステムとバッテリー サブシステムでは、オペレーティング システムに対して、状態の変化 (充電レベルの変化、AC からバッテリー電源への切り替えなど) に関するいくつかの通知を生成します。 これらの状態変化を継続的にポーリングすることは、高いポーリング頻度を必要とするため、望ましくありません。 したがって、ハードウェア プラットフォームでは、電源およびバッテリーサブシステムにおける変更を Windows に通知するためのイベント駆動型モデルを実装する必要があります。

バッテリーの状態 (残りの容量または充電状態を含む) が変化した場合、ACPI ファームウェアからコントロール メソッド バッテリー デバイスに対して Notify (0x80) コマンドが発行される必要があります。 それに応答して、Windows のコントロール メソッド バッテリー ドライバーでは、_BST メソッドを評価し、更新された情報を電源マネージャーに返します。

バッテリーの静的データ (最後の完全充電容量、設計容量、サイクル数を含む) が変更された場合、ACPI ファームウェアから、コントロール メソッド バッテリー デバイスに対して Notify(0x81) コマンドが発行される必要があります。 それに応答して、Windows のコントロール メソッド バッテリー ドライバーでは _BIX メソッドを評価し、更新された情報を電源マネージャーに返します。

ACPI Notify イベントは、システム制御割り込み (SCI) を介して (組み込みコントローラー搭載プラットフォームの場合)、または汎用 I/O (GPIO) を介して (コア シリコンにバッテリー サブシステム ハードウェアが直接接続されているプラットフォームの場合)、通知されます。