10个版本
0.1.9 | 2022年6月27日 |
---|---|
0.1.8 | 2022年4月11日 |
0.1.6 | 2022年3月24日 |
0.1.4 | 2022年2月22日 |
#589 在 硬件支持
25KB
469 行
此内容已过时
Megi正在将此功能集成到内核中,这是它应该所在的位置。因此,该项目现在已过时。希望内核功能将很快推出。
更新:2022-06
我无法确定这件事的具体情况。首先消失的是kbpwrd所依赖的sysfs条目,然后megi宣布了内核电源驱动程序,现在他们以不同的名称回归,但内核电源驱动程序似乎没有做什么。因此,我已更新路径,并再次在我的manjaro phosh设备上运行此守护进程。
PinePhone(Pro)键盘电池电源管理器
如Megi的博客所述,键盘电池和PinePhone的双电池特性带来了一些需要通过软件解决的问题。这个小守护进程旨在从系统中获得最佳运行时间,并响应充电状态的改变。
工作原理
在硬件中移动电荷本质上是浪费的,在升压到usb电压、降压到充电电压以及充电过程中都会损失能量。在双电池系统中,最有效的事情是让每个电池根据其容量比例贡献于为负载供电,从而至少消除充电损失(升压和降压是不可避免的)。因此,此守护进程旨在在硬件限制内做到这一点。
它旨在避免使用键盘电池为内部电池充电,并通过改变内部电池的输入电流限制来保持两个电池大致相同的充电状态,以响应当前负载和一系列的启发式算法。唯一的例外是,如果内部电池的充电状态低于30%,则将为其充电,以防止在键盘电池仍有容量时手机完全放电(在PPP上非常关键,因为完全放电可能意味着在启动之前需要花费数小时在maskrom模式下)。
这种方法有几个优点,
- 锂聚合物电池(以及一般电池)在轻负载相对于其容量而言效率更高,因此我们可以获得更长的运行时间,例如在C/10与C/2相比
- 这在一定程度上也适用于电力电子
- 由于我们大致匹配键盘的充电状态与手机,因此手机的燃料计量表可以合理地近似实际充电状态。
当前状态
目前正在处理pinephone和pinephone pro。pinephone存在一个不幸的内核漏洞,导致它报告的是当前值的绝对值而不是实际值。这个问题加上如果连接充电器,电池状态总是显示充电,即使电池实际上正在放电的问题,意味着我必须使用启发式方法来猜测电池何时放电。大多数情况下它都正常工作,但有时我会猜错。这并不像听起来那么糟糕,因为默认的500mA限制几乎总是pinephone的正确值。
键盘中使用的移动电源IC在平衡充电自己的电池和为负载供电方面处理得并不好。如果你将其保留在默认电流限制并增加手机电流限制,当两个电池深度放电时,它将消耗过多的电流,并在变热的同时循环关闭/重启。守护进程在充电时管理限制以防止这种情况发生。它总是尝试同时充电两个电池,但会优先考虑主电池,以防止手机电量耗尽并关闭。它试图保持在安全范围内,因此可能不会像技术上可能的那样快地充电。
待办事项
-
猜测键盘电池的充电状态,以便更好地决定哪个电池应该承担负载
-
收集更多运行时数据
安装
如果你已经安装了rust,你可以用以下命令构建它:
$ cargo install kbpwrd
我可能会为poplar发行版发布二进制文件。希望它能被打包。因为该软件以root身份运行,你应该在运行之前阅读它,或者让信任的人阅读。我知道最近pine社区发生了恶意软件事件。这不是恶意软件,但不要只相信我!
使用
目前它还处于开发和测试的早期阶段,所以它没有守护进程化,我还没有编写systemd启动单元或init脚本。我以root身份在终端中运行它,并开启日志记录。
[root@sasami-chan ~]$ RUST_LOG=info {path-to-binary}/kbpwrd
它将每秒打印日志消息
2022-04-01T01:34:46Z INFO kbpwrd] ph v: 3923, a: 469, s: Charging, l: 850, c: 47, kb v: 4071, a: 1527, s: Charging, l: 1500, c: 48, act: Pass
电流以mA为单位,电压以mV为单位。'l'是输入电流限制。行中的第一部分指的是手机,第二部分指的是键盘,动作描述了守护进程在本周期中打算做什么(例如,提高、降低、将手机的输入电流限制设置为默认值)。
当运行守护进程时,你应该会看到主电池正在放电,但放电速度比平时慢得多。
依赖项
约5-16MB
约184K SLoC