ACPI 電池和電源子系統韌體實作
Windows 平臺預期會透過 ACPI 公開其電池裝置和 AC 配接器,方法是使用標準化的控制方法介面,如 ACPI 規格中所述。
每個行動裝置 Windows 平臺都必須有一個電源裝置和一或多個電池。 來自這些子系統的資訊可用來將電源狀態傳達給使用者。 此狀態包含這類資訊,例如平臺是否在 AC 或 DC 電源上執行、每個電池的充電等級,以及電池充電狀態。 Windows 電源管理員會匯總這項資訊,並讓它可供 Windows 電池計量和其他電源管理元件使用。
本主題詳細說明平臺如何向 Windows 電源管理員公開電源子系統資訊。 如需詳細資訊,請參閱 ACPI 規格中的第 10 章 Power Source Devices。
注意
本文中所述的一些資訊是 Windows 特有的資訊,而且在最近的 ACPI 規格中並未詳述。
ACPI 電源供應器物件
ACPI 韌體必須針對 ACPI 規格的 10.3 節提供並實作單一 ACPI 電源裝置。 此物件必須以硬體識別碼 (_HID) 「ACPI0003」 回報本身。
注意 對於具有多個電源的系統,所有實體電源都必須透過 ACPI 中的單一電源裝置物件進行多工處理。 這個物件必須代表系統的電源輸入綜合狀態。 用戶端系統不得提供多個電源裝置物件。 (其他電源物件可能存在於有多個電源供應器的伺服器系統上。)
這個物件也必須實作 Power Source (_PSR) 方法。 此方法會傳回電源的狀態,並傳達電源目前在線上 (AC 電源) 或電池電源) 離線 (。 當系統連線到主要電源時,_PSR方法只能回報線上 (AC 電源) 。 當_PSR的狀態變更時,平臺必須在 ACPI 命名空間的裝置上產生中斷和 Notify (0x80) 命令。 這必須在平臺偵測到實體狀態變更之後立即執行。
ACPI 電池控制方法
ACPI 韌體必須針對 ACPI 規格的 10.2 節中每個電池提供並實作 ACPI 控制方法物件。 每個電池裝置都必須執行下列所有動作:
- 使用 「PNP0C0A」 的硬體識別碼 (_HID) 來識別本身。
- 實作 Status (_STA) 方法,指出裝置是否已啟用、停用或不存在。
- 使用電池資訊擴充 (_BIX) 方法來報告靜態資訊。
- 使用電池狀態 (_BST) 控制方法回報電池狀態。
- 使用電池車程點 (_BTP) 機制支援充電層級事件。
或者,電池裝置可以實作插槽單位號碼 (_SUN) 或指出使用者介面中顯示 (UI) 的電池順序。
下列討論提供這些方法的詳細資料,並描述其 Windows 特定需求。
電池靜態資訊的 ACPI 實作
ACPI 韌體必須為每個電池實作_BIX方法,以提供電池的靜態資訊,包括設計容量、迴圈計數和序號。 下表會展開 ACPI 規格 10.2.2.2 節中所述欄位的定義,並列舉此資訊的 Windows 特定需求。
主題 | 描述 | Windows 特定需求 |
---|---|---|
修訂版 | 表示_BIX修訂。 | 必須設定為 0x0。 |
電源單位 | 判斷硬體所報告的單位是否為 milliamps 和 milliamp-hours 或 milliwatts 和 milliwatt-hours。 | 必須設定為 0x0,表示單位為 milliwatts 和 milliwatt-hours。 此值不得在執行時間變更。 |
設計容量 | 指出以 milliwatt-hours 為單位的電池原始容量。 | 必須設定為精確的值,而且無法設定為0x0或0xFFFFFFFF。 此值不得在執行時間變更。 |
上次完整電池計量 | 指出電池的目前完整充電容量。 | 必須設定為精確的值,而且無法設定為0x0或0xFFFFFFFF。 此值必須更新每個週期計數增加的時間。 當電池放開時,此值必須維持不變。 建議只有在電池達到完全充電時,才會更新此值。 |
電池技術 | 指出電池是否可充電或一次性使用。 | 必須設定為0x1,表示電池可充電。 |
設計電壓 | 表示電池的設計電壓。 | 在以 millivolts 為單位的新時,必須設定為電池的設計電壓。 不得設定為 0x0 或 0xFFFFFFFF。 此值不得在執行時間變更。 |
警告的設計容量 | 表示 OEM 提供的低電池警告層級。 | Windows 會忽略此值。 |
低的設計容量 | 指出在系統關閉電源之前,Windows 必須立即關閉或休眠的電池計量。 | 必須設定為介於 0 到 5% 的電池設計容量之間的值。 |
電池容量細微性 1 | 指出硬體在 [警告設計容量] 和 [設計容量低] 之間可偵測到的剩餘費用變更數量下限。 | 必須設定為不超過 1% 的電池設計容量的值。 |
電池容量細微性 2 | 指出最後一個完全收費容量與設計警告容量之間的硬體可偵測到的剩餘費用變更數量下限。 | 必須設定為不超過 75 毫秒的值, (大約 0.25% 的 25 毫秒電池) 。 (電池設計容量的 1/400) 。 |
週期計數 | 表示電池迴圈計數。 必須設定為大於0x0的值。 | 不得設定為 0xFFFFFFFF。 |
測量精確度 | 表示電池容量測量的精確度。 | 必須設定為 95,000 或更高,表示 95% 的精確度或更佳。 |
取樣時間上限 | 兩個連續_BST評估之間支援的取樣時間上限,這會顯示剩餘容量的差異。 | 沒有特定需求。 |
取樣時間下限 | 兩個連續_BST評估之間的最小支援取樣時間,這會顯示剩餘容量的差異。 | 沒有特定需求。 |
平均間隔上限 | 電池油量測計支援的最大平均間隔,以毫秒為單位。 | 沒有特定需求。 |
平均間隔下限 | 電池油量測計支援的最小平均間隔,以毫秒為單位。 | 沒有特定需求。 |
型號 | OEM 提供的電池型號號碼。 | 不得為 Null。 |
序號 | OEM 提供的電池序號。 | 不得為 Null。 |
電池類型 | OEM 提供的電池類型資訊。 | 沒有特定需求。 |
OEM 資訊 | OEM 提供的資訊。 | 沒有特定需求。 |
除了這些需求之外,平臺韌體必須在 ACPI 命名空間的電池裝置上產生中斷和通知 (0x81) 命令,每當任何_BIX中的電池狀態資料變更時。 這包括最後一個完整收費容量、設計容量和週期計數。 這必須在平臺偵測到狀態變更之後立即執行。
最後一個完整充電容量代表電池預期會保留電池上次完全充電的預估能源量。 Windows 假設只有在電池已收費時,才會更新此值。 因此,電池計量耗盡時,最後一個完整充電容量值不得變更。 建議您只在電池達到完全充電時更新。
電池即時狀態資訊的 ACPI 實作
ACPI 韌體必須為每個電池實作_BST方法,以提供電池的即時狀態資訊,包括剩餘容量和目前清空率。 下表擴充 ACPI 規格第 10.2.2.6 節中所述欄位的定義,並列舉此資訊的 Windows 特定需求。
主題 | 描述 | Windows 特定需求 |
---|---|---|
電池狀態 | 指出電池目前正在收費、正在卸載,或處於重大狀態。 | 只有在電池正在充電時,電池狀態才會報告充電。 同樣地,只有在電池正在卸載時,電池狀態才會報告卸載。 不充電或卸載的電池必須回報兩個位。 |
電池存在率 | 從電池提供目前以毫秒為單位的清空速率。 | 必須是大於0x0且小於0xFFFFFFFF的值。 必須在_BIX中度量精確度的值內正確性。 |
剩餘電池容量 | 提供 milliwatt-hours 的剩餘電池容量。 | 必須大於 0x0 且小於 0xFFFFFFFF。 必須在_BIX中度量精確度的值內正確性。 |
電池目前電壓 | 表示電池終端機的目前電壓。 | 必須介於 0x0 的值與0xFFFFFFFF以 millivolts 為單位。 |
當_BST中的任何資料變更時,平臺必須在 ACPI 命名空間的電池裝置上產生中斷和通知 (0x80) 。 這必須在平臺偵測到實體狀態變更之後立即執行。 這包括充電位 (Bit0) 或卸載位 (Bit1) 的 [電池狀態] 欄位中的任何變更。
此外,平臺必須實作 _BTP-Battery Trip Point-method。 _BTP可讓 Windows 指定超出時的剩餘容量閾值,讓平臺在 ACPI 命名空間的電池裝置上產生中斷和通知 (0x80) 。 _BTP 方法可防止 Windows 定期輪詢電池。
Windows OS 特定的電池控制方法
ACPI 規格可透過 Device-Specific 方法或_DSM控制方法,提供裝置和作業系統特定的控制方法。 ACPI 規格的 9.14.1 節會說明_DSM。
Windows 8支援下列控制方法電池裝置的_DSM方法。
熱收費率方向
主題 | 值 | 描述 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | GUID,表示 Windows Control 方法電池驅動程式支援的擴充功能。 |
修訂識別碼 | 0 | 此功能的第一次修訂。 |
函式索引 | 0x1 | 設定電池計量節流。 |
引數 | 熱限制 | 從 0 到 100 的整數值,表示熱電量限制。 值為 40% 表示電池應該以最高速率的 40% 收費。 值為 0 表示應該停止電池充電,直到再次呼叫此方法為止。 |
傳回值 (s) | 無 | N/A |
使用者可服務電池
主題 | 值 | 描述 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | GUID,表示 Windows Control 方法電池驅動程式支援的擴充功能。 |
修訂識別碼 | 0 | 此功能的第一次修訂。 |
函式索引 | 0x2 | 指出此_DSM供 OSPM 判斷電池裝置是否為使用者可服務。 |
引數 | 無 | 不需要引數。 |
傳回值 (s) | 包含單一整數的封裝。 | 0x0如果電池無法供使用者使用,且無法由終端使用者取代,或可由終端使用者取代為其他工具。 0x1使用者是否可以更換電池,而不需要其他工具。 |
需要充電監控程式
主題 | 值 | 描述 |
---|---|---|
UUID | 4c2067e3-887d-475c-9720-4af1d3ed602e | GUID,表示 Windows Control 方法電池驅動程式支援的擴充功能。 |
修訂識別碼 | 0 | 此功能的第一次修訂。 |
函式索引 | 0x3 | 指出此_DSM是讓 OSPM 判斷控制方法電池是否需要定期重設監視程式重設,才能維持高目前充電,以及必須重設監視程式的時間。 |
引數 | 無 | 不需要引數。 |
傳回值 (s) | 包含單一整數的封裝。 | 如果電池不需要監視程式服務,0x0。 包含0x0000001e和0x12C的值表示以秒為單位的最大波狀間隔。 所有其他值都會被忽略,而且會被視為0x0,而且不需要重設監看狗。 如果指定有效的監看狗間隔,Windows 會以一個間隔執行_BST方法,不會超過_BST方法中的 BatteryState 值設定為充電時所指定的監看狗值。 不支援此值的動態更新。 |
Windows 提供桌面匣應用程式中系統電池的詳細檢視。 每個電池及其目前狀態都會列在 UI 中。 下列範例 UI 顯示兩個電池。
Windows 顯示電池的順序可由韌體指定。 這可透過使用 ACPI 規格6.1.11 節中所定義的插槽使用者號碼 (_SUN) 方法來達成。 _SUN方法會傳回整數,代表電池的唯一識別碼。 Windows 會根據 _SUN 方法的值,以遞增順序列出每個電池物件。
如果有任何 battery 物件包含_SUN方法,則所有電池物件也必須提供_SUN方法。 Windows 不支援某些電池具有_SUN方法,而其他電池則不支援這種情況。 如果未提供_SUN物件,Windows 會根據其完整的裝置實例路徑來排序電池;支援此設定,但不建議這麼做。