ACPI:高级配置与电源接口,之前有一篇文章简单的介绍过,link: https://blog.csdn.net/vito_bin/article/details/53382451
ACPI早期诞生的原因即是为了设计电池管理的功能,随着后续的发展,或者说是在硬件,(BIOS)UEFI,OS三方协商的情况下,ACPI近一步完善,并在不断完善ing
关于ACPI,有着独属于自己的编程语言:ASL code
通过这种专用性极强的语言,可以实现硬件,BIOS,OS互相沟通的作用,本文简单介绍一下关于ACPI 电池这块的用法;
ACPI关于Battery有两个重要Method:_BIF,_BST
_BIF在ACPI定义如下:
其数据结构如下示例:
Method _BIF里面主要定义了一些重要的电池信息,一般通过EC汇报给BIOS,由BIOS将其汇报给OS:
Name(BIF1, Package(){
1,
10400,
10400,
1,
16800,
2000,
600,
0x03,
0x03,
"LLLLL ",
" 0001 ",
"LION",
" name "
})
Method (_BIF, 0) {
Store(0,Local0)
Store(0,Local1)
Store(RdEC(0x36D),Local0)
ShiftLeft(Local0,8,Local1)
Store(RMCU(0x36C),Local0)
add(Local0,Local1,Index(BIF,1))
....
}
程序示例填写出厂设置的电量大小值
关于_BST:ACPI定义如下:
_BST里面只有四个信息,分别
.
Name(BST1,Package() {
0x00000002,
0x0000E0FD,
0x00000898,
0x00004538
})
Method (_BST, 0) {
Store(RdEC(0x360),Local0)
if(And(Local0,0x04)){
Store (0x02, Index(STA1, 0)) //charging
} else {
Store (0x01, Index(STA1, 0)) //discharging
}
}
该示例为填写当前Battery充放电状态
需要注意的是:在_BIF当前会有一个警告电压值,该电压值到达后,OS将会进入Sleep状态。