10.2.1. 电池事件
处理电池事件 SCI 的 AML 代码会通知系统哪块电池的状态可能已经更改。OS 使用 _BST 控制方法来确定电池的当前状态以及应当采取何种操作(如果需要)(有关 _BST 控制方法的更多信息,请参见电池控制方法)。典型操作是通知监视电池状态的应用程序,以便向用户提供系统电池状态的最新显示。但在某些情况下,该操作可能涉及生成警报,甚至强制系统进入睡眠状态。无论如何,电池状态的任何变化都应及时生成 SCI,以使系统电源状态 UI 与系统电池(或多块电池)的实际状态保持一致。
与大多数其他设备不同,当电池插入或从系统中移除时,设备本身(电池舱)仍然被视为存在于系统中。对于大多数系统,此设备的 _STA 将始终返回一个其位 0-3 被置位的值,并通过切换位 4 来指示电池的实际存在状态(参见第 7.2.4 节)。当发生这种插入或移除时,该事件的 AML 代码处理程序应发出 Notify(battery_device, 0x81),以表明静态电池信息已经更改。对于具有扩展坞中电池插槽或不能被意外移除的电池的系统,指示整个设备已被移除可能是有益的或必要的。在这种情况下,应使用 设备插入、移除和状态对象 中描述的标准方法和通知。
当电池的当前状态发生变化,或者由 _BTP 控制方法设置的跳变点已达到或越过时,硬件将触发一个通用事件。该事件的 AML 代码处理程序会在电池设备上发出 Notify(battery_device, 0x80)。当 _BMD 返回的状态标志发生变化时,也会发送此通知。
如果剩余电池容量变得极低,AML 代码处理程序会发出 Notify(battery_device, 0x80),并在 _BST 对象中报告电池临界标志。OS 将执行紧急关机。有关临界电池状态的完整说明,请参见低电量级别。
有时,从 _BST 或 _BIF 返回的值可能暂时未知。在这种情况下,该方法可以返回值 0xFFFFFFFF 作为占位符。当该值变得已知时,应发出相应的通知(_BST 对应 0x80,BIF 对应 0x81),其方式与这些方法返回的数据发生任何其他变化时相同。这将导致 OSPM 重新评估该方法——从而获得正确的数据值。
当 _BMD 控制方法返回的一个或多个状态标志发生变化时,AML 代码会在电池设备上发出 Notify(battery_device, 0x82),除非此变化发生在调用 _BMC 期间,且 _BMD 中状态标志的值与传递给 _BMC 的值匹配。如果状态标志位的值无法设置为反映正在执行的 _BMC 所请求的操作,则 AML 代码将发出此通知。例如,在交流电源不可用时,调用 _BMC 并将位 0 置位以启动校准周期,将导致 AML 发出 Notify(battery_device, 0x82)。
用户可以在 _BPT 控制方法中为每块电池编程峰值功率传输阈值。当阈值被达到或越过时,平台固件(例如嵌入式控制器)将触发 SCI 中断。该中断的 AML 事件处理程序会在电池设备上发出 Notify(<battery_device>, 0x83)。