From 464ef744504d823bb1bd3b0c3147c08f4915a622 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:01:20 +0100 Subject: [PATCH 01/11] bikespeedo: trim dead code --- apps/bikespeedo/app.js | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 6f462a820..d68c089fd 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -12,7 +12,7 @@ const fontFactorB2 = 2/3; const colfg=g.theme.fg, colbg=g.theme.bg; const col1=colfg, colUncertain="#88f"; // if (lf.fix) g.setColor(col1); else g.setColor(colUncertain); -var altiGPS=0, altiBaro=0; +var altiBaro=0; var hdngGPS=0, hdngCompass=0, calibrateCompass=false; /*kalmanjs, Wouter Bulten, MIT, https://github.com/wouterbulten/kalmanjs */ @@ -183,7 +183,6 @@ var KalmanFilter = (function () { var lf = {fix:0,satellites:0}; var showMax = 0; // 1 = display the max values. 0 = display the cur fix -var canDraw = 1; var time = ''; // Last time string displayed. Re displayed in background colour to remove before drawing new time. var sec; // actual seconds for testing purposes @@ -194,30 +193,9 @@ max.n = 0; // counter. Only start comparing for max after a certain number of var emulator = (process.env.BOARD=="EMSCRIPTEN" || process.env.BOARD=="EMSCRIPTEN2")?1:0; // 1 = running in emulator. Supplies test values; -var wp = {}; // Waypoint to use for distance from cur position. var SATinView = 0; -function radians(a) { - return a*Math.PI/180; -} - -function distance(a,b){ - var x = radians(a.lon-b.lon) * Math.cos(radians((a.lat+b.lat)/2)); - var y = radians(b.lat-a.lat); - - // Distance in selected units - var d = Math.sqrt(x*x + y*y) * 6371000; - d = (d/parseFloat(cfg.dist)).toFixed(2); - if ( d >= 100 ) d = parseFloat(d).toFixed(1); - if ( d >= 1000 ) d = parseFloat(d).toFixed(0); - - return d; -} - function drawFix(dat) { - - if (!canDraw) return; - g.clearRect(0,screenYstart,screenW,screenH); var v = ''; @@ -260,14 +238,6 @@ function drawFix(dat) { } -function drawClock() { - if (!canDraw) return; - g.clearRect(0,screenYstart,screenW,screenH); - drawTime(); - g.reset(); -} - - function drawPrimary(n,u) { //if(emulator)console.log("\n1: " + n +" "+ u); var s=40; // Font size @@ -367,7 +337,6 @@ function onGPS(fix) { var sp = '---'; var al = '---'; - var di = '---'; var age = '---'; if (fix.fix) lf = fix; @@ -412,10 +381,6 @@ function onGPS(fix) { al = Math.round(parseFloat(al)/parseFloat(cfg.alt)); if (parseFloat(al) > parseFloat(max.alt) && max.n > 15 ) max.alt = parseFloat(al); - // Distance to waypoint - di = distance(lf,wp); - if (isNaN(di)) di = 0; - // Age of last fix (secs) age = Math.max(0,Math.round(getTime())-(lf.time.getTime()/1000)); } else { @@ -456,7 +421,6 @@ onGPS(lf); function updateClock() { - if (!canDraw) return; drawTime(); g.reset(); From 598940e90e54a098c25aea4c9811bb7cb93d155d Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:01:29 +0100 Subject: [PATCH 02/11] recorder: expose isRecording() --- apps/recorder/widget.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index e57f293c7..a17d09a53 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -231,6 +231,8 @@ },getRecorders:getRecorders,reload:function() { reload(); Bangle.drawWidgets(); // relayout all widgets + },isRecording:function() { + return !!writeInterval; },setRecording:function(isOn, options) { /* options = { force : [optional] "append"/"new"/"overwrite" - don't ask, just do what's requested From 12e6e4b2b05c226ea0614d0583f24f9c8911a39b Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:01:42 +0100 Subject: [PATCH 03/11] bikespeedo: toggle recording on btn press --- apps/bikespeedo/app.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index d68c089fd..29120772b 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -535,6 +535,20 @@ if (cfg.record && WIDGETS["recorder"]) { if (cfg.recordStopOnExit) E.on('kill', () => WIDGETS["recorder"].setRecording(false)); + + Bangle.setUI( + "custom", + () => { + const wid = WIDGETS["recorder"]; + const active = wid.isRecording(); + + if(active) + wid.setRecording(false); + else + wid.setRecording(true, { force: "append" }); + }, + ); + } else { start(); } From cca9906f85ba479bc6de073f7c8e08e921b8ae00 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:04:29 +0100 Subject: [PATCH 04/11] bikespeedo: check recorder widget each press --- apps/bikespeedo/app.js | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 29120772b..0a056f938 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -536,19 +536,20 @@ if (cfg.record && WIDGETS["recorder"]) { if (cfg.recordStopOnExit) E.on('kill', () => WIDGETS["recorder"].setRecording(false)); - Bangle.setUI( - "custom", - () => { - const wid = WIDGETS["recorder"]; - const active = wid.isRecording(); - - if(active) - wid.setRecording(false); - else - wid.setRecording(true, { force: "append" }); - }, - ); - } else { start(); } + +Bangle.setUI({ + mode: "custom", + btn: () => { + const rec = WIDGETS["recorder"]; + if(!rec) return; + + const active = rec.isRecording(); + if(active) + rec.setRecording(false); + else + rec.setRecording(true, { force: "append" }); + }, +}); From 24271110bb511c7537c9ad21dadb27f84566a340 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:35:41 +0100 Subject: [PATCH 05/11] bikespeedo: remove second onGPS() call (already done in start()) --- apps/bikespeedo/app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 0a056f938..9dec29d7d 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -415,8 +415,6 @@ function onGPS(fix) { function setButtons(){ setWatch(_=>load(), BTN1); - -onGPS(lf); } From 308220680328c3fe36895eaa7dcdc17f0a7110bb Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:37:03 +0100 Subject: [PATCH 06/11] bikespeedo: show max values if showMax is true --- apps/bikespeedo/app.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 9dec29d7d..b1f558647 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -205,7 +205,7 @@ function drawFix(dat) { v = (cfg.primSpd)?dat.speed.toString():dat.alt.toString(); // Primary Units - u = (cfg.primSpd)?cfg.spd_unit:dat.alt_units; + u = (showMax ? 'max ' : '') + (cfg.primSpd?cfg.spd_unit:dat.alt_units); drawPrimary(v,u); @@ -307,16 +307,6 @@ function drawSats(sats) { g.setFont("6x8", 2); g.setFontAlign(1,1); //right, bottom g.drawString(sats,screenW,screenH); - - g.setFontVector(18); - g.setColor(col1); - - if ( cfg.modeA == 1 ) { - if ( showMax ) { - g.setFontAlign(0,1); //centre, bottom - g.drawString('MAX',120,164); - } - } } function onGPS(fix) { From 86c6040a72c6234830b408aed3211a8018a4b767 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:38:02 +0100 Subject: [PATCH 07/11] bikespeedo: setUI once loaded, btn to toggle recording --- apps/bikespeedo/app.js | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index b1f558647..d5f9a3cf6 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -403,11 +403,6 @@ function onGPS(fix) { } } -function setButtons(){ - setWatch(_=>load(), BTN1); -} - - function updateClock() { drawTime(); g.reset(); @@ -508,10 +503,24 @@ function start() { Bangle.setCompassPower(1); if (!calibrateCompass) setInterval(Compass_reading,200); - setButtons(); if (emulator) setInterval(updateClock, 2000); else setInterval(updateClock, 10000); + Bangle.setUI({ + mode: "custom", + btn: () => { + const rec = WIDGETS["recorder"]; + if(!rec) return; + + const active = rec.isRecording(); + if(active) + rec.setRecording(false); + else + rec.setRecording(true, { force: "append" }); + }, + }); + + // can't delay loadWidgets til here - need to have already done so for recorder Bangle.drawWidgets(); } @@ -527,17 +536,3 @@ if (cfg.record && WIDGETS["recorder"]) { } else { start(); } - -Bangle.setUI({ - mode: "custom", - btn: () => { - const rec = WIDGETS["recorder"]; - if(!rec) return; - - const active = rec.isRecording(); - if(active) - rec.setRecording(false); - else - rec.setRecording(true, { force: "append" }); - }, -}); From 96d4ae07d38c4d265cb5ded32db850e0187dcf0f Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:38:29 +0100 Subject: [PATCH 08/11] bikespeedo: tap / btn (when not recording) to toggle showMax --- apps/bikespeedo/app.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index d5f9a3cf6..6e22cc7a1 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -492,6 +492,10 @@ function Compass_reading() { hdngCompass = Compass_heading.toFixed(0); } +function nextMode() { + showMax = 1 - showMax; +} + function start() { Bangle.setBarometerPower(1); // needs some time... g.clearRect(0,screenYstart,screenW,screenH); @@ -508,15 +512,18 @@ function start() { Bangle.setUI({ mode: "custom", + touch: nextMode, btn: () => { const rec = WIDGETS["recorder"]; - if(!rec) return; - - const active = rec.isRecording(); - if(active) - rec.setRecording(false); - else - rec.setRecording(true, { force: "append" }); + if(rec){ + const active = rec.isRecording(); + if(active) + rec.setRecording(false); + else + rec.setRecording(true, { force: "append" }); + }else{ + nextMode(); + } }, }); From 4585df251924c7cbbf15f879a29cd8f66b0abf18 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 25 May 2023 21:46:28 +0100 Subject: [PATCH 09/11] bikespeedo: automatically create new recording if initial time --- apps/bikespeedo/app.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/bikespeedo/app.js b/apps/bikespeedo/app.js index 6e22cc7a1..327f1c754 100644 --- a/apps/bikespeedo/app.js +++ b/apps/bikespeedo/app.js @@ -510,6 +510,7 @@ function start() { if (emulator) setInterval(updateClock, 2000); else setInterval(updateClock, 10000); + let createdRecording = false; Bangle.setUI({ mode: "custom", touch: nextMode, @@ -517,10 +518,12 @@ function start() { const rec = WIDGETS["recorder"]; if(rec){ const active = rec.isRecording(); - if(active) + if(active){ + createdRecording = true; rec.setRecording(false); - else - rec.setRecording(true, { force: "append" }); + }else{ + rec.setRecording(true, { force: createdRecording ? "append" : "new" }); + } }else{ nextMode(); } From 201cbdd84382e498e5942bd4e65109725016d352 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Fri, 26 May 2023 17:45:07 +0100 Subject: [PATCH 10/11] bikespeedo: version bump --- 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 b47f8cdc3..52459d312 100644 --- a/apps/bikespeedo/ChangeLog +++ b/apps/bikespeedo/ChangeLog @@ -2,3 +2,4 @@ 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 +0.05: Allow toggling of "max" values (screen tap) and recording (button press) diff --git a/apps/bikespeedo/metadata.json b/apps/bikespeedo/metadata.json index ea74db9a1..87c0ed542 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.04", + "version": "0.05", "description": "Shows GPS speed, GPS heading, Compass heading, GPS altitude and Barometer altitude from internal sources", "icon": "app.png", "screenshots": [{"url":"Screenshot.png"}], From b69f2224b858b917bc4c6e9f364e687f20b7013e Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Fri, 26 May 2023 21:31:59 +0100 Subject: [PATCH 11/11] recorder: bump version --- apps/recorder/ChangeLog | 3 ++- apps/recorder/metadata.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 874e4699c..9a696a8c2 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -29,4 +29,5 @@ 0.23: Add graphing for HRM, fix some other graphs Altitude graphing now uses barometer altitude if it exists plotTrack in widget allows track to be drawn in the background (doesn't block execution) -0.24: Can now specify `setRecording(true, {force:...` to not show a menu \ No newline at end of file +0.24: Can now specify `setRecording(true, {force:...` to not show a menu +0.25: Widget now has `isRecording()` for retrieving recording status. diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index 99f1539c6..00c1c965e 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.24", + "version": "0.25", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget",