Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的/sys/class/power_supply中有多个电池条目_Android_Linux_Android Ndk_Sysfs - Fatal编程技术网

Android上的/sys/class/power_supply中有多个电池条目

Android上的/sys/class/power_supply中有多个电池条目,android,linux,android-ndk,sysfs,Android,Linux,Android Ndk,Sysfs,我正在尝试从NDK应用程序读取电池信息。我知道实现这一点的唯一方法是读取值/sys/class/power\u supply。我的困难是我找到了多个“Battery”类型的条目,但我不知道该使用哪一个 在带有KitKat 4.4.4的Nexus 10上,我看到: $ ls /sys/class/power_supply ds2784-fuelgauge manta-battery smb347-battery # other non-battery entries 带类型=所有三个的电池。例如

我正在尝试从NDK应用程序读取电池信息。我知道实现这一点的唯一方法是读取值
/sys/class/power\u supply
。我的困难是我找到了多个“Battery”类型的条目,但我不知道该使用哪一个

在带有KitKat 4.4.4的Nexus 10上,我看到:

$ ls /sys/class/power_supply
ds2784-fuelgauge
manta-battery
smb347-battery
# other non-battery entries
带类型=所有三个的电池。例如:

$ cat /sys/class/power_supply/ds2784-fuelgauge/type
Battery
在Android
BatteryManager
code中,他们只需迭代电池设备,并获取第一个具有他们想要的条目的设备()。然而,在我的Nexus10上,它们有不同的值。例如,对于
ds2784燃油表/电压\u now
smb347蓄电池/电压\u now

$ cat ds2784-fuelgauge/voltage_now
4153100
$ cat smb347-battery/voltage_now
4300000
ds2784 fuelgauge/voltage\u now
似乎定期更新(例如,当我开始一项繁重的计算任务时,它会发生变化),但
smb347电池/电压\u now
似乎是固定的。当我比较
ds2784 fuelgauge/current\u now
smb347 battery/current\u now
时,我看到了类似的效果

我的问题是:

  • 为什么这里有多个type=battery的条目
  • 我如何从总体上区分它们
  • 我应该用哪一个
  • 编辑

    • 修复了
      voltage\u中的打字错误
    • 强调该类型=所有三种设备的电池

    在android设备上,您可能有多个电池,如RTC或其他外围设备的备用电池。您是否已经为所有3个sysfs条目编辑了类型文件?对于所有的3个,你得到了“电池”

    考虑到Android需要从电池中获得几个参数(见下文),我可能会猜测它们被分割在您得到的3个sysfs文件中

    例如,燃油表是一个硬件组件,它读取来自/流向蓄电池的电流,并计算剩余容量,因此从中读取容量文件应该会得到%,但电压可能是从另一个文件读取的

    电池参数(即:/sys/class/power\u supply/my\u batt/status):

    • 状态:充电、放电、未充电、已满、未知
    • 健康(字符串):寒冷、死亡、良好、过热、过压、未指明的故障、未知
    • 当前(int):当前时为1
    • 容量(整数):97%为97%
    • 现在的电压(紫外线)或电池电压(毫伏):4205000紫外线=4.205伏时为4205000
    • 温度或电池温度(摄氏度的十分之一):30.5摄氏度时为305
    • 技术(字符串):锂离子

    您的问题是关于使用哪个源,以及大概如何以编程方式确定它

    对于所有android设备,您应该使用燃油表

    Nexus 10: 根据来自的官方文档,对于Nexus 10,您应该使用达拉斯半导体DS2784。SMB347,在同一文档中也作为燃油表列出,尽管它可能是一个电池充电器。我之所以这样说,是因为芯片的数据表将其列为电池充电器,这可以解释为什么它具有恒定电压(CV)。(CV电源在4.2V下运行,这是锂离子电池功率曲线的渐近高端。)

    系统功能 您使用的是Android 4.4.4。在撰写本文时,安卓M已经进入开发者预览,安卓5.1.1已经发布。因此,如果您升级手机,/sys文件系统(SysFS)的映射可能不同。换句话说,YMMV

    关于BKG:锂电池
    • 几乎所有锂离子电池的最大/充电电压均为4.2V。
      2015年,一些较新的锂聚合物电池的最大电压为4.35V,而不是4.2V。这是锂离子化学的结果(由于该领域的进步,电池电极的劣化被认为是可以接受的)

    • 当锂离子电池从100%充电到1%或0%充电时,电压变化很大。预期电压范围为3.0V至4.2V

    • 所有锂电池都无法恢复,如果放电过多,可能会引发火灾。因此,使用锂电池的设备必须具有某种调节电路,这种电路还可以由软件控制,而不仅仅是硬件/固件。截止电压介于3.0V和3.6V之间。所用截止电压的选择取决于安全性和容量设计选择,尽管在过去的100mV内,电池放电时存储的电池能量非常低。功率曲线有点奇怪。见放电曲线(电压与剩余容量,以毫安时表示),如以下参考数据表中的曲线

    • 因此,使用锂电池的现代设备必须使用燃油表之类的仪器来报告当前电压

    参考资料: 数据表


    (没有足够的声望点数)。另请参阅18650年的数据表,例如松下18650的数据表,松下是众多锂电池制造商之一,而特斯拉更愿意以行业设置的方式与之合作。

    volt可以作为容量吗?它永远不会改变,对吗。那是个打字错误。它们现在都是
    voltage\u
    ,应该是“瞬时/瞬时值”(Hm)。我想说的是做更多的测试,看看哪些变化。我打赌fuelguage是其他一些参数,可以像你说的那样测量使用率,电池是实际值。测试测试!谢谢你的回复。是的,
    类型
    文件包含所有三种设备的
    电池
    (我将编辑问题以使其更清楚)。听起来燃油表可能就是我想要的。我会接受你的回答,因为你澄清了燃油表是什么,但除了它的符号链接名称之外,我看不出有什么办法将它与其他条目区分开来。我当前的实现使用了
    BatteryMonitor.cpp
    中的方法:迭代所有电池并选择第一个电池