From cf4daf58fe988461d9926bfea14e40de2d77c25d Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 7 May 2023 22:47:14 +0100 Subject: [PATCH 1/5] bikespeedo: add option for locale-units (e.g. mph) --- apps/bikespeedo/app.js | 8 +++++++- apps/bikespeedo/settings.js | 10 +++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index a62a429e5..6374c0d6f 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -416,6 +416,12 @@ function onGPS(fix) { // Age of last fix (secs) age = Math.max(0,Math.round(getTime())-(lf.time.getTime()/1000)); + } else { + // populate spd_unit + if (cfg.spd == 0) { + m = require("locale").speed(0).match(/[0-9,\.]+(.*)/); + cfg.spd_unit = m[1]; + } } if ( cfg.modeA == 1 ) { @@ -465,7 +471,7 @@ function updateClock() { // Read settings. let cfg = require('Storage').readJSON('bikespeedo.json',1)||{}; -cfg.spd = 1; // Multiplier for speed unit conversions. 0 = use the locale values for speed +cfg.spd = !cfg.localeUnits; // Multiplier for speed unit conversions. 0 = use the locale values for speed cfg.spd_unit = 'km/h'; // Displayed speed unit cfg.alt = 1; // Multiplier for altitude unit conversions. (feet:'0.3048') cfg.alt_unit = 'm'; // Displayed altitude units ('feet') diff --git a/apps/bikespeedo/settings.js b/apps/bikespeedo/settings.js index f41524263..1245fce4c 100644 --- a/apps/bikespeedo/settings.js +++ b/apps/bikespeedo/settings.js @@ -11,7 +11,15 @@ '< Back': back, '< Load Bike Speedometer': ()=>{load('bikespeedo.app.js');}, 'Barometer Altitude adjustment' : function() { E.showMenu(altdiffMenu); }, - 'Kalman Filters' : function() { E.showMenu(kalMenu); } + 'Kalman Filters' : function() { E.showMenu(kalMenu); }, + 'Speed units': { + value: !!settings.localeUnits, + format: b => b ? "Locale" : "km/h", + onchange: b => { + settings.localeUnits = b; + writeSettings(); + } + }, }; const altdiffMenu = { From afe37b55fa1de9ba3413215546527afb5b22ae18 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 7 May 2023 23:08:04 +0100 Subject: [PATCH 2/5] bikespeedo: guard against showing NaN speed --- apps/bikespeedo/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 6374c0d6f..023e7795c 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -403,6 +403,8 @@ function onGPS(fix) { if ( sp < 10 ) sp = sp.toFixed(1); else sp = Math.round(sp); + if (isNaN(sp)) sp = '---'; + if (parseFloat(sp) > parseFloat(max.spd) && max.n > 15 ) max.spd = parseFloat(sp); // Altitude From 9e93d1588d81d3be16fd27a12316c5aa0c313444 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 7 May 2023 23:26:46 +0100 Subject: [PATCH 3/5] bikespeedo: add option to record ride --- apps/bikespeedo/app.js | 37 ++++++++++++++++++++++++------------- apps/bikespeedo/settings.js | 9 +++++++++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 023e7795c..297fd33d2 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -507,14 +507,6 @@ function onPressure(dat) { altiBaro = Number(dat.altitude.toFixed(0)) + Number(cfg.altDiff); } -Bangle.setBarometerPower(1); // needs some time... -g.clearRect(0,screenYstart,screenW,screenH); -onGPS(lf); -Bangle.setGPSPower(1); -Bangle.on('GPS', onGPS); -Bangle.on('pressure', onPressure); - -Bangle.setCompassPower(1); var CALIBDATA = require("Storage").readJSON("magnav.json",1)||null; if (!CALIBDATA) calibrateCompass = true; function Compass_tiltfixread(O,S){ @@ -552,11 +544,30 @@ function Compass_reading() { Compass_heading = Compass_newHeading(d,Compass_heading); hdngCompass = Compass_heading.toFixed(0); } -if (!calibrateCompass) setInterval(Compass_reading,200); -setButtons(); -if (emulator) setInterval(updateClock, 2000); -else setInterval(updateClock, 10000); +function start() { + Bangle.setBarometerPower(1); // needs some time... + g.clearRect(0,screenYstart,screenW,screenH); + onGPS(lf); + Bangle.setGPSPower(1); + Bangle.on('GPS', onGPS); + Bangle.on('pressure', onPressure); + + Bangle.setCompassPower(1); + if (!calibrateCompass) setInterval(Compass_reading,200); + + setButtons(); + if (emulator) setInterval(updateClock, 2000); + else setInterval(updateClock, 10000); + + Bangle.drawWidgets(); +} Bangle.loadWidgets(); -Bangle.drawWidgets(); +if (cfg.record && WIDGETS["recorder"]) { + WIDGETS["recorder"] + .setRecording(true) + .then(start); +} else { + start(); +} diff --git a/apps/bikespeedo/settings.js b/apps/bikespeedo/settings.js index 1245fce4c..781183305 100644 --- a/apps/bikespeedo/settings.js +++ b/apps/bikespeedo/settings.js @@ -22,6 +22,15 @@ }, }; + if (global.WIDGETS && WIDGETS["recorder"]) + appMenu[/*LANG*/"Record rides"] = { + value : !!settings.record, + onchange : v => { + settings.record = v; + writeSettings(); + } + }; + const altdiffMenu = { '': { 'title': 'Altitude adjustment' }, '< Back': function() { E.showMenu(appMenu); }, From 425df4a3dbc82185d9d1583908adb4a4026d2fde Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Sun, 7 May 2023 23:27:14 +0100 Subject: [PATCH 4/5] bikespeedo: changelog & metadata --- apps/bikespeedo/ChangeLog | 1 + apps/bikespeedo/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bikespeedo/ChangeLog b/apps/bikespeedo/ChangeLog index 10752ee2b..b47f8cdc3 100644 --- a/apps/bikespeedo/ChangeLog +++ b/apps/bikespeedo/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Barometer altitude adjustment setting 0.03: Use default Bangle formatter for booleans +0.04: Add options for units in locale and recording GPS diff --git a/apps/bikespeedo/metadata.json b/apps/bikespeedo/metadata.json index 80b91427c..ea74db9a1 100644 --- a/apps/bikespeedo/metadata.json +++ b/apps/bikespeedo/metadata.json @@ -2,7 +2,7 @@ "id": "bikespeedo", "name": "Bike Speedometer (beta)", "shortName": "Bike Speedometer", - "version": "0.03", + "version": "0.04", "description": "Shows GPS speed, GPS heading, Compass heading, GPS altitude and Barometer altitude from internal sources", "icon": "app.png", "screenshots": [{"url":"Screenshot.png"}], From ca03a82535716aa5986991d558112a96defcc803 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 8 May 2023 10:49:33 +0100 Subject: [PATCH 5/5] bikespeedo: option to stop recording on app exit --- apps/bikespeedo/app.js | 3 +++ apps/bikespeedo/settings.js | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 297fd33d2..6f462a820 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -568,6 +568,9 @@ if (cfg.record && WIDGETS["recorder"]) { WIDGETS["recorder"] .setRecording(true) .then(start); + + if (cfg.recordStopOnExit) + E.on('kill', () => WIDGETS["recorder"].setRecording(false)); } else { start(); } diff --git a/apps/bikespeedo/settings.js b/apps/bikespeedo/settings.js index 781183305..bb943c081 100644 --- a/apps/bikespeedo/settings.js +++ b/apps/bikespeedo/settings.js @@ -22,7 +22,7 @@ }, }; - if (global.WIDGETS && WIDGETS["recorder"]) + if (global.WIDGETS && WIDGETS["recorder"]) { appMenu[/*LANG*/"Record rides"] = { value : !!settings.record, onchange : v => { @@ -30,6 +30,14 @@ writeSettings(); } }; + appMenu[/*LANG*/"Stop record on exit"] = { + value : !!settings.recordStopOnExit, + onchange : v => { + settings.recordStopOnExit = v; + writeSettings(); + } + }; + } const altdiffMenu = { '': { 'title': 'Altitude adjustment' },