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/app.js b/apps/bikespeedo/app.js index 6f462a820..327f1c754 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 = ''; @@ -227,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); @@ -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 @@ -337,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) { @@ -367,7 +327,6 @@ function onGPS(fix) { var sp = '---'; var al = '---'; - var di = '---'; var age = '---'; if (fix.fix) lf = fix; @@ -412,10 +371,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 { @@ -448,15 +403,7 @@ function onGPS(fix) { } } -function setButtons(){ - setWatch(_=>load(), BTN1); - -onGPS(lf); -} - - function updateClock() { - if (!canDraw) return; drawTime(); g.reset(); @@ -545,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); @@ -556,10 +507,30 @@ function start() { Bangle.setCompassPower(1); if (!calibrateCompass) setInterval(Compass_reading,200); - setButtons(); if (emulator) setInterval(updateClock, 2000); else setInterval(updateClock, 10000); + let createdRecording = false; + Bangle.setUI({ + mode: "custom", + touch: nextMode, + btn: () => { + const rec = WIDGETS["recorder"]; + if(rec){ + const active = rec.isRecording(); + if(active){ + createdRecording = true; + rec.setRecording(false); + }else{ + rec.setRecording(true, { force: createdRecording ? "append" : "new" }); + } + }else{ + nextMode(); + } + }, + }); + + // can't delay loadWidgets til here - need to have already done so for recorder Bangle.drawWidgets(); } @@ -571,6 +542,7 @@ if (cfg.record && WIDGETS["recorder"]) { if (cfg.recordStopOnExit) E.on('kill', () => WIDGETS["recorder"].setRecording(false)); + } else { start(); } 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"}], 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", 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