Added lower updates on seconds at lower battery

master
David Volovskiy 2025-05-05 13:11:04 -04:00
parent 7a7e82b484
commit f318c6e055
1 changed files with 35 additions and 4 deletions

View File

@ -23,7 +23,7 @@ const infoWidth = 56;
const infoHeight = 11; const infoHeight = 11;
const ringEdge = 4; const ringEdge = 4;
const ringThick = 6; const ringThick = 6;
const sec_update = 1000; // This ms between updates when the ring is in Seconds mode let nextUpdateMs;
var drawingSteps = false; var drawingSteps = false;
var prevRing = {start: null, end: null, max: null}; var prevRing = {start: null, end: null, max: null};
@ -604,6 +604,35 @@ function buzzer(n) {
}, 500); }, 500);
} }
function getDelayMs(prevDelayMs, ring_setting, now) {
// Much of the logic here is for slowing or speeding the delay on the seconds setting.
// returns [ms before next update, if only the ring should be updated]
const sec_batt = [20, 50];
const sec_delay = [10000, 2000, 1000];
const deadband = 5;
if (ring_setting == 'Seconds') {
const nearNextMinute = (now % 60000) >= (60000 - prevDelayMs);
if (nearNextMinute) {
let batt = E.getBattery();
for (let i = 0; i < sec_batt.length; i++) {
if (batt <= sec_batt[i])
return [sec_delay[i], false];
}
// Check for coming out of the above states w/ deadband
for (let i = 0; i < sec_batt.length; i++) {
if (prevDelayMs == sec_delay[i] && batt >= (sec_batt[i] + deadband))
return [sec_delay[i + 1], false];
}
return [sec_delay[sec_delay.length - 1], false];
}
else {
return [prevDelayMs, true];
}
}
else
return [60000, false];
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// timeout used to update every minute // timeout used to update every minute
@ -612,13 +641,14 @@ var drawTimeout;
// schedule a draw for the next minute or every sec_update ms // schedule a draw for the next minute or every sec_update ms
function queueDraw() { function queueDraw() {
let now = Date.now(); let now = Date.now();
let delay = settings.ring == 'Seconds' ? sec_update - (now % sec_update) : 60000 - (now % 60000); var nextUpdateRet = getDelayMs(nextUpdateMs, settings.ring, now);
nextUpdateMs = nextUpdateRet[0];
let delay = nextUpdateMs - (now % nextUpdateMs);
if (drawTimeout) clearTimeout(drawTimeout); if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(function() { drawTimeout = setTimeout(function() {
drawTimeout = undefined; drawTimeout = undefined;
checkIdle(); checkIdle();
let updateRingOnly = settings.ring == 'Seconds' && (now % 60000) < 59000; draw(nextUpdateRet[1]);
draw(updateRingOnly);
}, delay); }, delay);
} }
@ -648,6 +678,7 @@ loadSettings();
loadLocation(); loadLocation();
var infoMode = infoList[settings.idxInfo]; var infoMode = infoList[settings.idxInfo];
updateSunRiseSunSet(new Date(), location.lat, location.lon, true); updateSunRiseSunSet(new Date(), location.lat, location.lon, true);
nextUpdateMs = getDelayMs(1000, settings.ring, Date.now())[0];
g.clear(); g.clear();
Bangle.loadWidgets(); Bangle.loadWidgets();