积分 573 最后登录 2014-10-21 精华 0 阅读权限 40 主题 52 UID 897363 帖子 1432 PB币 1561 威望 0 贡献 0 技术 132 活跃 322
UID 897363 帖子 1432 PB币 1561 贡献 0 技术 132 活跃 322
发表于 2014-3-17 10:21:40
IP属地湖北
| 显示全部楼层
本帖最后由 usbtopc 于 2014-3-31 22:29 编辑
2014.3.31已解决:原因在于没有在16位变量的原始位置直接定义8位的变量,导致地址发生偏移而无法正确读取电池的信息。DSDT语法和C++等是有区别的,DSDT是通过地址来传递数据的,所以替换变量时务必需要小心,不要在其他位置随便定义新的变量! 正常后的电池信息:
请勿使用多线程下载工具下载论坛附件!
=================================================
我这边dsdt的电池代码比较特殊,修改之后,能显示各种状态,唯一不能显示的是电池的剩余电量,感兴趣的同学可以一起来研究...
附上我这边的dsdt:
dsdt.zip
(75.88 KB, 下载次数: 24)
Mac里面显示的信息:
请勿使用多线程下载工具下载论坛附件!
Win下显示的正确的电池信息:
请勿使用多线程下载工具下载论坛附件!
Device (BAT1)
{
Name (_HID, EisaId ("PNP0C0A")) // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (And (BNUM, One))
{
Return (0x1F)
}
If (LLessEqual (OSYS, 0x07D2))
{
Return (0x0A)
}
Return (0x0B)
}
Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
{
Name (PKG0, Package (0x0D)
{
Zero, //决定电池容量的显示单位,0-mW 1-mA,一般是1,也就是One
0x1130,
0x1130,
One,
0xFFFFFFFF,
0x0190,
0xC8,
0x28,
0x28,
"CRB Battery 1",
"Battery 1",
"Real",
"-Real Battery 1-"
})
Store (B1FC, Index (PKG0, 0x02)) //这条语句,用来获取电池充满电之后的容量,这个容量会小于等于电池的设计容量
Return (PKG0)
}
Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
Name (PKG1, Package (0x04)
{
0xFFFFFFFF, //返回电池的状态:充电、放电、电池需要更换
0xFFFFFFFF, //电流,单位毫安
0xFFFFFFFF, //剩余电量,可以自定义,但实时电量的获取是通过变量来传递的
0xFFFFFFFF//当前电压,单位毫伏
})
Store (And (B1ST, 0x07), Index (PKG1, Zero))//B1ST&0x07赋值给PKG1数组中的第一个位置
Store (B1CC, Index (PKG1, 0x02)) //这条语句用来获取电池的实时电量,PKG1数组中的第三个位置
Return (PKG1)
}
Method (_BTP, 1, NotSerialized) // _BTP: Battery Trip Point
{
If (LAnd (LNotEqual (ECRD (RefOf (B1FC)), Zero), LNotEqual (
ECRD (RefOf (B1FV)), Zero)))
{
Store (Divide (Multiply (Arg0, 0x64), Divide (Multiply (ECRD (RefOf (
B1FC)), ECRD (RefOf (B1FV))), 0x03E8, ), ), Local0)
Add (Local0, One, Local0)
Store (Local0, ECRD)
RefOf (BTP1)
}
Return (Zero)
}
Method (_PCL, 0, NotSerialized) // _PCL: Power Consumer List
{
Return (_SB)
}
展开阅读全文​