From 32b91e4d574bf5f90afcb265d216fda721947bf9 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Tue, 16 Feb 2021 21:15:00 +0000 Subject: [PATCH 1/4] adjusted a few sentences in walkersclock README.md --- apps/walkersclock/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/walkersclock/README.md b/apps/walkersclock/README.md index 0c10f79eb..7ff45a06a 100644 --- a/apps/walkersclock/README.md +++ b/apps/walkersclock/README.md @@ -57,7 +57,5 @@ on the second line of the watch. ![](gps_alt.jpg) ## Future Enhancements -* Ability to turn on the Heart Rate monitor +* Ability to turn on the heart rate monitor and display the rate on the info line * Maybe a simple stopwatch capability -* Fix the screen flicker - From c980a68a1f4b157c581c032dfba2532258f4dfe8 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Tue, 16 Feb 2021 21:15:43 +0000 Subject: [PATCH 2/4] reduced flicker in walkersclock --- apps/walkersclock/app.js | 71 +++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/apps/walkersclock/app.js b/apps/walkersclock/app.js index df009534a..5e4b114a9 100644 --- a/apps/walkersclock/app.js +++ b/apps/walkersclock/app.js @@ -46,6 +46,10 @@ let gpsPowerState = false; let infoMode = INFO_NONE; let functionMode = FN_MODE_OFF; let gpsDisplay = GDISP_OS; +let prevInfoStr = "clear"; +let prevActivityStr = "clear"; +let prevSteps = "clear"; +let clearActivityArea = true; let last_steps = undefined; let firstPress = 0; @@ -66,7 +70,8 @@ function drawTime() { var time = da[4].substr(0,5); g.reset(); - g.clearRect(0,24,239,239); + g.clearRect(0,Y_TIME, 239, Y_ACTIVITY - 1); + g.setColor(1,1,1); // white g.setFontAlign(0, -1); @@ -81,15 +86,22 @@ function drawTime() { g.drawString(time, g.getWidth()/2, Y_TIME); } -function drawSteps() { - g.setColor(0,255,0); // green - g.setFont("Vector", 60); - g.drawString(getSteps(), g.getWidth()/2, Y_ACTIVITY); -} - function drawActivity() { + var steps = getSteps(); + if (!gpsPowerState && steps != prevSteps) + clearActivityArea = true; + + prevSteps = steps; + + if (clearActivityArea) { + g.clearRect(0, Y_ACTIVITY, 239, Y_MODELINE - 1); + clearActivityArea = false; + } + if (!gpsPowerState) { - drawSteps(); + g.setColor(0,255,0); // green + g.setFont("Vector", 60); + g.drawString(getSteps(), g.getWidth()/2, Y_ACTIVITY); return; } @@ -116,6 +128,7 @@ function drawActivity() { let os = OsGridRef.latLongToOsGrid(last_fix); let ref = to_map_ref(6, os.easting, os.northing); let speed; + let activityStr = ""; if (age < 0) age = 0; g.setFontVector(40); @@ -123,18 +136,20 @@ function drawActivity() { switch(gpsDisplay) { case GDISP_OS: - g.drawString(ref, 120, Y_ACTIVITY, true); + activityStr = ref; break; case GDISP_SPEED: speed = last_fix.speed; speed = speed.toFixed(1); - g.drawString(speed + "kph", 120, Y_ACTIVITY, true); + activityStr = speed + "kph" break; case GDISP_ALT: - g.drawString(last_fix.alt + "m" , 120, Y_ACTIVITY, true); + activityStr = last_fix.alt + "m"; break; } + g.clearRect(0, Y_ACTIVITY, 239, Y_MODELINE - 1); + g.drawString(activityStr, 120, Y_ACTIVITY); g.setFont("6x8",2); g.setColor(1,1,1); g.drawString(age, 120, Y_ACTIVITY + 46); @@ -174,8 +189,6 @@ function drawInfo() { let str = ""; let col = 0x07E0; // green - //console.log("drawInfo(), infoMode=" + infoMode + " funcMode=" + functionMode); - switch(functionMode) { case FN_MODE_OFF: break; @@ -213,11 +226,17 @@ function drawInfo() { default: str = "Battery: " + E.getBattery() + "%"; } - + drawModeLine(str,col); } -function drawModeLine(str, col) { +function drawModeLine(str,col) { + // check if we need to draw, avoid flicker + if (str == prevInfoStr) + return; + + prevInfoStr = str; + drawModeLine(str,col); g.setFont("6x8", 3); g.setColor(col); g.fillRect(0, Y_MODELINE - 3, 239, Y_MODELINE + 25); @@ -249,7 +268,7 @@ function changeInfoMode() { } functionMode = FN_MODE_OFF; infoMode = INFO_NONE; - //drawInfo(); + clearActivityArea = true; return; case FN_MODE_GDISP: @@ -281,7 +300,8 @@ function changeInfoMode() { default: infoMode = INFO_NONE; } - //drawInfo(); + + clearActivityArea = true; } function changeFunctionMode() { @@ -331,11 +351,16 @@ function resetLastFix() { function processFix(fix) { last_fix.time = fix.time; - if (gpsState == GPS_TIME) + if (gpsState == GPS_TIME) { gpsState = GPS_SATS; + clearActivityArea = true; + } if (fix.fix) { - if (!last_fix.fix) Bangle.buzz(); // buzz on first position + if (!last_fix.fix) { + Bangle.buzz(); // buzz on first position + clearActivityArea = true; + } gpsState = GPS_RUNNING; last_fix = fix; } @@ -508,7 +533,13 @@ drawAll(); Bangle.on('lcdPower',function(on) { functionMode = FN_MODE_OFF; infoMode = INFO_NONE; - if (on) drawAll(); + if (on) { + prevInfoStr = "on"; // forces are redraw + drawAll(); + } else { + prevInfoStr = "off"; // forces are redraw + drawInfo(); + } }); var click = setInterval(onTick, 5000); From 49e964506a7b4e70ad2eaa511081779a4111d682 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Tue, 16 Feb 2021 21:16:45 +0000 Subject: [PATCH 3/4] added ChangeLog for walkersclock --- apps/walkersclock/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 apps/walkersclock/ChangeLog diff --git a/apps/walkersclock/ChangeLog b/apps/walkersclock/ChangeLog new file mode 100644 index 000000000..411b8503c --- /dev/null +++ b/apps/walkersclock/ChangeLog @@ -0,0 +1,2 @@ +0.01: First version of the Walkers Clock +0.02: Fixed screen flicker From 031e2b2cec17070856a945adc4fdf3e9fe70afd4 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Wed, 17 Feb 2021 18:05:16 +0000 Subject: [PATCH 4/4] bumped version for walkersclock --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index d1f824126..670cf342f 100644 --- a/apps.json +++ b/apps.json @@ -2809,7 +2809,7 @@ "name": "Walkers Clock", "shortName":"Walkers Clock", "icon": "walkersclock48.png", - "version":"0.01", + "version":"0.02", "description": "A larg font watch, displays steps, can switch GPS on/off, displays grid reference", "type":"clock", "tags": "clock, gps, tools, outdoors",