Note: Multi Batteries on Windows XP

最近的案子有個 Dual Batteries 的需求, Battery 是設計由 EC  透過 ACPI Control method Battery 去report 給OS

基本行為是當A, B 兩顆電池同時存在時, 會先優先放電 B電池, 當B電池將到0%時, EC將會切換 放電路徑到A電池

而這個Issues 發生在當一切換電池時, OS就會發生 Crisis Battery Level Event(系統是設定 10%為Low Battery Level, 3%是Crisis Battery Level), 而此時A電池仍然為滿電力狀態. 但是確一直發生 Crisis Battery Event.

經查 ACPI 的ASL code 發現當 Battery Status change的 QEvent 發生, ASL將 Notify (\_SB.BATx, 0x80), Notify(\_SB.BATx, 0x81), Notify (\_SB.BATx, 0x80), 跟據 ACPI 4.0 spec. 指出 0x81的notify 是 Battery Information Change, 應該當Battery Replace才發生, 在XP下時, OS會因為該Event 重新抓取 Battery information 但也因此會發生 Crisis Event, 但當系統是單Battery時, 該Event並不會觸發 Crisis Battery Event. 解決之道有幾種方法, 將Battery Replace的Event重新指定另一個QEvent, 也可以在ASL中, 去儲存Battery 的Exist與否, 當狀態改變後在發出 0x81的 Notify code.

上述問題經測試在 Windows 7 上並未發生, 看來Microsoft 有改過一些OS Driver的行為模式

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: