From aa53046f594a84ee9663829c3c3419aa51dbe055 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 13 Mar 2022 20:54:06 +0100 Subject: [PATCH] powermanager - Allow forcing monotonic battery voltage/percentage --- apps/powermanager/ChangeLog | 1 + apps/powermanager/README.md | 6 +++++- apps/powermanager/boot.js | 22 ++++++++++++++++++++++ apps/powermanager/default.json | 4 +++- apps/powermanager/metadata.json | 2 +- apps/powermanager/settings.js | 14 ++++++++++++++ 6 files changed, 46 insertions(+), 3 deletions(-) diff --git a/apps/powermanager/ChangeLog b/apps/powermanager/ChangeLog index 5560f00bc..8ccf678de 100644 --- a/apps/powermanager/ChangeLog +++ b/apps/powermanager/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Allow forcing monotonic battery voltage/percentage diff --git a/apps/powermanager/README.md b/apps/powermanager/README.md index f2cfcdf3e..434ec814e 100644 --- a/apps/powermanager/README.md +++ b/apps/powermanager/README.md @@ -1,6 +1,10 @@ # Power manager -Manages settings for charging. You can set a warning threshold to be able to disconnect the charger at a given percentage. Also allows to set the battery calibration offset. +Manages settings for charging. +Features: +* Warning threshold to be able to disconnect the charger at a given percentage +* Set the battery calibration offset. +* Force monotonic battery percentage or voltage ## Internals diff --git a/apps/powermanager/boot.js b/apps/powermanager/boot.js index ff4ba8932..1f6ec332a 100644 --- a/apps/powermanager/boot.js +++ b/apps/powermanager/boot.js @@ -26,4 +26,26 @@ Bangle.on("charging",handleCharging); handleCharging(Bangle.isCharging()); } + + if (settings.forceMonoPercentage){ + var p = (E.getBattery()+E.getBattery()+E.getBattery()+E.getBattery())/4; + var op = E.getBattery; + E.getBattery = function() { + var current = (op()+op()+op()+op())/4; + if (Bangle.isCharging() && current > p) p = current; + if (!Bangle.isCharging() && current < p) p = current; + return p; + }; + } + + if (settings.forceMonoVoltage){ + var v = (NRF.getBattery()+NRF.getBattery()+NRF.getBattery()+NRF.getBattery())/4; + var ov = NRF.getBattery; + NRF.getBattery = function() { + var current = (ov()+ov()+ov()+ov())/4; + if (Bangle.isCharging() && current > v) v = current; + if (!Bangle.isCharging() && current < v) v = current; + return v; + }; + } })(); diff --git a/apps/powermanager/default.json b/apps/powermanager/default.json index a6d8412b2..6c929dc38 100644 --- a/apps/powermanager/default.json +++ b/apps/powermanager/default.json @@ -1,4 +1,6 @@ { "warnEnabled": false, - "warn": 96 + "warn": 96, + "forceMonoVoltage": false, + "forceMonoPercentage": false } diff --git a/apps/powermanager/metadata.json b/apps/powermanager/metadata.json index 3ad31ba1e..2bb531099 100644 --- a/apps/powermanager/metadata.json +++ b/apps/powermanager/metadata.json @@ -2,7 +2,7 @@ "id": "powermanager", "name": "Power Manager", "shortName": "Power Manager", - "version": "0.01", + "version": "0.02", "description": "Allow configuration of warnings and thresholds for battery charging and display.", "icon": "app.png", "type": "bootloader", diff --git a/apps/powermanager/settings.js b/apps/powermanager/settings.js index c8aa057fa..8af873e5f 100644 --- a/apps/powermanager/settings.js +++ b/apps/powermanager/settings.js @@ -24,6 +24,20 @@ 'title': 'Power Manager' }, '< Back': back, + 'Monotonic percentage': { + value: !!settings.forceMonoPercentage, + format: v => settings.forceMonoPercentage ? "On" : "Off", + onchange: v => { + writeSettings("forceMonoPercentage", v); + } + }, + 'Monotonic voltage': { + value: !!settings.forceMonoVoltage, + format: v => settings.forceMonoVoltage ? "On" : "Off", + onchange: v => { + writeSettings("forceMonoVoltage", v); + } + }, 'Charge warning': function() { E.showMenu(submenu_chargewarn); },