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定义如下:

ACPI下关于电池功能的用法

其数据结构如下示例:

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定义如下:

ACPI下关于电池功能的用法

ACPI下关于电池功能的用法

_BST里面只有四个信息,分别

 

.ACPI下关于电池功能的用法

           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状态。

 

 

 

 

相关文章: