共用方式為


電源和子系統收費實作

Windows 平臺中的電池電源和充電子系統應該實作 ACPI 控制方法電池介面。 Windows 會使用此介面從電池子系統取得狀態資訊,以及接收電池事件的通知。

Windows 電池和電源子系統驅動程式模型

Windows 提供強固的電池和電源子系統裝置磁碟機模型。 電源管理資訊會透過電池設備磁碟機傳達給 Windows 電源管理員。 此資訊接著會透過電池裝置 IRP 和一組電源管理軟體 API 匯總並公開給 Windows 使用者介面。

適用于 Windows 的電池驅動程式模型是埠/迷你埠模型;也就是說,會定義電池模型和介面,以便透過迷你埠驅動程式公開新的電池類型,如下列區塊圖所示。 不過,實際上只會使用 ACPI 控制方法電池介面。 支援人類介面裝置 (HID) USB 連接之無中斷電源供應器 (UPS) 裝置的電池迷你埠驅動程式,但此驅動程式不會用於系統電池。

所有 Windows 平臺預期都會透過 ACPI 控制方法電池介面公開其電池和充電子系統。 電池迷你埠介面不應該用於平臺特定的電池充電子系統。 ACPI 5.0 規格會定義控制項方法,讓 Windows 取得電池資訊和目前狀態。 此外,ACPI 介面會提供事件,讓硬體平臺通知 Windows 電池和電源變更,例如從 AC 轉換為電池電源。

取得電池狀態

Windows 電源管理員會定期向電池要求狀態資訊,包括剩餘的充電容量和目前的清空率。 此要求源自于電源管理員本身、較高層級的使用者介面元件或應用程式中。 電源管理員會將要求轉換成 I/O 要求封包, (IRP) 到電池裝置,然後由 Windows 控制方法電池驅動程式轉換成適當的控制方法,Cmbatt.sys。 方法會執行 ,並傳回驅動程式堆疊的結果。

在狀態資訊的情況下,電池狀態 (_BST) 方法是適當的控制方法。 _BST 方法需要 ACPI 韌體,才能從電源子系統取得最新資訊。 _BST方法的結果是包含必要資訊的緩衝區,該資訊會傳回給 control-method 電池驅動程式。 control-method 電池驅動程式會將緩衝區內容轉換為電池驅動程式和 Windows 電源管理員所需的格式。

狀態變更通知

電源和電池子系統會針對狀態變更對作業系統產生數個通知,包括充電層級的變更、從 AC 轉換為電池電源等等。 不想要持續輪詢這些狀態變更,因為這樣做需要高輪詢頻率。 因此,硬體平臺必須實作事件驅動模型,以通知 Windows 電源和電池子系統的變更。

當電池狀態 (包括剩餘容量或充電狀態) 變更時,ACPI 韌體必須在控制方法電池裝置上發出通知 (0x80) 命令。 回應中,Windows 中的 Control 方法電池驅動程式會評估_BST方法,並將更新的資訊傳回給電源管理員。

當電池靜態資料變更 (包括上一個完整充電容量、設計容量和迴圈計數) 時,需要 ACPI 韌體,才能在控制方法電池裝置上發出通知 (0x81) 命令。 回應中,Windows 中的 Control Method Battery 驅動程式會評估_BIX方法,並將更新的資訊傳回給電源管理員。

ACPI Notify 事件會透過系統控制中斷 (SCI) 、內嵌控制器配備的平臺,或透過一般用途 I/O (GPIO) 發出訊號,如果是具有電池子系統硬體直接連線到核心晶片的平臺。