From 1f2726a841f5593461857a009805462d6459c4da Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 15:17:34 +0200 Subject: [PATCH 01/12] [TerminalClock] Use ClockFace module --- apps/terminalclock/app.js | 208 ++++++++++++++++----------------- apps/terminalclock/settings.js | 15 ++- 2 files changed, 115 insertions(+), 108 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 7dc3bf1d1..d0699f855 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -1,8 +1,8 @@ -var locale = require("locale"); -var fontColor = g.theme.dark ? "#0f0" : "#000"; +const locale = require("locale"); var heartRate = 0; var altitude = -9001; +const fontColor = g.theme.dark ? "#0f0" : "#000"; // handling the differents versions of the Banglejs smartwatch screen sizes if (process.env.HWVERSION == 1){ var paddingY = 3; @@ -18,32 +18,81 @@ if (process.env.HWVERSION == 1){ var font6x8DefaultTextSize = 2; } -function setFontSize(pos){ +// initialising the clockface +const ClockFace = require("ClockFace"); +const clock = new ClockFace({ + init: function () { + // check settings and set default if needed + if (this.HRMinConfidence === undefined) this.HRMinConfidence = 50; + if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15; + if (this.showAltitude === undefined){ + this.showAltitude = true && process.env.HWVERSION == 2; + }else { + this.showAltitude = this.showAltitude && process.env.HWVERSION == 2; + } + ["showHRM", "showActivity", "showStepCount", "powerSaving"].forEach(k => { + if (this[k]===undefined) this[k] = true; + }); + + this. + + Bangle.on("lock", on => { + if (on) lock(); + else unlock(); + }); + + turnOnServices(); + if(this.powerSaving){ + setInterval(turnOnServices, this.PowerOnInterval*60000); // every PowerOnInterval min + } + + }, + + draw: function (date) { + var curPos = 1; + g.reset(); + g.clearRect(g.appRect); + g.setFontAlign(-1, -1); + g.setColor(fontColor); + drawTime(date, curPos); + curPos++; + if(this.showDate){ + drawDate(date, curPos); + curPos++; + } + if(this.showAltitude){ + drawAltitude(curPos); + curPos++; + } + if(this.showHRM){ + drawHRM(curPos); + curPos++; + } + if(this.showActivity){ + drawActivity(curPos); + curPos++; + } + if(this.showStepCount){ + drawStepCount(curPos); + curPos++; + } + drawInput(curPos); + }, + + settingsFile: "terminalclock.json" +}); + + +/* ---------------------------- +Draw related of specific lines +-------------------------------- */ + +function drawLine(line, pos){ if(pos == 1) g.setFont("6x8", font6x8FirstTextSize); else g.setFont("6x8", font6x8DefaultTextSize); -} -function clearField(pos){ - var yStartPos = Bangle.appRect.y + - paddingY * (pos - 1) + - font6x8At4Size * Math.min(1, pos-1) + - font6x8At2Size * Math.max(0, pos-2); - var yEndPos = Bangle.appRect.y + - paddingY * (pos - 1) + - font6x8At4Size * Math.min(1, pos) + - font6x8At2Size * Math.max(0, pos-1); - g.clearRect(Bangle.appRect.x, yStartPos, Bangle.appRect.x2, yEndPos); -} - -function clearWatchIfNeeded(now){ - if(now.getMinutes() % 10 == 0) - g.clearRect(Bangle.appRect.x, Bangle.appRect.y, Bangle.appRect.x2, Bangle.appRect.y2); -} - -function drawLine(line, pos){ - setFontSize(pos); var yPos = Bangle.appRect.y + paddingY * (pos - 1) + font6x8At4Size * Math.min(1, pos-1) + @@ -66,7 +115,6 @@ function drawDate(now, pos){ } function drawInput(pos){ - clearField(pos); drawLine(">", pos); } @@ -77,7 +125,6 @@ function drawStepCount(pos){ } function drawHRM(pos){ - clearField(pos); if(heartRate != 0) drawLine(">HR: " + parseInt(heartRate), pos); else @@ -85,60 +132,31 @@ function drawHRM(pos){ } function drawAltitude(pos){ - clearField(pos); if(altitude > 0) drawLine(">Alt: " + altitude.toFixed(1) + "m", pos); else drawLine(">Alt: unknown", pos); } - + function drawActivity(pos){ - clearField(pos); var health = Bangle.getHealthStatus('last'); var steps_formated = ">Motion: " + parseInt(health.movement); drawLine(steps_formated, pos); } -function draw(){ - var curPos = 1; - g.reset(); - g.setFontAlign(-1, -1); - g.setColor(fontColor); - var now = new Date(); - clearWatchIfNeeded(now); // mostly to not have issues when changing days - drawTime(now, curPos); - curPos++; - if(settings.showDate){ - drawDate(now, curPos); - curPos++; - } - if(settings.showAltitude){ - drawAltitude(curPos); - curPos++; - } - if(settings.showHRM){ - drawHRM(curPos); - curPos++; - } - if(settings.showActivity){ - drawActivity(curPos); - curPos++; - } - if(settings.showStepCount){ - drawStepCount(curPos); - curPos++; - } - drawInput(curPos); -} + +/* ----------------------------------------------- +Services functions (HRM, pressure, etc...) +-------------------------------------------------- */ function turnOnServices(){ - if(settings.showHRM){ + if(clock.showHRM){ Bangle.setHRMPower(true, "terminalclock"); } - if(settings.showAltitude && process.env.HWVERSION != 1){ + if(clock.showAltitude){ Bangle.setBarometerPower(true, "terminalclock"); } - if(settings.powerSaving){ + if(clock.powerSaving){ setTimeout(function () { turnOffServices(); }, 45000); @@ -146,33 +164,20 @@ function turnOnServices(){ } function turnOffServices(){ - if(settings.showHRM){ + if(clock.showHRM){ Bangle.setHRMPower(false, "terminalclock"); } - if(settings.showAltitude && process.env.HWVERSION != 1){ + if(clock.showAltitude){ Bangle.setBarometerPower(false, "terminalclock"); } } -var unlockDrawIntervalID = -1; -Bangle.on('lock', function(on){ - if(!on){ // unclock - if(settings.powerSaving){ - turnOnServices(); - } - unlockDrawIntervalID = setInterval(draw, 1000); // every second - } - if(on && unlockDrawIntervalID != -1){ // lock - clearInterval(unlockDrawIntervalID); - } -}); - Bangle.on('HRM',function(hrmInfo) { - if(hrmInfo.confidence >= settings.HRMinConfidence) + if(hrmInfo.confidence >= clock.HRMinConfidence) heartRate = hrmInfo.bpm; }); -var MEDIANLENGTH = 20; // technical +const MEDIANLENGTH = 20; // technical var avr = [], median; // technical Bangle.on('pressure', function(e) { while (avr.length>MEDIANLENGTH) avr.pop(); @@ -184,32 +189,23 @@ Bangle.on('pressure', function(e) { } }); +/* ------------------------------------------------- +Clock related functions but not in the ClockFace module +---------------------------------------------------- */ -// Clear the screen once, at startup -g.clear(); -// load the settings -var settings = Object.assign({ - // default values - HRMinConfidence: 50, - showDate: true, - showHRM: true, - showActivity: true, - showStepCount: true, - showAltitude: process.env.HWVERSION != 1 ? true : false, - powerSaving: true, - PowerOnInterval: 15, -}, require('Storage').readJSON("terminalclock.json", true) || {}); - -// turn the services before drawing anything -turnOnServices(); -if(settings.powerSaving){ - setInterval(turnOnServices, settings.PowerOnInterval*60000); // every PowerOnInterval min +function unlock(){ + if(clock.powerSaving){ + turnOnServices(); + } + clock.old_precision = clock.precision; + clock.precision = 1; + clock.tick(); } -// Show launcher when middle button pressed -Bangle.setUI("clock"); -// Load and draw widgets -Bangle.loadWidgets(); -Bangle.drawWidgets(); -// draw immediately at first -draw(); -setInterval(draw, 10000); // every 10 seconds + +function lock(){ + clock.precision = clock.old_precision; + clock.tick(); +} + +// starting the clock +clock.start(); diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index bd860b491..cdad7b9a4 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -2,9 +2,12 @@ var FILE = "terminalclock.json"; // Load settings var settings = Object.assign({ - HRMinConfidence: 50, + // ClockFace lib showDate: true, - showAltitude: process.env.HWVERSION != 1 ? true : false, + loadWidgets: true, + // TerminalClock specific + HRMinConfidence: 50, + showAltitude: process.env.HWVERSION == 2 ? true : false, showHRM: true, showActivity: true, showStepCount: true, @@ -28,6 +31,14 @@ writeSettings(); } }, + 'Show widgets': { + value: settings.loadWidgets, + format: v => v?"Yes":"No", + onchange: v => { + settings.loadWidgets = v; + writeSettings(); + } + }, 'Show date': { value: settings.showDate, format: v => v?"Yes":"No", From 2aa56bdaf241f141b919cea8d4dc3dcc629a9c4f Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 15:25:02 +0200 Subject: [PATCH 02/12] [TerminalClock] Bug fix --- apps/terminalclock/app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index d0699f855..ba19d693c 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -34,8 +34,6 @@ const clock = new ClockFace({ if (this[k]===undefined) this[k] = true; }); - this. - Bangle.on("lock", on => { if (on) lock(); else unlock(); From 621864da24791fcd7b11e92be943bb962aa6f2f4 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 15:55:45 +0200 Subject: [PATCH 03/12] [ClockFace] Fix widget drawing --- modules/ClockFace.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/ClockFace.js b/modules/ClockFace.js index f8dc33287..5020af23f 100644 --- a/modules/ClockFace.js +++ b/modules/ClockFace.js @@ -58,7 +58,6 @@ ClockFace.prototype.tick = function() { }; if (!this._last) { g.clear(true); - if (global.WIDGETS) Bangle.drawWidgets(); g.reset(); this.draw.apply(this, [time, {d: true, h: true, m: true, s: true}]); } else { @@ -70,6 +69,7 @@ ClockFace.prototype.tick = function() { g.reset(); this.update.apply(this, [time, c]); } + if (global.WIDGETS) Bangle.drawWidgets(); this._last = now; if (this.paused) return; // called redraw() while still paused // figure out timeout: if e.g. precision=60s, update at the start of a new minute @@ -103,12 +103,13 @@ ClockFace.prototype.pause = function() { this.paused = true; // apps might want to check this if (this._pause) this._pause.apply(this); }; + ClockFace.prototype.resume = function() { if (this._timeout) return; // not paused delete this._last; this.paused = false; if (this._resume) this._resume.apply(this); - this.tick(true); + this.tick(); }; /** From 93b6fdb974fc8ca3e86fdddef204e87c50456154 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 15:56:38 +0200 Subject: [PATCH 04/12] [TerminalClock] Remove useless calls to the graphic lib --- apps/terminalclock/app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index ba19d693c..b0bd47d16 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -48,8 +48,6 @@ const clock = new ClockFace({ draw: function (date) { var curPos = 1; - g.reset(); - g.clearRect(g.appRect); g.setFontAlign(-1, -1); g.setColor(fontColor); drawTime(date, curPos); From a6fa71290be69b53023b70ddcd5873ecbe9ed688 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 18:39:51 +0200 Subject: [PATCH 05/12] [TerminalClock] Change the settings to be able to personalize the line display more --- apps/terminalclock/ChangeLog | 1 + apps/terminalclock/app.js | 48 ++++----- apps/terminalclock/metadata.json | 2 +- apps/terminalclock/settings.js | 167 +++++++++++++++---------------- 4 files changed, 103 insertions(+), 115 deletions(-) diff --git a/apps/terminalclock/ChangeLog b/apps/terminalclock/ChangeLog index ce31583e9..75d1a760e 100644 --- a/apps/terminalclock/ChangeLog +++ b/apps/terminalclock/ChangeLog @@ -4,3 +4,4 @@ 0.04: Fix settings bug 0.05: Add altitude display (only Bangle.js 2) 0.06: Add power related settings to control the HR and pressure(altitude) sensor from the watchface +0.07: Use ClockFace module and rework the settings to be able to personnalize the order of the lines diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index b0bd47d16..c9be2f543 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -23,17 +23,17 @@ const ClockFace = require("ClockFace"); const clock = new ClockFace({ init: function () { // check settings and set default if needed + this.showHRM = false; + this.showAltitude = false; if (this.HRMinConfidence === undefined) this.HRMinConfidence = 50; if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15; - if (this.showAltitude === undefined){ - this.showAltitude = true && process.env.HWVERSION == 2; - }else { - this.showAltitude = this.showAltitude && process.env.HWVERSION == 2; - } - ["showHRM", "showActivity", "showStepCount", "powerSaving"].forEach(k => { - if (this[k]===undefined) this[k] = true; + if (this.powerSaving===undefined) this[k] = true; + ["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(k => { + if (this[k]===undefined) this[k] = "Empty"; + else if (this[k]==="HR") this.showHRM = true; + else if (this[k]==="Alt") this.showAltitude = true && process.env.HWVERSION == 2; }); - + Bangle.on("lock", on => { if (on) lock(); else unlock(); @@ -52,27 +52,16 @@ const clock = new ClockFace({ g.setColor(fontColor); drawTime(date, curPos); curPos++; - if(this.showDate){ - drawDate(date, curPos); + + ["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(line => { + if (this[line]==='Date') drawDate(date, curPos); + else if (this[line]==='HR') drawHRM(curPos); + else if (this[line]==='Motion') drawMotion(curPos); + else if (this[line]==='Alt') drawAltitude(curPos); + else if (this[line]==='Steps') drawStepCount(curPos); + else if (this[line]==='>') drawInput(curPos); curPos++; - } - if(this.showAltitude){ - drawAltitude(curPos); - curPos++; - } - if(this.showHRM){ - drawHRM(curPos); - curPos++; - } - if(this.showActivity){ - drawActivity(curPos); - curPos++; - } - if(this.showStepCount){ - drawStepCount(curPos); - curPos++; - } - drawInput(curPos); + }); }, settingsFile: "terminalclock.json" @@ -134,13 +123,12 @@ function drawAltitude(pos){ drawLine(">Alt: unknown", pos); } -function drawActivity(pos){ +function drawMotion(pos){ var health = Bangle.getHealthStatus('last'); var steps_formated = ">Motion: " + parseInt(health.movement); drawLine(steps_formated, pos); } - /* ----------------------------------------------- Services functions (HRM, pressure, etc...) -------------------------------------------------- */ diff --git a/apps/terminalclock/metadata.json b/apps/terminalclock/metadata.json index 9f76ed8f2..a8682f9a8 100644 --- a/apps/terminalclock/metadata.json +++ b/apps/terminalclock/metadata.json @@ -3,7 +3,7 @@ "name": "Terminal Clock", "shortName":"Terminal Clock", "description": "A terminal cli like clock displaying multiple sensor data", - "version":"0.06", + "version":"0.07", "icon": "app.png", "type": "clock", "tags": "clock", diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index cdad7b9a4..3837d92c6 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -3,104 +3,103 @@ // Load settings var settings = Object.assign({ // ClockFace lib - showDate: true, loadWidgets: true, // TerminalClock specific HRMinConfidence: 50, - showAltitude: process.env.HWVERSION == 2 ? true : false, - showHRM: true, - showActivity: true, - showStepCount: true, powerSaving: true, PowerOnInterval: 15, + L2: 'Date', + L3: 'HR', + L4: 'Motion', + L5: 'Steps', + L6: '>', + L7: 'Empty', + L8: 'Empty', + L9: 'Empty', }, require('Storage').readJSON(FILE, true) || {}); function writeSettings() { require('Storage').writeJSON(FILE, settings); } - // Show the menu - var menu = { - "" : { "title" : "Terminal Clock" }, - "< Back" : () => back(), - 'HR confidence': { - value: settings.HRMinConfidence, - min: 0, max: 100, + if(process.env.HWVERSION == 2) { + var lineType = ['Date', 'HR', 'Motion', 'Alt', 'Steps', '>', 'Empty']; + } else{ + var lineType = ['Date', 'HR', 'Motion', 'Steps', '>', 'Empty']; + } + function getLineChooser(lineID){ + return { + value: lineType.indexOf(settings[lineID]), + min: 0, max: lineType.length-1, + format: v => lineType[v], onchange: v => { - settings.HRMinConfidence = v; - writeSettings(); - } - }, - 'Show widgets': { - value: settings.loadWidgets, - format: v => v?"Yes":"No", - onchange: v => { - settings.loadWidgets = v; - writeSettings(); - } - }, - 'Show date': { - value: settings.showDate, - format: v => v?"Yes":"No", - onchange: v => { - settings.showDate = v; - writeSettings(); - } - }, - 'Show Altitude': { - value: settings.showAltitude, - format: v => v?"Yes":"No", - onchange: v => { - settings.showAltitude = v; - writeSettings(); - } - }, - 'Show HRM': { - value: settings.showHRM, - format: v => v?"Yes":"No", - onchange: v => { - settings.showHRM = v; - writeSettings(); - } - }, - 'Show Activity': { - value: settings.showActivity, - format: v => v?"Yes":"No", - onchange: v => { - settings.showActivity = v; - writeSettings(); - } - }, - 'Show Steps': { - value: settings.showStepCount, - format: v => v?"Yes":"No", - onchange: v => { - settings.showStepCount = v; - writeSettings(); - } - }, - 'Power saving': { - value: settings.powerSaving, - format: v => v?"On":"Off", - onchange: v => { - settings.powerSaving = v; - writeSettings(); - } - }, - 'Power on interval': { - value: settings.PowerOnInterval, - min: 3, max: 60, - onchange: v => { - settings.PowerOnInterval = v; + settings[lineID] = lineType[v]; writeSettings(); }, - format: x => { - return x + " min"; + }; + } + + var lineMenu = { + '< Back': function() { E.showMenu(getMainMenu());}, + 'Line 2': getLineChooser('L2'), + 'Line 3': getLineChooser('L3'), + 'Line 4': getLineChooser('L4'), + 'Line 5': getLineChooser('L5'), + 'Line 6': getLineChooser('L6'), + 'Line 7': getLineChooser('L7'), + 'Line 8': getLineChooser('L8'), + 'Line 9': getLineChooser('L9'), + }; + + function getMainMenu(){ + var mainMenu = { + "" : { "title" : "Terminal Clock" }, + "< Back" : () => back(), + 'HR confidence': { + value: settings.HRMinConfidence, + min: 0, max: 100, + onchange: v => { + settings.HRMinConfidence = v; + writeSettings(); + } + }, + 'Show widgets': { + value: settings.loadWidgets, + format: v => v?"Yes":"No", + onchange: v => { + settings.loadWidgets = v; + writeSettings(); + } + }, + 'Power saving': { + value: settings.powerSaving, + format: v => v?"On":"Off", + onchange: v => { + settings.powerSaving = v; + writeSettings(); + setTimeout(function() { + E.showMenu(getMainMenu()); + },0); + } } + }; + if(settings.powerSaving){ + mainMenu['Power on interval'] = { + value: settings.PowerOnInterval, + min: 3, max: 60, + onchange: v => { + settings.PowerOnInterval = v; + writeSettings(); + }, + format: x => { + return x + " min"; + }, + }; } + + mainMenu['Lines'] = function() { E.showMenu(lineMenu);}; + return mainMenu; } - if (process.env.HWVERSION == 1) { - delete menu['Show Altitude'] - } - E.showMenu(menu); -}) \ No newline at end of file + + E.showMenu(getMainMenu()); +})(); \ No newline at end of file From 03fbd4c08abcc6cfa1f9e25c1868af1cb786776f Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 18:53:42 +0200 Subject: [PATCH 06/12] [TerminalClock] Small fix --- apps/terminalclock/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index c9be2f543..9b810a10a 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -27,18 +27,20 @@ const clock = new ClockFace({ this.showAltitude = false; if (this.HRMinConfidence === undefined) this.HRMinConfidence = 50; if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15; - if (this.powerSaving===undefined) this[k] = true; + if (this.powerSaving===undefined) this.powerSaving = true; ["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(k => { if (this[k]===undefined) this[k] = "Empty"; else if (this[k]==="HR") this.showHRM = true; else if (this[k]==="Alt") this.showAltitude = true && process.env.HWVERSION == 2; }); + // set the lock and unlock actions Bangle.on("lock", on => { if (on) lock(); else unlock(); }); + // set the services (HRM, pressure sensor, etc....) turnOnServices(); if(this.powerSaving){ setInterval(turnOnServices, this.PowerOnInterval*60000); // every PowerOnInterval min From c50813322cb94b100102400d04c87e5d0e660fa3 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 19:04:31 +0200 Subject: [PATCH 07/12] [TerminalClock] Consistent settings --- apps/terminalclock/settings.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 3837d92c6..dfc9d88c2 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -8,11 +8,11 @@ HRMinConfidence: 50, powerSaving: true, PowerOnInterval: 15, - L2: 'Date', - L3: 'HR', - L4: 'Motion', - L5: 'Steps', - L6: '>', + L2: 'Empty', + L3: 'Empty', + L4: 'Empty', + L5: 'Empty', + L6: 'Empty', L7: 'Empty', L8: 'Empty', L9: 'Empty', From f77226e33ef88da8d8c657773d53c390ad5aa14f Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 19:16:44 +0200 Subject: [PATCH 08/12] [TerminalClock] Add sensible default settings --- apps/terminalclock/app.js | 11 ++++++++++- apps/terminalclock/settings.js | 12 ++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 9b810a10a..9b8eb1351 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -29,7 +29,16 @@ const clock = new ClockFace({ if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15; if (this.powerSaving===undefined) this.powerSaving = true; ["L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9"].forEach(k => { - if (this[k]===undefined) this[k] = "Empty"; + if (this[k]===undefined){ + if(k == "L2") this[k] = "Date"; + else if(k == "L3") { + this[k] = "HR"; + this.showHRM = true; + }else if(k == "L4") this[k] = "Motion"; + else if(k == "L5") this[k] = "Steps"; + else if(k == "L6") this[k] = ">"; + else this[k] = "Empty"; + } else if (this[k]==="HR") this.showHRM = true; else if (this[k]==="Alt") this.showAltitude = true && process.env.HWVERSION == 2; }); diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index dfc9d88c2..59b55fb34 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -8,11 +8,11 @@ HRMinConfidence: 50, powerSaving: true, PowerOnInterval: 15, - L2: 'Empty', - L3: 'Empty', - L4: 'Empty', - L5: 'Empty', - L6: 'Empty', + L2: 'Date', + L3: 'HR', + L4: 'Motion', + L5: 'Steps', + L6: '>', L7: 'Empty', L8: 'Empty', L9: 'Empty', @@ -102,4 +102,4 @@ } E.showMenu(getMainMenu()); -})(); \ No newline at end of file +}) \ No newline at end of file From 93c18eb16e89707e6e17173ad4aea30e70778f55 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 21:55:21 +0200 Subject: [PATCH 09/12] Use default Bangle formatter for booleans --- apps/terminalclock/settings.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 59b55fb34..55035bfa3 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -65,7 +65,6 @@ }, 'Show widgets': { value: settings.loadWidgets, - format: v => v?"Yes":"No", onchange: v => { settings.loadWidgets = v; writeSettings(); @@ -73,7 +72,6 @@ }, 'Power saving': { value: settings.powerSaving, - format: v => v?"On":"Off", onchange: v => { settings.powerSaving = v; writeSettings(); @@ -91,9 +89,7 @@ settings.PowerOnInterval = v; writeSettings(); }, - format: x => { - return x + " min"; - }, + format: x => x + " min" }; } From 295d646e74f584c4f00c7e5fd9529de01fbbc2e5 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sat, 18 Jun 2022 22:12:21 +0200 Subject: [PATCH 10/12] [TerminalClock] Use "m" instead of "min" for consistence with other apps --- apps/terminalclock/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 55035bfa3..f347e8ee3 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -89,7 +89,7 @@ settings.PowerOnInterval = v; writeSettings(); }, - format: x => x + " min" + format: x => x + "m" }; } From 4d8558ef1328ed75efca2a77d0b0a63a3f8815ac Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sun, 19 Jun 2022 08:47:59 +0200 Subject: [PATCH 11/12] [TerminalClock] Attempt to fix high batery usage since the switch to ClockFace --- apps/terminalclock/app.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 9b8eb1351..b60a32094 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -21,10 +21,15 @@ if (process.env.HWVERSION == 1){ // initialising the clockface const ClockFace = require("ClockFace"); const clock = new ClockFace({ + precision: 60, + settingsFile: "terminalclock.json", + init: function () { // check settings and set default if needed this.showHRM = false; this.showAltitude = false; + this.lock_precision = this.precision; + this.unlock_precision = 1; if (this.HRMinConfidence === undefined) this.HRMinConfidence = 50; if (this.PowerOnInterval === undefined) this.PowerOnInterval = 15; if (this.powerSaving===undefined) this.powerSaving = true; @@ -50,11 +55,13 @@ const clock = new ClockFace({ }); // set the services (HRM, pressure sensor, etc....) - turnOnServices(); - if(this.powerSaving){ + if(!this.powerSaving){ + turnOnServices(); + } else{ setInterval(turnOnServices, this.PowerOnInterval*60000); // every PowerOnInterval min } - + // start the clock unlocked + unlock(); }, draw: function (date) { @@ -74,8 +81,6 @@ const clock = new ClockFace({ curPos++; }); }, - - settingsFile: "terminalclock.json" }); @@ -192,13 +197,12 @@ function unlock(){ if(clock.powerSaving){ turnOnServices(); } - clock.old_precision = clock.precision; - clock.precision = 1; + clock.precision = clock.unlock_precision; clock.tick(); } function lock(){ - clock.precision = clock.old_precision; + clock.precision = clock.lock_precision; clock.tick(); } From a201f9142b983361af92562ca1287568155a47a0 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Sun, 19 Jun 2022 21:03:17 +0200 Subject: [PATCH 12/12] [ClockFace] Revert ClockFace change like the PR #1985 solve the issue --- modules/ClockFace.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/ClockFace.js b/modules/ClockFace.js index 5020af23f..f8dc33287 100644 --- a/modules/ClockFace.js +++ b/modules/ClockFace.js @@ -58,6 +58,7 @@ ClockFace.prototype.tick = function() { }; if (!this._last) { g.clear(true); + if (global.WIDGETS) Bangle.drawWidgets(); g.reset(); this.draw.apply(this, [time, {d: true, h: true, m: true, s: true}]); } else { @@ -69,7 +70,6 @@ ClockFace.prototype.tick = function() { g.reset(); this.update.apply(this, [time, c]); } - if (global.WIDGETS) Bangle.drawWidgets(); this._last = now; if (this.paused) return; // called redraw() while still paused // figure out timeout: if e.g. precision=60s, update at the start of a new minute @@ -103,13 +103,12 @@ ClockFace.prototype.pause = function() { this.paused = true; // apps might want to check this if (this._pause) this._pause.apply(this); }; - ClockFace.prototype.resume = function() { if (this._timeout) return; // not paused delete this._last; this.paused = false; if (this._resume) this._resume.apply(this); - this.tick(); + this.tick(true); }; /**