From e41c7bfb141de3ce494108ab8f1ea89245acc7bf Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:30:04 +1300 Subject: [PATCH 01/91] Create index.md --- apps/speedalt/index.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/speedalt/index.md diff --git a/apps/speedalt/index.md b/apps/speedalt/index.md new file mode 100644 index 000000000..557db03de --- /dev/null +++ b/apps/speedalt/index.md @@ -0,0 +1 @@ +Hello World From 458cd4cb2e990149b101242bde501b64114032dd Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:33:04 +1300 Subject: [PATCH 02/91] Set theme jekyll-theme-slate --- _config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 _config.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 000000000..c74188174 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file From 256cdba480f23ebb4f4ae7d5eda128f6b9b63729 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:39:23 +1300 Subject: [PATCH 03/91] Delete index.md --- apps/speedalt/index.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/speedalt/index.md diff --git a/apps/speedalt/index.md b/apps/speedalt/index.md deleted file mode 100644 index 557db03de..000000000 --- a/apps/speedalt/index.md +++ /dev/null @@ -1 +0,0 @@ -Hello World From 5ab4a1e71741fe86a46d44782041c04783d50046 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:42:19 +1300 Subject: [PATCH 04/91] Create app.js --- apps/speedalt/app.js | 255 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 apps/speedalt/app.js diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js new file mode 100644 index 000000000..eb1f5cd49 --- /dev/null +++ b/apps/speedalt/app.js @@ -0,0 +1,255 @@ +/* +Speed and Altitude [speedalt] +Ver : 0.1 +*/ + +var buf = Graphics.createArrayBuffer(240,120,2,{msb:true}); +/* +Colour Pallet Idx +0 : Background (black) +1 : Speed/Alt +2 : Units +3 : Sats +*/ +var img = { + width:buf.getWidth(), + height:buf.getHeight(), + bpp:2, + buffer:buf.buffer, + palette:new Uint16Array([0,0x4FE0,0xEFE0,0x07DB]) +}; + +var mainmenu = { + "" : { "title" : "-- Units --" }, + "default" : function() { setUnits(0,''); }, + "Kph (spd)" : function() { setUnits(1,'kph'); }, + "Knots (spd)" : function() { setUnits(1.852,'knots'); }, + "Mph (spd)" : function() { setUnits(1.60934,'mph'); }, + "m/s (spd)" : function() { setUnits(3.6,'m/s'); }, + "Meters (alt)" : function() { setUnitsAlt(1,'m'); }, + "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); }, + "Exit" : function() { exitMenu(); }, // remove the menu and restore +}; + +var lastFix = {fix:0,satellites:0}; +var mode = 's'; // s = Primary display speed. a = Altitude +var multi = 0; // Multiplier for speed unit conversions. 0 = use the locale values for speed +var multi_alt = 1; // Multiplier for altitude unit conversions. +var units = ''; // Displayed speed unit +var units_alt = 'm'; // Displayed altitude units +var btnToggle=false; // ID of the toggle display button +var btnMenu=false; // ID of the menu button +var inMenu = 0; +var emulator = 1; // 1 = running in emulator. Supplies test value; + +/* + +const storage = require('Storage'); +let settings; + +function updateSettings() { + storage.write('speedalt.json', settings); +} + +function resetSettings() { + settings = { + day : 17, + month : 6, + year: 1981 + }; + updateSettings(); +} + +*/ + +function drawFix(speed,units,sats,alt,alt_units) { + + var str = ''; + + // Size fonts to always maximise the display fit + var s; + + // Primary Display + str = speed.toString(); + if ( mode == 'a' ) str = alt.toString(); + + s=40; // Font size + if ( str.length <= 7 ) s=48; + if ( str.length <= 6 ) s=55; + if ( str.length <= 5 ) s=68; + if ( str.length <= 4 ) s=85; + if ( str.length <= 3 ) s=110; + + buf.setFontAlign(0,-1); //Centre + buf.setColor(1); + + buf.setFontVector(s); + buf.drawString(str,110,0); + + // Primary Units + str = units; + if ( mode == 'a' ) str = alt_units; + buf.setFontAlign(1,-1,3); //right + buf.setColor(2); + buf.setFontVector(25); + buf.drawString(str,210,0); + + // Secondary Display + str = alt.toString(); + if ( mode == 'a' ) str = speed.toString(); + + s=115; // minor units X position + if ( str.length <= 7 ) s=120; + if ( str.length <= 6 ) s=105; + if ( str.length <= 5 ) s=87; + if ( str.length <= 4 ) s=70; + if ( str.length <= 3 ) s=55; + if ( str.length <= 2 ) s=40; + if ( str.length <= 1 ) s=25; + + buf.setFontAlign(-1,1); //left, bottom + buf.setColor(1); + buf.setFontVector(25); + buf.drawString(str,5,120); + + // Secondary Units + str = alt_units; + if ( mode == 'a' ) str = units; + buf.setFontAlign(-1,1); //left, bottom + buf.setColor(2); + buf.setFontVector(20); + buf.drawString(str,s,120); + + + //Sats + buf.setFontAlign(1,1); //right, bottom + buf.setColor(3); + buf.setFontVector(18); + buf.drawString(" Sats:"+sats,240,120); + +} + + +function drawNoFix(sats) { + + buf.setFontAlign(0,0); + buf.setColor(3); + + buf.setFontVector(18); + buf.drawString(" Sats:"+sats,120,10); + + buf.setFontVector(25); + buf.drawString("Waiting for GPS",120,56); + +} + +function onGPS(fix) { + + lastFix = fix; + buf.clear(); + + var m; + + if (fix.fix || emulator) { + //==== Speed ==== + // Default to locale speed units + if ( multi == 0 ) { + var strSpeed = require("locale").speed(fix.speed); + m = strSpeed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units + + if ( emulator ) { + speed = '125'; //testing only + units = 'kph'; + } + else { + speed = m[1]; + units = m[2]; + } + } + // Calculate for selected units + else { + speed = fix.speed; + if ( emulator ) speed = '100'; + speed = Math.round(parseFloat(speed)/parseFloat(multi),0); + } + + // ==== Altitude ==== + alt = fix.alt; + if ( emulator ) alt = '360'; + alt = Math.round(parseFloat(alt)/parseFloat(multi_alt),0); + + drawFix(speed,units,fix.satellites,alt,units_alt); + + } else { + drawNoFix(fix.satellites); + } + + g.reset(); + g.drawImage(img,0,70); + g.flip(); +} + +function setUnits(m,u) { + multi = m; + units = u; + + inMenu = 0; + + E.showMenu(); // remove the menu + onGPS(lastFix); // Back to Speed display +} + +function setUnitsAlt(m,u) { + multi_alt = m; + units_alt = u; + + inMenu = 0; + + E.showMenu(); // remove the menu + onGPS(lastFix); // Back to Speed display +} + +function enterMenu() { + if ( inMenu ) return; + inMenu = 1; + E.showMenu(mainmenu); +} + +function exitMenu() { + inMenu = 0; + E.showMenu(); + onGPS(lastFix); // remove the menu and restore + +} + +function toggleDisplay() { + if ( inMenu ) return; + if ( mode == 's' ) mode = 'a'; + else mode = 's'; + onGPS(lastFix); // Back to Speed display +} + +// How to disable these while in menu? Interim using inMenu flag. +function setButtons(){ + + // Touch screen to toggle display + btnToggle = setWatch(toggleDisplay, BTN4, {repeat:true,edge:"falling"}); + btnToggle = setWatch(toggleDisplay, BTN5, {repeat:true,edge:"falling"}); + + // Units menu + btnMenu = setWatch(enterMenu, BTN3,{repeat:true,edge:"falling"}); + + // setWatch(nextwp.bind(null,1), BTN3, {repeat:true,edge:"falling"}); +} + +g.clear(); +setUnitsAlt(0.3048,'feet'); // Default alt in feet + +onGPS(lastFix); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +Bangle.on('GPS', onGPS); +Bangle.setGPSPower(1); + +setButtons(); From 93db12ddb9f19e7b0744c766b363e672325e8258 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:50:14 +1300 Subject: [PATCH 05/91] Create app-icon.js --- apps/speedalt/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/speedalt/app-icon.js diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js new file mode 100644 index 000000000..d9f0a369a --- /dev/null +++ b/apps/speedalt/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("j0ewgXUgUiAAMgBpMjn//+cyB48Cl/zDgIRBB48j+cjmf/mcyB4IcFBoIMBAIQPBDwkjmUy/4ADkcj+QcDmcvBogAB+UzDwUC+RWBAAvzl4OCl4dBCAwdBJgUvFYJLCB4o8BHQIaCKgItFHgMCmRiBDw8zBwQxBBAUykQfDIoIOCIoptEByQsDYYIsHJQYAGJQZoDSw6lCQwQAHQwTQBYRSkCYRzgOfwQOGfwgeBWIxxBDgYeCB4I+B+bVBJAQeEB4LCBCIMyDgoPDDoYNHB4UiAAINJABQ=")) From 5725ce0c02aa2e9535f44985412ed66948fc0943 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 15:51:54 +1300 Subject: [PATCH 06/91] Create ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/speedalt/ChangeLog diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog new file mode 100644 index 000000000..a80755e41 --- /dev/null +++ b/apps/speedalt/ChangeLog @@ -0,0 +1 @@ +0.1 : Initial import. From 94033aef7759299412744dd21a706e5415984474 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:02:03 +1300 Subject: [PATCH 07/91] Update apps.json --- apps.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 874950130..a803b84c7 100644 --- a/apps.json +++ b/apps.json @@ -2605,5 +2605,18 @@ {"name":"lifeclk.app.js","url":"app.js"}, {"name":"lifeclk.img","url":"app-icon.js","evaluate":true} ] -} +}, +{ "id": "speedalt", + "name": "Speedo+Altimeter", + "shortName":"Speed Alt", + "icon": "app.png", + "version":"0.01", + "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during active outdoor activities such as para gliding, hang gliding, sailing, cycling etc.", + "tags": "", + "readme": "README.md", + "storage": [ + {"name":"speedalt.app.js","url":"app.js"}, + {"name":"speedalt.img","url":"app-icon.js","evaluate":true} + ] +} ] From c1ecddac0849748698b5110ee281489676a68918 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:04:54 +1300 Subject: [PATCH 08/91] Create README.md --- apps/speedalt/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/speedalt/README.md diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md new file mode 100644 index 000000000..cc8b126e1 --- /dev/null +++ b/apps/speedalt/README.md @@ -0,0 +1 @@ +to do From dedf8cd89dca1c22d65dc1689716a69cda11aea2 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:09:03 +1300 Subject: [PATCH 09/91] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index a803b84c7..9478d6104 100644 --- a/apps.json +++ b/apps.json @@ -2607,10 +2607,10 @@ ] }, { "id": "speedalt", - "name": "Speedo+Altimeter", + "name": "Speedo Altimeter", "shortName":"Speed Alt", "icon": "app.png", - "version":"0.01", + "version":"0.1", "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during active outdoor activities such as para gliding, hang gliding, sailing, cycling etc.", "tags": "", "readme": "README.md", From d21b173698491bc51509881e78e8d4e3c880823c Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:10:48 +1300 Subject: [PATCH 10/91] Update ChangeLog --- apps/speedalt/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index a80755e41..7b4640cda 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -1 +1 @@ -0.1 : Initial import. +0.01 : Initial import. From 968b400b303963c010707e727d42e82f00016856 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:11:39 +1300 Subject: [PATCH 11/91] Update app-icon.js --- apps/speedalt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index d9f0a369a..774f4bc90 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("j0ewgXUgUiAAMgBpMjn//+cyB48Cl/zDgIRBB48j+cjmf/mcyB4IcFBoIMBAIQPBDwkjmUy/4ADkcj+QcDmcvBogAB+UzDwUC+RWBAAvzl4OCl4dBCAwdBJgUvFYJLCB4o8BHQIaCKgItFHgMCmRiBDw8zBwQxBBAUykQfDIoIOCIoptEByQsDYYIsHJQYAGJQZoDSw6lCQwQAHQwTQBYRSkCYRzgOfwQOGfwgeBWIxxBDgYeCB4I+B+bVBJAQeEB4LCBCIMyDgoPDDoYNHB4UiAAINJABQ=")) +require("heatshrink").decompress(atob("j0exH+AFFdwNdAAQEBDauI1mz6/X2esxAfRDYOtC4OBHgQDBEYOtAgIcNCQIyBxGC1g7B1mCBAQoBHxdd1oOBxAZCDoYDCwQsB1oeJDgRPBwIVBAA4MCDxIpBDQetDpIKB2YeBLg+B2YfBVgQdJAAQbBEAJXGRwIgB2deHhQ9BTIOILYoZBOQmtDxh8CHgisBf4IvFDxoWCHgSgCc4YePe4IYCHYSfDNo1eAAIgHY4RaDrvXAIIAHDoVeBhAYCDr5ACLI5aDLJaVMABiVHaI4AOaIpaDDqayEHgWtxGIwLpKQAhtBHYI6DHgddPCAaBHgIcES4SfCDhrHDHQpbDDwJaMLAOs1ocHDwpcKBgQcKDwWs2aZBQ4JfC2bIBBAJ2CDhQeCLQIXBwWBroHBwQjBHYIcND4g7IDaAfFHQIDBDaoAUA=")) From a5065748b9d6fc948b7275e615ed40cb572c6eb4 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:15:07 +1300 Subject: [PATCH 12/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 9478d6104..ef53ac576 100644 --- a/apps.json +++ b/apps.json @@ -2612,7 +2612,7 @@ "icon": "app.png", "version":"0.1", "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during active outdoor activities such as para gliding, hang gliding, sailing, cycling etc.", - "tags": "", + "tags": "tool,outdoors", "readme": "README.md", "storage": [ {"name":"speedalt.app.js","url":"app.js"}, From 4c92bf08fb17ff0f523a412234e189958a47edc8 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 16:18:32 +1300 Subject: [PATCH 13/91] Update app-icon.js --- apps/speedalt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index 774f4bc90..8b1378917 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("j0exH+AFFdwNdAAQEBDauI1mz6/X2esxAfRDYOtC4OBHgQDBEYOtAgIcNCQIyBxGC1g7B1mCBAQoBHxdd1oOBxAZCDoYDCwQsB1oeJDgRPBwIVBAA4MCDxIpBDQetDpIKB2YeBLg+B2YfBVgQdJAAQbBEAJXGRwIgB2deHhQ9BTIOILYoZBOQmtDxh8CHgisBf4IvFDxoWCHgSgCc4YePe4IYCHYSfDNo1eAAIgHY4RaDrvXAIIAHDoVeBhAYCDr5ACLI5aDLJaVMABiVHaI4AOaIpaDDqayEHgWtxGIwLpKQAhtBHYI6DHgddPCAaBHgIcES4SfCDhrHDHQpbDDwJaMLAOs1ocHDwpcKBgQcKDwWs2aZBQ4JfC2bIBBAJ2CDhQeCLQIXBwWBroHBwQjBHYIcND4g7IDaAfFHQIDBDaoAUA=")) + From 3eac617d5755fbcffe6e0d6d4bfac96b301872fd Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:05:11 +1300 Subject: [PATCH 14/91] Update app-icon.js --- apps/speedalt/app-icon.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index 8b1378917..cbf543a0e 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1,5 @@ - +{ + width : 54, height : 54, bpp : 8, + transparent : 254, + buffer : require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) +} From 6d34fde2eb4ac7e8605f7bcb31f14ea0cda90426 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:06:49 +1300 Subject: [PATCH 15/91] Update app-icon.js --- apps/speedalt/app-icon.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index cbf543a0e..6a0cb8825 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1,5 +1 @@ -{ - width : 54, height : 54, bpp : 8, - transparent : 254, - buffer : require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) -} +require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) From 0e05a3feebc2470a8c75cc79b54e54fd71523a5c Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:10:58 +1300 Subject: [PATCH 16/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index ef53ac576..f851ea150 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "Speedo Altimeter", "shortName":"Speed Alt", "icon": "app.png", - "version":"0.1", + "version":"0.01", "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during active outdoor activities such as para gliding, hang gliding, sailing, cycling etc.", "tags": "tool,outdoors", "readme": "README.md", From 4523dc3288b36d2d0fd30e09353efb7ac1378cba Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:12:21 +1300 Subject: [PATCH 17/91] Add files via upload --- apps/speedalt/app.png | Bin 0 -> 3356 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/speedalt/app.png diff --git a/apps/speedalt/app.png b/apps/speedalt/app.png new file mode 100644 index 0000000000000000000000000000000000000000..41849d3072b2e9625782fb0ae0d61b931b312373 GIT binary patch literal 3356 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 mqNYDt-$NL}5QZ>>e&BBr{h5vNHZoHH0000 Date: Thu, 21 Jan 2021 19:15:33 +1300 Subject: [PATCH 18/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index f851ea150..647b17c34 100644 --- a/apps.json +++ b/apps.json @@ -2611,7 +2611,7 @@ "shortName":"Speed Alt", "icon": "app.png", "version":"0.01", - "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during active outdoor activities such as para gliding, hang gliding, sailing, cycling etc.", + "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "readme": "README.md", "storage": [ From 2d663bcf1e2d3bfca3212c8494e2479e0c7353cf Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:28:06 +1300 Subject: [PATCH 19/91] Update README.md --- apps/speedalt/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index cc8b126e1..5e9d707ba 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -1 +1,5 @@ -to do +Displays the GPS speed and altitude. One is displyed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller display below that. + +Display Tap : Swaps the displays. You can have either speed or altitude on the large display. + +BTN3 : Select the desire display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. From 94a288b53bae9259060763ee8a50efabe3b89f76 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:31:57 +1300 Subject: [PATCH 20/91] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 647b17c34..e80d61595 100644 --- a/apps.json +++ b/apps.json @@ -2607,8 +2607,8 @@ ] }, { "id": "speedalt", - "name": "Speedo Altimeter", - "shortName":"Speed Alt", + "name": "GPS Speedo and Altimeter", + "shortName":"GPS Speed Alt", "icon": "app.png", "version":"0.01", "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", From abed624a3ac124b5f1009eb6bc946d3196fb1e2a Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:39:05 +1300 Subject: [PATCH 21/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e80d61595..607b8a1af 100644 --- a/apps.json +++ b/apps.json @@ -2611,7 +2611,7 @@ "shortName":"GPS Speed Alt", "icon": "app.png", "version":"0.01", - "description": "GPS speed and altitude display. One as the primary display with the other as a smaller secondary display. Tap the screen to toggle primary display. BTN3 to select display units. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", + "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "readme": "README.md", "storage": [ From 811a65844851aaad0677029debe22d4ed8a8e3ea Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:48:51 +1300 Subject: [PATCH 22/91] Update README.md --- apps/speedalt/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 5e9d707ba..d76918317 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -1,5 +1,9 @@ -Displays the GPS speed and altitude. One is displyed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller display below that. +Displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. Display Tap : Swaps the displays. You can have either speed or altitude on the large display. -BTN3 : Select the desire display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. +BTN3 : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. + +Developed for my use in sailing, cycling and motorcycling. If you find this software useful or have feedback drop me a line mike[at]kereru.com. Enjoy! + +( Many thanks to Gordon Williams. Awesome job. ) From fa0a1105fdb8bc6d14b1c1dec4d3dda917d27563 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:58:26 +1300 Subject: [PATCH 23/91] Update README.md --- apps/speedalt/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index d76918317..0e476de2e 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -4,6 +4,8 @@ Display Tap : Swaps the displays. You can have either speed or altitude on the l BTN3 : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. + + Developed for my use in sailing, cycling and motorcycling. If you find this software useful or have feedback drop me a line mike[at]kereru.com. Enjoy! ( Many thanks to Gordon Williams. Awesome job. ) From 6ed380f8619a85ff3046048f2398a4febb92dcff Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 21 Jan 2021 19:59:36 +1300 Subject: [PATCH 24/91] Add files via upload --- apps/speedalt/screen1.png | Bin 0 -> 3929 bytes apps/speedalt/screen2.png | Bin 0 -> 3806 bytes apps/speedalt/screen3.png | Bin 0 -> 3585 bytes apps/speedalt/screen4.png | Bin 0 -> 4092 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/speedalt/screen1.png create mode 100644 apps/speedalt/screen2.png create mode 100644 apps/speedalt/screen3.png create mode 100644 apps/speedalt/screen4.png diff --git a/apps/speedalt/screen1.png b/apps/speedalt/screen1.png new file mode 100644 index 0000000000000000000000000000000000000000..f269f8bc4e9f6482ecdea565c10b7c778b5532aa GIT binary patch literal 3929 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 literal 0 HcmV?d00001 diff --git a/apps/speedalt/screen2.png b/apps/speedalt/screen2.png new file mode 100644 index 0000000000000000000000000000000000000000..fb484a8d475db366164c80cd51bf0261b3a7008a GIT binary patch literal 3806 zcmeHK`8O1b7oVnyq0$f{%9e+RMxieBU|mhkNfi_j5k?-19k~AMQqhX8%q44rlMtH2q86+(-Vrot}@IqjTbS$-y7)){Vr z!RKr)X2t=tl1?pw5?maVkoCf?FNjLWBISroPoA_#z@#$YCh2lJ-TpEA`p_IKHYFra zstj3#53<2ncfvO^_bw!b*W7Y5deK$(_KEB0oS`eU>}wHipb@Zah^f9cyp=mDt=uiM zbD=QKl~cfvE@6a|<`MMLKLYrzz}n~CMP+aN0z;iS5&-vuok{buSXZjr{W10TFJQ52 zE>ebX*@+XwYXaLI`#FrWNrK`t+pZ9N@$x_!lZ$hoVRt%CcA`~8+Z=;BmcJ4b+i!3h zee4?1g%fMXpL6ftFuCK<2HezH@p-;H(%8KLh0?u0k%N|(M~AsaU!j;RDa*i3p*TTN z(b8;}d8Ri#VFsa!%8cz{d7fMf9^{a)dwy683N(GhTc80f= zADOd|SXW=rMeHr^>*mT@?yUnDg!wSGd?$~95p70tS*O%|{iQk4Be7k5tdW+-BXq?& zW5-U)d&N3~u1-L_MiVUU+A?k@nW0qW;HAEbh!OO(a6WF$3Cbo1adt)w4`&sA%!-0E zA3up1$CAY0Ge*%|Ww#>q?-;z6jQRXG2q>(~jB~L}P4uC7i=byu)CJO2>dMC`u2y6O zP^QuY=R12~yVJeP!adja`wUwcZhx2|4m((4Z`^;z4OXRJ_IKY~kl89hMR#g?r7;8w zAIi1}nD=~F_3VlK#uC{522pmbNQeZ=07b_DM%xJ0pVg~`7`H{A;J1Eh+0z;rWQW7Z z8r)6tEI9P3xQ}+ot>5Vzz2i#XHLeg?6?ISWazL46*cmY&Z7Z;$Z?MmI!+3Bj3)-3B zoEq)!-SXo$^>;IGCUN6sNc}GzLE3<3wj9w~3X3jmiELOl`8urMG`Fw7EN;ybBga|U zU>TadZ)TkZrVCe>i%C2CSfE_|svVYb?KNdLEEs9YQX2Dnnq+$lqRxtwkDvr1&_JMH%V`AQ*a|O|v^yh(h0R09elMh0& zIO}rSKnm`(S=|cg}q^d+RuQ3 zHp#DS6`Nxw4|oWTQTn@U{BT`F{H7_zpJ!_UbGq$Z5%|F=%ciU%#ZX&Yj7xts`yb?3J0xa8z_$OhgaC!fgd5j{--Q@Wsr91v3;44U~0dMAM*A_ zB*-n@0lO(;1xh#4vv@x>=KuZ8||!0#)?yIdDyd92{Y_Rlx4dTOur#8+_;$GeeZBBQBO*@>j{pB zH57a~ORNYSW*4adH?xZ(CKq2zDZKwEYt7Yvrb)~z?lJu&hjH~iIqiPjDoa)U4zCC4 zd-;WZEy9P4+`1W97j{(^B+pSvVkD%H0GQh#NQ_ME#grr>0JtOF00g}hHRar%`z!@a z0D>2T-U~yE zO73>X<2H@wLBBy_#G8N1wv?(#uAq`e35FU!uOhm$A!E>|suA|`8QNq$3Vv$Tg<{04 z=QfsH5HdvoF_nxeS@&w#n~5W#B@K>1+K)m;va-VC6h;}t9VL#@95Es5ht!(<+P<7q z+X2&Q=>7;BB^<&*wu(&Gl$k;yx!3bHtd{ibn>=|sxezCzem=7ls>66pT{o|Wj`Ct|PRn!XYGZQ{n z1)pa2#7TIkQ~OT+brkIJpoKuHXgbge9S9j)^^>c3ups1>vpmtbiTYU>i9AtZ?5iT` zlx%QKwI|l-ie}YJRLRvm#FeETER+<>+Ru16?Fho>C5 z=tm|wjJ%uNOIxyo#*<%-_k!nJ+h?Q4bxgW6;4_0u{DOq}yGB2#q)1D7 zE^Bw(MzTp4%88s}*@mJj6SmI}rqKo*k=S2H#q*3IL-J1OUz#OpgfXT)g_UpWu#Wc3 zzqFzZGC>3ALb@A@2Pb_F}#C literal 0 HcmV?d00001 diff --git a/apps/speedalt/screen3.png b/apps/speedalt/screen3.png new file mode 100644 index 0000000000000000000000000000000000000000..608612441cb793dc4d06fc258c37b617468d5e2d GIT binary patch literal 3585 zcmeHK`#02!7T32?Gai{CQVMarjYsloj5iZPDvZ~llBw~Q*9^n=bmSer0Ae&1SOq;vz>x zgoK2|9ZuVx+l~A`4Z3gFo4bF@-OYD9*jinP$MK5Xvc`)=KX=bb6%C%dR{>sWalarmOoE^M4!{hOaceZCOpq9+zpe}U2hVWPnj02#( z>XuCXJ&@QjvvX-efWcmP#2F#*m~r;N@f2pS5ag(oWk6S-atu^a&p>ET7Xwqd&Yg;s{QVFvL_0 zR2FduI;K@C3hp$uMjx&nQ|&E&#Tzh6he@$lUz0f2X3q-;T}BqehyT%^Ckv8Lfvw|9 zii8<7oLKE+08rlx;Ejz>=!bx3P-ilStC-z=n^_!$4lhE)*M%5#DD%ZCHePAZQ#UsPn&mE82qSbUj_Qz0YDwmDY>#oC8D?3`7zKd`Wmir3FNu)Q5h1J8g)E zWi$~6phCwg8_=+jnDr}YkY#FO*SKaUqsD(3E`ozJ<{LAZh01Bn!jsaqX3!9%E}*q< z=8Ghx@zT>Kn3|!jxZ&1{fZf=V$px6N~22}M64AuwG$9cSw}&ILbv*@ zw`zI-;Z#N5`3;tcO)(SI6KH%STB$GJcoDWa=P&DkQrVIoLP&t67o?~~yKSD!t3t@L zFJWUl)%DgmNVT98GiCs&MeJmxwFBU6gXdC;V=fGEQdjY+cO36l<8#UtYpj*R9?rb; z_@l@zAVF>2BMK1w5MdkvlNx2fq}9HY+`+{tV3aNa@~|x#CzTd{AnZs#0dIxWu${mZkl|Xzsm8NOi`T@Y zMD$GXr2cf0=Yr0nSb~K0NE2gej@uq$==w0|fxI7`8}L>#)ME@&WO6kcLV?8EfB2^@ zMdM@d2ZQxGn_g57seK2{g>D@rrd>fJ>pb+nNyUY3mNn1o$;p^1)(F3{&rnN?X$+|U ztc%a)BH{6F8^lWf<8Z&?bwJS#zP*02o~|PB-zH8nmX4 zvmV1FAnfh_iUQ4N?~vB7X{>{5uzQpb@0(PdI{btSDb=~1=S0kua$*B$eX<{S+|SdS zGpCn2DY-AkL&X8Pn9G;3tb+|UBwTooO}b6dd%TV-k8tupPlsa7o;h|PJ%0U^&6Ju7 zF)I8<4p!z@7V}0qa)xe_PF+m!{#Thm;ppw4y8<)ti^g@fjF#6m&d>oqqDM)Ww=F|b zFf?o1Ik9)Yv2}ooWu+B|_ld2us8|!Chrqu6_P#=TF>Bm~5Itu1z;E$v2IhAs-^9#m zaCy#Z==&^Ky6W6#6FOw7RD*D%o*fAs{2qMa`+%Oe>iN8plO}+ip}kgqESA1;xBz9C zQTS%yv5|Nd(>{|eQhLmTN4B4F5ibckVfggLPzbBg@uek!yfX$EAXaRr#@JS zh11mUBT{ats*$ZuVRX~kp6M6)$)TL}46QylO@n9e&OOSE`AZ=cu`H(bSqAd`f2L$a zR?d_J)!BqXTWt;n`MOW8r73mj0Jp;G-IuuKWcRH4E6zR) zK}+zD`An|$WJ$T-e!C)1NJ89qCmIwtoOUSwiMsOQ+g`$q-nGLK!07cinM~z{RfEgy z1K&S3s_(6uftQly#8=$26?9~8kShYn{@Jl( zU@`9o0c<;cbY=P2Cxv@&97{Q(W<<%}-~JhR+7t|SIg5&w1>+=5Z#0#(8t7jml=~xG zCfP6gOL~8DRMq(1of-ae9+L%1!RF5Jc;Aj3=qF){M%0x^Omjz=?Wm%^@>MwAHG_*2 zo7gXobd|mKM6fgb*c1$nKnMdQgym%0x|I?9t5OQnuL&y#wm}v7xGhCF==EJl$5;C% z69<9E)5v$kAuUkFh(kIuHUYW-wAIt1dmrEjxepAtmoNO3B)?t>PR%v57c4w_a}lbo z%0D;B@c($a({xU@8MiK4?Ae?#|GY^eWd9y%u!4z9@CLGRJC57l1wrOA8%lcmmu#Wg5jJ;W8tM9#A%$fmXMPbV zSnRCxD(}Y(r_PeK1oMt}UirZB=AEbN=MhaFUaXZ|damKH8F9FH7-#3LAq9kg>RNRO z(XII+LtGZ0CZd6GibxVWcH>+A>%h6Bp~8DP$^$t402}QEiFZHSL!pO{C*}d5~F{R0jJA( zRn1ve3+s!WRh&~3XnX}nNl;ZVj}GkooR%*VhxQ^|AVLb~)0w=FMM%EizOpr%%f!em zfnxoPRN>859;mf)9^%3@O_8+7x5jCnu5Bv%6SRp%gWY}6vO=WRLaUAl)(#DZQ5PT; zTYgHT1&^k=nhw35z};UPT0U%K!~Te;PMor+eLii}xN`F6{WzBQn{lLS>$sIAQFK&` z&k3GfwADG^_Y1##b3cQzkn8iTmO4xT6q56{DJ^Q`uBI=(Bd6R6&wA)SGb22{Lqlwf z{D$L{FQY$)u;j1o(1QL9F&DHk z*r7a2R$RyM=*OXKt5fC-GN9F59ebBQF<}B;%2Ib%*}dZ(jyT`bhbcz%wx4sC1fUNd pv-1z<2?1U6T7Sd;6IuAW646s=zxLsj-PcaY!Oq3D+B)FZe*^OBT+#pl literal 0 HcmV?d00001 diff --git a/apps/speedalt/screen4.png b/apps/speedalt/screen4.png new file mode 100644 index 0000000000000000000000000000000000000000..1082d59b4e6c4a83fdccebee196ba98d1555105e GIT binary patch literal 4092 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 Date: Thu, 21 Jan 2021 20:01:59 +1300 Subject: [PATCH 25/91] Update README.md --- apps/speedalt/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 0e476de2e..67505384f 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -5,6 +5,9 @@ Display Tap : Swaps the displays. You can have either speed or altitude on the l BTN3 : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. + + + Developed for my use in sailing, cycling and motorcycling. If you find this software useful or have feedback drop me a line mike[at]kereru.com. Enjoy! From 60a4281b5bfc86fddbab579e566986282dcc114f Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 22 Jan 2021 13:29:31 +1300 Subject: [PATCH 26/91] Update apps.json --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 607b8a1af..5aa53f4aa 100644 --- a/apps.json +++ b/apps.json @@ -2616,7 +2616,8 @@ "readme": "README.md", "storage": [ {"name":"speedalt.app.js","url":"app.js"}, - {"name":"speedalt.img","url":"app-icon.js","evaluate":true} + {"name":"speedalt.img","url":"app-icon.js","evaluate":true}, + {"name":"speedalt.settings.js","url":"settings.js"} ] } ] From 53c31c74b081d6be565c0d9dba761efad30460da Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 22 Jan 2021 13:32:21 +1300 Subject: [PATCH 27/91] Update apps.json --- apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps.json b/apps.json index 5aa53f4aa..e88544dbe 100644 --- a/apps.json +++ b/apps.json @@ -2618,6 +2618,9 @@ {"name":"speedalt.app.js","url":"app.js"}, {"name":"speedalt.img","url":"app-icon.js","evaluate":true}, {"name":"speedalt.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"speedalt.json"} ] } ] From c1eda83f289351e4f191dde9d9ef291a050d9f6a Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 22 Jan 2021 13:48:35 +1300 Subject: [PATCH 28/91] Create settings.js --- apps/speedalt/settings.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 apps/speedalt/settings.js diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js new file mode 100644 index 000000000..d42d992a6 --- /dev/null +++ b/apps/speedalt/settings.js @@ -0,0 +1,36 @@ +(function(back) { + let settings = require('Storage').readJSON('speedalt.json',1)||{}; + + /* + function save(key, value) { + settings[key] = value; + require('Storage').write('settings.json',settings); + } + */ + + function setUnits(m,u) { + settings['spd'] = m; + settings['spd_unit'] = u; + require('Storage').write('settings.json',settings); + } + + function setUnitsAlt(m,u) { + settings['alt'] = m; + settings['alt_unit'] = u; + require('Storage').write('settings.json',settings); + } + + + const appMenu = { + '': {'title': 'Units'}, + '< Back': back, + 'default (spd)' : function() { setUnits(0,''); }, + "Kph (spd)" : function() { setUnits(1,'kph'); }, + "Knots (spd)" : function() { setUnits(1.852,'knots'); }, + "Mph (spd)" : function() { setUnits(1.60934,'mph'); }, + "m/s (spd)" : function() { setUnits(3.6,'m/s'); }, + "Meters (alt)" : function() { setUnitsAlt(1,'m'); }, + "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } + }; + E.showMenu(appMenu) +}) From 20ecd72e7057213c07547b851faf6c37cf106ad0 Mon Sep 17 00:00:00 2001 From: nujw Date: Sat, 23 Jan 2021 00:42:17 +1300 Subject: [PATCH 29/91] Update settings.js --- apps/speedalt/settings.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index d42d992a6..0d92a8f30 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -20,8 +20,24 @@ require('Storage').write('settings.json',settings); } + function setTime(b) { + settings['time'] = b; + require('Storage').write('settings.json',settings); + } + const appMenu = { + '': {'title': 'GPS Speed Alt'}, + '< Back': back, + "Units" : function() { E.showMenu(unitsMenu); }, + "Show Time" : { + value : boolean, + format : v => v?"On":"Off", + onchange : v => { setTime(v); } + } + }; + + const unitsMenu = { '': {'title': 'Units'}, '< Back': back, 'default (spd)' : function() { setUnits(0,''); }, @@ -32,5 +48,7 @@ "Meters (alt)" : function() { setUnitsAlt(1,'m'); }, "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } }; + + E.showMenu(appMenu) }) From b28d4b7699b3ee5274e9499dea3c52dd3fd61305 Mon Sep 17 00:00:00 2001 From: nujw Date: Sat, 23 Jan 2021 00:51:20 +1300 Subject: [PATCH 30/91] Update README.md --- apps/speedalt/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 67505384f..0ee818609 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -1,8 +1,11 @@ -Displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. +Displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. You can display the current or maximum observed speed/altitude values. Display Tap : Swaps the displays. You can have either speed or altitude on the large display. -BTN3 : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. +BTN3 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. +BTN3 : Long press > 2 secs resets the recorded maximum values. + +App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Also select whether time is displayed or hidden. From 4c796d463c975775429d1152329949eb0eb1ade9 Mon Sep 17 00:00:00 2001 From: nujw Date: Sat, 23 Jan 2021 00:52:19 +1300 Subject: [PATCH 31/91] Update README.md --- apps/speedalt/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 0ee818609..df23dec1b 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -3,6 +3,7 @@ Displays the GPS speed and altitude. One is displayed on the watch face using th Display Tap : Swaps the displays. You can have either speed or altitude on the large display. BTN3 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. + BTN3 : Long press > 2 secs resets the recorded maximum values. App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Also select whether time is displayed or hidden. From 35e58b1d91bb611510fd84577e9ffda4f07669c9 Mon Sep 17 00:00:00 2001 From: nujw Date: Mon, 25 Jan 2021 14:35:21 +1300 Subject: [PATCH 32/91] Update settings.js --- apps/speedalt/settings.js | 48 +++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 0d92a8f30..c753ec5aa 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -25,16 +25,22 @@ require('Storage').write('settings.json',settings); } + function setDimLevel(b) { + settings['dim_b'] = b; + require('Storage').write('settings.json',settings); + } + + function setDimDelay(m) { + settings['dim_m'] = m; + require('Storage').write('settings.json',settings); + } const appMenu = { '': {'title': 'GPS Speed Alt'}, '< Back': back, "Units" : function() { E.showMenu(unitsMenu); }, - "Show Time" : { - value : boolean, - format : v => v?"On":"Off", - onchange : v => { setTime(v); } - } + "Power Saving Time" : function() { E.showMenu(dimDelayMenu); }, + "Power Saving Brightness" : function() { E.showMenu(dimLevelMenu); } }; const unitsMenu = { @@ -49,6 +55,38 @@ "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } }; + const appMenu = { + '': {'title': 'GPS Speed Alt'}, + '< Back': back, + "Units" : function() { E.showMenu(unitsMenu); }, + "Show Time" : { + value : boolean, + format : v => v?"On":"Off", + onchange : v => { setTime(v); } + } + }; + + const dimDelayMenu = { + '': {'title': 'Reduce Display'}, + '< Back': back, + 'never' : function() { setDimDelay(0); }, + "1 min" : function() { setDimDelay(1); }, + "2 mins" : function() { setDimDelay(2); }, + "5 mins" : function() { setDimDelay(5); }, + "10 mins" : function() { setDimDelay(10); }, + "15 mins" : function() { setDimDelay(15); } + }; + + const dimLevelMenu = { + '': {'title': 'Display Brightness'}, + '< Back': back, + '80%' : function() { setDimLevel(0.8); }, + "60%" : function() { setDimLevel(0.6); }, + "40%" : function() { setDimLevel(0.4); }, + "20%" : function() { setDimLevel(0.2); }, + "0%" : function() { setDimLevel(0); } + }; + E.showMenu(appMenu) }) From 3d84579eae76c8fbbbdab2941e9f8911bb7f3090 Mon Sep 17 00:00:00 2001 From: nujw Date: Mon, 25 Jan 2021 14:49:49 +1300 Subject: [PATCH 33/91] Update settings.js --- apps/speedalt/settings.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index c753ec5aa..6bee7b4b4 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -39,7 +39,7 @@ '': {'title': 'GPS Speed Alt'}, '< Back': back, "Units" : function() { E.showMenu(unitsMenu); }, - "Power Saving Time" : function() { E.showMenu(dimDelayMenu); }, + "Power Saving Timeout" : function() { E.showMenu(dimDelayMenu); }, "Power Saving Brightness" : function() { E.showMenu(dimLevelMenu); } }; @@ -55,17 +55,6 @@ "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } }; - const appMenu = { - '': {'title': 'GPS Speed Alt'}, - '< Back': back, - "Units" : function() { E.showMenu(unitsMenu); }, - "Show Time" : { - value : boolean, - format : v => v?"On":"Off", - onchange : v => { setTime(v); } - } - }; - const dimDelayMenu = { '': {'title': 'Reduce Display'}, '< Back': back, From 3b6f57d0eef3c8978bf4dfab8a1d58bc82a38444 Mon Sep 17 00:00:00 2001 From: nujw Date: Tue, 26 Jan 2021 15:22:52 +1300 Subject: [PATCH 34/91] Update settings.js --- apps/speedalt/settings.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 6bee7b4b4..6f7b67180 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -35,10 +35,16 @@ require('Storage').write('settings.json',settings); } + function setColour(c) { + settings['colour'] = c; + require('Storage').write('settings.json',settings); + } + const appMenu = { '': {'title': 'GPS Speed Alt'}, '< Back': back, "Units" : function() { E.showMenu(unitsMenu); }, + "Colours" : function() { E.showMenu(colMenu); }, "Power Saving Timeout" : function() { E.showMenu(dimDelayMenu); }, "Power Saving Brightness" : function() { E.showMenu(dimLevelMenu); } }; @@ -75,6 +81,14 @@ "20%" : function() { setDimLevel(0.2); }, "0%" : function() { setDimLevel(0); } }; + + const colMenu = { + '': {'title': 'Colours'}, + '< Back': back, + 'Default' : function() { setColor(0); }, + "Bright" : function() { setColor(1); }, + "Night" : function() { setColor(2); } + }; E.showMenu(appMenu) From 850979f6596921bf26bd0d199a2b2e7f5e3c371e Mon Sep 17 00:00:00 2001 From: nujw Date: Tue, 26 Jan 2021 16:24:33 +1300 Subject: [PATCH 35/91] Update settings.js --- apps/speedalt/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 6f7b67180..d9a990579 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -86,7 +86,7 @@ '': {'title': 'Colours'}, '< Back': back, 'Default' : function() { setColor(0); }, - "Bright" : function() { setColor(1); }, + "Hi Contrast" : function() { setColor(1); }, "Night" : function() { setColor(2); } }; From b1adc85cd0dd6d40b8b1637a98c54883369d2768 Mon Sep 17 00:00:00 2001 From: nujw Date: Wed, 27 Jan 2021 11:15:56 +1300 Subject: [PATCH 36/91] Update README.md --- apps/speedalt/README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index df23dec1b..dcb98ea45 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -1,12 +1,19 @@ -Displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. You can display the current or maximum observed speed/altitude values. +A watch/clock that displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. You can display the current or maximum observed speed/altitude values. Current time is always displayed. + +As a power saving measure you can : + +- Set a timeout after which the display will dim. Touching the display or buttons will restore the display to 100% brightness. The brightness while dimmed can be set to anything between 100% (no dimming) to 0% (fully off) +- Turn the GPS on/off using one of the buttons. While GPS is off the display becomes a simple clock. Display Tap : Swaps the displays. You can have either speed or altitude on the large display. +BTN1 : GPS Power on/off. + BTN3 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. BTN3 : Long press > 2 secs resets the recorded maximum values. -App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Also select whether time is displayed or hidden. +App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Power saving settings. From 0207754eb509811a9ef0f4e6ca9d8e05f87addcb Mon Sep 17 00:00:00 2001 From: nujw Date: Wed, 27 Jan 2021 11:20:41 +1300 Subject: [PATCH 37/91] Update apps.json --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e88544dbe..fa1a77ef5 100644 --- a/apps.json +++ b/apps.json @@ -2612,7 +2612,8 @@ "icon": "app.png", "version":"0.01", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", - "tags": "tool,outdoors", + "tags": "clock,tool,outdoors", + "type":"clock", "readme": "README.md", "storage": [ {"name":"speedalt.app.js","url":"app.js"}, From ec37c2bbc81c233b2bd962a70e20e79539ee07d3 Mon Sep 17 00:00:00 2001 From: nujw Date: Wed, 27 Jan 2021 11:27:34 +1300 Subject: [PATCH 38/91] Update apps.json --- apps.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index fa1a77ef5..e3a7b8f93 100644 --- a/apps.json +++ b/apps.json @@ -2612,16 +2612,13 @@ "icon": "app.png", "version":"0.01", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", - "tags": "clock,tool,outdoors", - "type":"clock", + "tags": "tool,outdoors", + "type":"app", "readme": "README.md", "storage": [ {"name":"speedalt.app.js","url":"app.js"}, {"name":"speedalt.img","url":"app-icon.js","evaluate":true}, {"name":"speedalt.settings.js","url":"settings.js"} - ], - "data": [ - {"name":"speedalt.json"} ] } ] From 5e6457dbfb8709d158d8c05d3f3c3546d6d7e892 Mon Sep 17 00:00:00 2001 From: nujw Date: Wed, 27 Jan 2021 11:28:45 +1300 Subject: [PATCH 39/91] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index e3a7b8f93..4109b4964 100644 --- a/apps.json +++ b/apps.json @@ -2614,6 +2614,7 @@ "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", + "allow_emulator":true, "readme": "README.md", "storage": [ {"name":"speedalt.app.js","url":"app.js"}, From 645ccf05bf389a06999e16e3a0c4161e8fa549a7 Mon Sep 17 00:00:00 2001 From: nujw Date: Wed, 27 Jan 2021 11:33:16 +1300 Subject: [PATCH 40/91] Update app.js --- apps/speedalt/app.js | 445 +++++++++++++++++++++++++++++++------------ 1 file changed, 321 insertions(+), 124 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index eb1f5cd49..3b5a5440e 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,24 +1,17 @@ /* Speed and Altitude [speedalt] -Ver : 0.1 +Ver : 0.01 +Mike Bennett mike[at]kereru.com */ -var buf = Graphics.createArrayBuffer(240,120,2,{msb:true}); +const dbg = 1; + +var buf = Graphics.createArrayBuffer(240,160,2,{msb:true}); + +// Load fonts +require("Font7x11Numeric7Seg").add(Graphics); + /* -Colour Pallet Idx -0 : Background (black) -1 : Speed/Alt -2 : Units -3 : Sats -*/ -var img = { - width:buf.getWidth(), - height:buf.getHeight(), - bpp:2, - buffer:buf.buffer, - palette:new Uint16Array([0,0x4FE0,0xEFE0,0x07DB]) -}; - var mainmenu = { "" : { "title" : "-- Units --" }, "default" : function() { setUnits(0,''); }, @@ -30,119 +23,173 @@ var mainmenu = { "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); }, "Exit" : function() { exitMenu(); }, // remove the menu and restore }; +*/ var lastFix = {fix:0,satellites:0}; -var mode = 's'; // s = Primary display speed. a = Altitude -var multi = 0; // Multiplier for speed unit conversions. 0 = use the locale values for speed -var multi_alt = 1; // Multiplier for altitude unit conversions. -var units = ''; // Displayed speed unit -var units_alt = 'm'; // Displayed altitude units -var btnToggle=false; // ID of the toggle display button -var btnMenu=false; // ID of the menu button -var inMenu = 0; -var emulator = 1; // 1 = running in emulator. Supplies test value; +var showSpeed = 1; // 1 = Speed in primary display. 0 = alt in primary +var showMax = 0; // 1 = display the max values. 0 = display the cur fix +//var inMenu = 0; +var maxPress = 0; // Time max button pressed. Used to calculate short or long press. -/* +var timeBright = 0; // Time of last activity that keeps the display bright +var isDim = 0; // Current brightness state +var gpsPwr = 1; -const storage = require('Storage'); -let settings; +var time = ''; // Last time string displayed. Re displayed in background colour to remove before drawing new time. -function updateSettings() { - storage.write('speedalt.json', settings); -} +var max = {}; +max.spd = 0; +max.alt = 0; -function resetSettings() { - settings = { - day : 17, - month : 6, - year: 1981 - }; - updateSettings(); -} - -*/ +var emulator = 0; +if (process.env.BOARD=="EMSCRIPTEN") emulator = 1; // 1 = running in emulator. Supplies test values; function drawFix(speed,units,sats,alt,alt_units) { - var str = ''; + var val = ''; + var u=''; - // Size fonts to always maximise the display fit - var s; - // Primary Display - str = speed.toString(); - if ( mode == 'a' ) str = alt.toString(); + val = speed.toString(); + if ( !showSpeed ) val = alt.toString(); - s=40; // Font size - if ( str.length <= 7 ) s=48; - if ( str.length <= 6 ) s=55; - if ( str.length <= 5 ) s=68; - if ( str.length <= 4 ) s=85; - if ( str.length <= 3 ) s=110; - - buf.setFontAlign(0,-1); //Centre - buf.setColor(1); - - buf.setFontVector(s); - buf.drawString(str,110,0); - - // Primary Units - str = units; - if ( mode == 'a' ) str = alt_units; - buf.setFontAlign(1,-1,3); //right - buf.setColor(2); - buf.setFontVector(25); - buf.drawString(str,210,0); + // Primary Units + u = settings.spd_unit; + if ( !showSpeed ) u = alt_units; + drawPrimary(val,u); + // Secondary Display - str = alt.toString(); - if ( mode == 'a' ) str = speed.toString(); + val = alt.toString(); + if ( !showSpeed ) val = speed.toString(); - s=115; // minor units X position - if ( str.length <= 7 ) s=120; - if ( str.length <= 6 ) s=105; - if ( str.length <= 5 ) s=87; - if ( str.length <= 4 ) s=70; - if ( str.length <= 3 ) s=55; - if ( str.length <= 2 ) s=40; - if ( str.length <= 1 ) s=25; - - buf.setFontAlign(-1,1); //left, bottom - buf.setColor(1); - buf.setFontVector(25); - buf.drawString(str,5,120); - // Secondary Units - str = alt_units; - if ( mode == 'a' ) str = units; - buf.setFontAlign(-1,1); //left, bottom - buf.setColor(2); - buf.setFontVector(20); - buf.drawString(str,s,120); + u = alt_units; + if ( !showSpeed ) u = settings.spd_unit; + drawSecondary(val,u); + + // Time + drawTime(); //Sats - buf.setFontAlign(1,1); //right, bottom - buf.setColor(3); - buf.setFontVector(18); - buf.drawString(" Sats:"+sats,240,120); + drawSats(sats); } function drawNoFix(sats) { - + var u; + buf.setFontAlign(0,0); buf.setColor(3); - - buf.setFontVector(18); - buf.drawString(" Sats:"+sats,120,10); buf.setFontVector(25); buf.drawString("Waiting for GPS",120,56); + + // Time + drawTime(); + + //Sats + drawSats(sats); + } +function drawPrimary(n,u) { + + // Primary Display + + var s=40; // Font size + if ( n.length <= 7 ) s=48; + if ( n.length <= 6 ) s=55; + if ( n.length <= 5 ) s=68; + if ( n.length <= 4 ) s=85; + if ( n.length <= 3 ) s=110; + + buf.setFontAlign(0,-1); //Centre + buf.setColor(1); + + buf.setFontVector(s); + buf.drawString(n,110,0); + + // Primary Units + buf.setFontAlign(1,-1,3); //right + buf.setColor(2); + buf.setFontVector(25); + buf.drawString(u,210,0); +} + +function drawSecondary(n,u) { + + var s=180; // units X position + if ( n.length <= 5 ) s=155; + if ( n.length <= 4 ) s=125; + if ( n.length <= 3 ) s=100; + if ( n.length <= 2 ) s=65; + if ( n.length <= 1 ) s=35; + + buf.setFontAlign(-1,1); //left, bottom + buf.setColor(1); + buf.setFontVector(45); + buf.drawString(n,5,140); + + // Secondary Units + buf.setFontAlign(-1,1); //left, bottom + buf.setColor(2); + buf.setFontVector(25); + buf.drawString(u,s,135); +} + + +function drawTime() { + var x = 0; + var y = 160; + + if ( gpsPwr ) { + buf.setFont("7x11Numeric7Seg", 1); + buf.setFontAlign(-1,1); //left, bottom + } + else { +// buf.setFont("7x11Numeric7Seg", 6); + buf.setFontAlign(1,-1); //right, top + buf.setColor(2); + buf.setFont("6x8", 1); + buf.drawString('GPS On >',240,0); + + buf.setFontVector(80); + buf.setFontAlign(0,0); //centre + x = 120; + y = 80; + } + + buf.setColor(0); + buf.drawString(time,x,y); + time = require("locale").time(new Date(),1); + buf.setColor(3); + buf.drawString(time,x,y); +} + +function drawSats(sats) { + buf.setFontAlign(1,1); //right, bottom + buf.setColor(3); + buf.setFont("6x8", 1); + if ( showMax ) { + buf.setColor(2); + buf.drawString("MAX",240,160); + } + else buf.drawString("Sats:"+sats,240,160); +} + +function drawClockLarge() { + buf.clear(); + drawTime(); + g.reset(); + g.drawImage(img,0,40); + g.flip(); +} + + function onGPS(fix) { lastFix = fix; @@ -151,48 +198,56 @@ function onGPS(fix) { var m; if (fix.fix || emulator) { + //==== Speed ==== - // Default to locale speed units - if ( multi == 0 ) { + if ( settings.spd == 0 ) { var strSpeed = require("locale").speed(fix.speed); m = strSpeed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units if ( emulator ) { speed = '125'; //testing only - units = 'kph'; + settings.spd_unit = 'kph'; } else { speed = m[1]; - units = m[2]; + settings.spd_unit = m[2]; } } // Calculate for selected units else { speed = fix.speed; if ( emulator ) speed = '100'; - speed = Math.round(parseFloat(speed)/parseFloat(multi),0); + speed = Math.round(parseFloat(speed)/parseFloat(settings.spd),0); } // ==== Altitude ==== alt = fix.alt; if ( emulator ) alt = '360'; - alt = Math.round(parseFloat(alt)/parseFloat(multi_alt),0); + alt = Math.round(parseFloat(alt)/parseFloat(settings.alt),0); - drawFix(speed,units,fix.satellites,alt,units_alt); + // Record max values + if (parseFloat(speed) > parseFloat(max.spd) ) max.spd = parseFloat(speed); + if (parseFloat(alt) > parseFloat(max.alt) ) max.alt = parseFloat(alt); + + if ( showMax ) drawFix(max.spd,settings.spd_unit,fix.satellites,max.alt,settings.alt_unit); + else drawFix(speed,settings.spd_unit,fix.satellites,alt,settings.alt_unit); } else { drawNoFix(fix.satellites); } g.reset(); - g.drawImage(img,0,70); + g.drawImage(img,0,40); g.flip(); } -function setUnits(m,u) { - multi = m; - units = u; +/* +function setUnits(m,u) { + settings.spd = m; + settings.spd_unit = u; + require('Storage').writeJSON('speedalt.json',settings); + inMenu = 0; E.showMenu(); // remove the menu @@ -200,8 +255,9 @@ function setUnits(m,u) { } function setUnitsAlt(m,u) { - multi_alt = m; - units_alt = u; + settings.alt = m; + settings.alt_unit = u; + require('Storage').write('speedalt.json',settings); inMenu = 0; @@ -222,34 +278,175 @@ function exitMenu() { } +*/ + function toggleDisplay() { - if ( inMenu ) return; - if ( mode == 's' ) mode = 'a'; - else mode = 's'; + + if ( isDim ) { + onBright(); + return; + } + + if ( ! gpsPwr ) return; + + showSpeed = !showSpeed; onGPS(lastFix); // Back to Speed display } +function toggleMax() { +// if ( inMenu ) return; + showMax = !showMax; + onGPS(lastFix); // Back to Speed display +} + +function gpsPower() { + + if ( isDim ) { + onBright(); + return; + } + + gpsPwr = !gpsPwr; + if ( dbg ) print('GPS Power : '+gpsPwr); + + Bangle.setGPSPower(gpsPwr); + + if ( gpsPwr ) { + // Display GPS speed/alt + g.clear(); + onGPS(lastFix); + } + else { + // Display simple clock + drawClockLarge(); + } + +} + // How to disable these while in menu? Interim using inMenu flag. function setButtons(){ - // Touch screen to toggle display - btnToggle = setWatch(toggleDisplay, BTN4, {repeat:true,edge:"falling"}); - btnToggle = setWatch(toggleDisplay, BTN5, {repeat:true,edge:"falling"}); - - // Units menu - btnMenu = setWatch(enterMenu, BTN3,{repeat:true,edge:"falling"}); + // Turn GPS on/off + setWatch(gpsPower, BTN1,{repeat:true,edge:"falling"}); - // setWatch(nextwp.bind(null,1), BTN3, {repeat:true,edge:"falling"}); + // Show launcher when middle button pressed + setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); + + // Switch between fix and max display + setWatch(maxPressed, BTN3,{repeat:true,edge:"rising"}); + setWatch(maxReleased, BTN3,{repeat:true,edge:"falling"}); + + // Touch screen to toggle display + setWatch(toggleDisplay, BTN4, {repeat:true,edge:"falling"}); + setWatch(toggleDisplay, BTN5, {repeat:true,edge:"falling"}); + + } -g.clear(); -setUnitsAlt(0.3048,'feet'); // Default alt in feet +function maxPressed() { + if ( isDim ) { + onBright(); + return; + } + if ( ! gpsPwr ) return; + + maxPress = getTime(); +} + +function maxReleased() { + var dur = getTime()-maxPress; + + if ( ! gpsPwr ) return; + + if ( dur < 2 ) toggleMax(); // Short press toggle fix/max display + else { + max.spd = 0; // Long press resets max values. + max.alt = 0; + onGPS(lastFix); // redraw display + } +} + +function onBright() { + if ( dbg ) print('Undimming'); + Bangle.setLCDBrightness(1); + timeBright = getTime(); + isDim = 0; +} + +function onDim() { + if ( ! settings.dim_m ) { + return; + } + if ( getTime() > timeBright+(settings.dim_m*60) ) { + // Time to dim the lcd. Screen tap or BTN3 will restore to 100% + if ( dbg ) print('Dimming'); + Bangle.setLCDBrightness(settings.dim_b); + isDim = 1; + } +} + +function updateClock() { + if ( dbg ) print('Updating clock'); + drawTime(); + g.reset(); + g.drawImage(img,0,40); + g.flip(); + + // Something different to display in the emulator + if ( emulator ) { + max.spd++; + max.alt++; + } + + onDim(); // Check if time to dim the LCD +} + +// Read settings. +let settings = require('Storage').readJSON('speedalt.json',1)||{}; +settings.spd = settings.spd||0; // Multiplier for speed unit conversions. 0 = use the locale values for speed +settings.spd_unit = settings.spd_unit||''; // Displayed speed unit +settings.alt = settings.alt||0.3048;// Multiplier for altitude unit conversions. +settings.alt_unit = settings.alt_unit||'feet'; // Displayed altitude units +settings.dim_b = settings.dim_b||0.5; // Auto dim brightness +settings.dim_m = settings.dim_m||5; // Time in mins before auto dim. +settings.colour = settings.colour||0; // Colour scheme. + +/* +Colour Pallet Idx +0 : Background (black) +1 : Speed/Alt +2 : Units +3 : Sats +*/ +var img = { + width:buf.getWidth(), + height:buf.getHeight(), + bpp:2, + buffer:buf.buffer, + palette:new Uint16Array([0,0x4FE0,0xEFE0,0x07DB]) +}; + +if ( settings.colour == 1 ) img.palette = new Uint16Array([0,0xFFFF,0xFFFF,0xFFFF]); +if ( settings.colour == 2 ) img.palette = new Uint16Array([0,0xFF800,0xF800,0xF800]); + + +// Find speed unit if using locale speed +if ( settings.spd == 0 ) { + var strSpeed = require("locale").speed(1); + m = strSpeed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units + settings.spd_unit = m[2]; +} + + +// Main prog +onBright(); // Start with display not dimmed + +g.clear(); onGPS(lastFix); Bangle.loadWidgets(); Bangle.drawWidgets(); - Bangle.on('GPS', onGPS); Bangle.setGPSPower(1); - setButtons(); +setInterval(updateClock, 30000); From ab6b6c5fe4f1df1d8eadfa50d3a4c68b4ed3a1c9 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 17:43:52 +1300 Subject: [PATCH 41/91] NZ summer time is UTC+13 Increased maximum locale time offset from 12 to 13. --- apps/setting/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 6e766afd4..8e839bdb1 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -327,7 +327,7 @@ function showLocaleMenu() { 'Time Zone': { value: settings.timezone, min: -11, - max: 12, + max: 13, step: 0.5, onchange: v => { settings.timezone = v || 0; From 3133dffd3197c21cbcda4da2e848a0cd5d99aa7a Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 18:18:49 +1300 Subject: [PATCH 42/91] Change max time offset to 13 --- apps/setting/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 229337dc9..bb47dfe4a 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -25,3 +25,4 @@ 0.21: Add passkey pairing option (BETA) Add whitelist option (fix #78) 0.22: Move HID to BLE menu +0.23: Change max time offset to 13 for NZ summer daylight time (NZDT) From ac9122fac2d87b99ef35d1d93df55c44b0547fb4 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 18:22:57 +1300 Subject: [PATCH 43/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 4109b4964..1f102cbdf 100644 --- a/apps.json +++ b/apps.json @@ -171,7 +171,7 @@ { "id": "setting", "name": "Settings", "icon": "settings.png", - "version":"0.22", + "version":"0.23", "description": "A menu for setting up Bangle.js", "tags": "tool,system", "readme": "README.md", From 29c00f13798d2f70c9b29cbc13328b6a23bcbcc0 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 19:35:35 +1300 Subject: [PATCH 44/91] Update app.js --- apps/speedalt/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index 3b5a5440e..b753c3523 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -450,3 +450,4 @@ Bangle.on('GPS', onGPS); Bangle.setGPSPower(1); setButtons(); setInterval(updateClock, 30000); + From fbe0a4f765fce6ac83f20788faa388a877164ef9 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 19:38:26 +1300 Subject: [PATCH 45/91] Update settings.js --- apps/speedalt/settings.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index d9a990579..6344efb75 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -51,7 +51,7 @@ const unitsMenu = { '': {'title': 'Units'}, - '< Back': back, + '< Back': { E.showMenu(appMenu); }, 'default (spd)' : function() { setUnits(0,''); }, "Kph (spd)" : function() { setUnits(1,'kph'); }, "Knots (spd)" : function() { setUnits(1.852,'knots'); }, @@ -63,7 +63,7 @@ const dimDelayMenu = { '': {'title': 'Reduce Display'}, - '< Back': back, + '< Back': { E.showMenu(appMenu); }, 'never' : function() { setDimDelay(0); }, "1 min" : function() { setDimDelay(1); }, "2 mins" : function() { setDimDelay(2); }, @@ -74,7 +74,7 @@ const dimLevelMenu = { '': {'title': 'Display Brightness'}, - '< Back': back, + '< Back': { E.showMenu(appMenu); }, '80%' : function() { setDimLevel(0.8); }, "60%" : function() { setDimLevel(0.6); }, "40%" : function() { setDimLevel(0.4); }, @@ -84,7 +84,7 @@ const colMenu = { '': {'title': 'Colours'}, - '< Back': back, + '< Back': { E.showMenu(appMenu); }, 'Default' : function() { setColor(0); }, "Hi Contrast" : function() { setColor(1); }, "Night" : function() { setColor(2); } From 3a6c6a656f872a7b9dbdfe59d83c6eb419ca1f5f Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 19:39:33 +1300 Subject: [PATCH 46/91] Update app-icon.js --- apps/speedalt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index 6a0cb8825..f917d6106 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) +require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")); From b9e343f0caffe71b68246f95d38e13d0739b9762 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 19:55:44 +1300 Subject: [PATCH 47/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 1f102cbdf..501e227f0 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From ff15b170b976e0c5670a591010593ca96c5fd5fa Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 20:00:02 +1300 Subject: [PATCH 48/91] Update app-icon.js --- apps/speedalt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index f917d6106..6a0cb8825 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")); +require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) From a0d684450901d97231b6a6571b12b1183bc090b3 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 20:04:41 +1300 Subject: [PATCH 49/91] Update app-icon.js --- apps/speedalt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app-icon.js b/apps/speedalt/app-icon.js index 6a0cb8825..6c03df55b 100644 --- a/apps/speedalt/app-icon.js +++ b/apps/speedalt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("/wA/ABEsABgyyHEomGq1WwIAEA4I3iEItXwWs64AI1mCHAw0cMgIxJAA5yBGzIZDmQzSG4kyG6xoETRQAN1huVCgZoWNww2SToZoYNwylDGj2z1oAC2Y2dBwQ0LxOJsoAGxOtGxY1NaZoyIAArbOGhdWDJGtMgwAEBIamLqw2KahYoExIpI2aiMbQifSGgYzJTBFdUaKfKGggzOFIijLNR7TDSJg0HRZBsIJJRpXGhIABGpFXT5I0YdZCiFCoWCNRIcIGhy7CCI2CNggEC1hqYTxAbCeA2sGo1WUBJqJ1lWmUyq1XaZGzKJKiEGpKgCMhgAEGgocLGowYGJxSGEAAhRHRBRQCGpTwCGpBPCq4FEGsAXCGpEyCoIGDAoMyGpWtGr5lCGpyJCGqjXLUIet2ddU4ihdGpesCoIAF1g1YeI4XBsojHDQYADKAwcMQ4Q1LJxJtDq0ymVWNJCILGoyGHeASiIAB5RC1q8JGomCQpJsJABhqCUA+CGog2Cq5QJNiwZKUAhsEeRQ2UGgRqH65qFGoeBCIzZCXw4ALCxeBGow2CqxULNqAUMUAxsMGyYSMNRA2DmWsGzAQM1kyGhBsDUZDEDGp7qJT4Q1IUZg3CUJoOKT5Q2GUZAAZ1g0NGobaJGjDUCGpg2jGiI2EbZYARaYY0PGwtWNzGsqw0UGwsyNy2BToY0TNw43SwJoXGxI4CwSoK1mCGQg0aG5A4BOQIAEA4IQGGbY3KABgzfHCQykAEg=")) +require("heatshrink").decompress(atob("m02xH+AH4AJlgAMGWQ4lEw1Wq2BAAgHBG8QhFq+C1nXABGswQ4GGjhkBGJIAHOQI2ZDIcyGaQ3EmQ3WNAiaKABusNyoUDNCxuGGySdDNDBuGUoY0e2etAAWzGzoOCGheJxNlAA2J1o2LGprTNGRAAFbZw0LqwZI1pkGAAgJDUxdWGxTULFAmJFJGzURjaET6Q0DGZKYIrqjRT5Q0EGZwpEUZZqPaYaRMGg6LINhBJKNK40JAAI1Iq6fJGjDrIUQoVCwRqJDhA0OXYQRGwRsEAgWsNTCeIDYTwG1g1GqygJNROsq0ymVWq7TI2ZRJUQg1JUARkMAAg0FDhY1GDAxOKQwgAEKI6IKKAQ1KeAQ1IJ4VXAog1gC4Q1ImQVBAwYFBmQ1K1o1fMoQ1ORIQ1Ua5ahD1uzrqnEULo1L1gVBAAusGrDxHC4NlEY4aDAAZQGDhiHCGpZOJNodWmUyqxpIRBY1GQw7wCURAAPKIWtXhI1EwSFJNhIAMNQSgHwQ1EGwVXKBJsWDJSgENgjyKGyg0CNQ/XNQo1DwIRGbIS+HABYWLwI1GGwVWKhZtQChigGNhg2TCRhqIGwcy1g2YCBmsmQ0INgajIYgY1PdRKfCGpCjMG4ShNBxSfKGwyjIADOsGho1DbRI0YagQ1MG0Y0RGwjbLACLTDGh42FqxuY1lWGig2FmRuWwKdDGiZuHG6WBNC42JHAWCVBWswQyEGjQ3IHAJyBAAgHBCAwzbG5QAMGb44SGUgAkA")) From c1aa5be1dd806cfb4d7c140b6f944d1037b4097c Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 20:06:08 +1300 Subject: [PATCH 50/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index 7b4640cda..d8443d421 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -1 +1,2 @@ 0.01 : Initial import. +0.02 : Misc development. From 253f040a85b905ec8b8e2a944cc9cd89c4fe522c Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 20:10:56 +1300 Subject: [PATCH 51/91] Update settings.js --- apps/speedalt/settings.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 6344efb75..feec371b2 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -51,7 +51,7 @@ const unitsMenu = { '': {'title': 'Units'}, - '< Back': { E.showMenu(appMenu); }, + '< Back': function() { E.showMenu(appMenu); }, 'default (spd)' : function() { setUnits(0,''); }, "Kph (spd)" : function() { setUnits(1,'kph'); }, "Knots (spd)" : function() { setUnits(1.852,'knots'); }, @@ -63,7 +63,7 @@ const dimDelayMenu = { '': {'title': 'Reduce Display'}, - '< Back': { E.showMenu(appMenu); }, + '< Back': function() { E.showMenu(appMenu); }, 'never' : function() { setDimDelay(0); }, "1 min" : function() { setDimDelay(1); }, "2 mins" : function() { setDimDelay(2); }, @@ -74,7 +74,7 @@ const dimLevelMenu = { '': {'title': 'Display Brightness'}, - '< Back': { E.showMenu(appMenu); }, + '< Back': function() { E.showMenu(appMenu); }, '80%' : function() { setDimLevel(0.8); }, "60%" : function() { setDimLevel(0.6); }, "40%" : function() { setDimLevel(0.4); }, @@ -84,7 +84,7 @@ const colMenu = { '': {'title': 'Colours'}, - '< Back': { E.showMenu(appMenu); }, + '< Back': function() { E.showMenu(appMenu); }, 'Default' : function() { setColor(0); }, "Hi Contrast" : function() { setColor(1); }, "Night" : function() { setColor(2); } From 81c895e19b9ded0d92dc9ac94c16b8ae6507e9a7 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 23:19:05 +1300 Subject: [PATCH 52/91] Update settings.js --- apps/speedalt/settings.js | 45 ++++++--------------------------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index feec371b2..6a0a43772 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -4,49 +4,37 @@ /* function save(key, value) { settings[key] = value; - require('Storage').write('settings.json',settings); + require('Storage').write('speedalt.json',settings); } */ function setUnits(m,u) { settings['spd'] = m; settings['spd_unit'] = u; - require('Storage').write('settings.json',settings); + require('Storage').write('speedalt.json',settings); } function setUnitsAlt(m,u) { settings['alt'] = m; settings['alt_unit'] = u; - require('Storage').write('settings.json',settings); + require('Storage').write('speedalt.json',settings); } function setTime(b) { settings['time'] = b; - require('Storage').write('settings.json',settings); - } - - function setDimLevel(b) { - settings['dim_b'] = b; - require('Storage').write('settings.json',settings); - } - - function setDimDelay(m) { - settings['dim_m'] = m; - require('Storage').write('settings.json',settings); + require('Storage').write('speedalt.json',settings); } function setColour(c) { settings['colour'] = c; - require('Storage').write('settings.json',settings); + require('Storage').write('speedalt.json',settings); } const appMenu = { '': {'title': 'GPS Speed Alt'}, '< Back': back, "Units" : function() { E.showMenu(unitsMenu); }, - "Colours" : function() { E.showMenu(colMenu); }, - "Power Saving Timeout" : function() { E.showMenu(dimDelayMenu); }, - "Power Saving Brightness" : function() { E.showMenu(dimLevelMenu); } + "Colours" : function() { E.showMenu(colMenu); } }; const unitsMenu = { @@ -61,27 +49,6 @@ "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } }; - const dimDelayMenu = { - '': {'title': 'Reduce Display'}, - '< Back': function() { E.showMenu(appMenu); }, - 'never' : function() { setDimDelay(0); }, - "1 min" : function() { setDimDelay(1); }, - "2 mins" : function() { setDimDelay(2); }, - "5 mins" : function() { setDimDelay(5); }, - "10 mins" : function() { setDimDelay(10); }, - "15 mins" : function() { setDimDelay(15); } - }; - - const dimLevelMenu = { - '': {'title': 'Display Brightness'}, - '< Back': function() { E.showMenu(appMenu); }, - '80%' : function() { setDimLevel(0.8); }, - "60%" : function() { setDimLevel(0.6); }, - "40%" : function() { setDimLevel(0.4); }, - "20%" : function() { setDimLevel(0.2); }, - "0%" : function() { setDimLevel(0); } - }; - const colMenu = { '': {'title': 'Colours'}, '< Back': function() { E.showMenu(appMenu); }, From e60587842f9da37770cb2dc71bfc37fe03ffc27e Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 23:22:07 +1300 Subject: [PATCH 53/91] Update app.js --- apps/speedalt/app.js | 170 +++++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 103 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index b753c3523..92b603062 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,6 +1,6 @@ /* Speed and Altitude [speedalt] -Ver : 0.01 +Ver : 0.03 Mike Bennett mike[at]kereru.com */ @@ -30,10 +30,9 @@ var showSpeed = 1; // 1 = Speed in primary display. 0 = alt in primary var showMax = 0; // 1 = display the max values. 0 = display the cur fix //var inMenu = 0; var maxPress = 0; // Time max button pressed. Used to calculate short or long press. +var canDraw = 1; var timeBright = 0; // Time of last activity that keeps the display bright -var isDim = 0; // Current brightness state -var gpsPwr = 1; var time = ''; // Last time string displayed. Re displayed in background colour to remove before drawing new time. @@ -45,7 +44,10 @@ var emulator = 0; if (process.env.BOARD=="EMSCRIPTEN") emulator = 1; // 1 = running in emulator. Supplies test values; function drawFix(speed,units,sats,alt,alt_units) { + if (!canDraw) return; + buf.clear(); + var val = ''; var u=''; @@ -74,13 +76,21 @@ function drawFix(speed,units,sats,alt,alt_units) { //Sats drawSats(sats); + + g.reset(); + g.drawImage(img,0,40); +// g.flip(); + } function drawNoFix(sats) { + if (!canDraw) return; var u; - + + buf.clear(); + buf.setFontAlign(0,0); buf.setColor(3); @@ -92,7 +102,11 @@ function drawNoFix(sats) { //Sats drawSats(sats); - + + g.reset(); + g.drawImage(img,0,40); +// g.flip(); + } @@ -146,22 +160,8 @@ function drawTime() { var x = 0; var y = 160; - if ( gpsPwr ) { - buf.setFont("7x11Numeric7Seg", 1); - buf.setFontAlign(-1,1); //left, bottom - } - else { -// buf.setFont("7x11Numeric7Seg", 6); - buf.setFontAlign(1,-1); //right, top - buf.setColor(2); - buf.setFont("6x8", 1); - buf.drawString('GPS On >',240,0); - - buf.setFontVector(80); - buf.setFontAlign(0,0); //centre - x = 120; - y = 80; - } + buf.setFont("7x11Numeric7Seg", 1); + buf.setFontAlign(-1,1); //left, bottom buf.setColor(0); buf.drawString(time,x,y); @@ -181,6 +181,7 @@ function drawSats(sats) { else buf.drawString("Sats:"+sats,240,160); } +/* function drawClockLarge() { buf.clear(); drawTime(); @@ -188,12 +189,11 @@ function drawClockLarge() { g.drawImage(img,0,40); g.flip(); } +*/ function onGPS(fix) { - lastFix = fix; - buf.clear(); var m; @@ -235,10 +235,7 @@ function onGPS(fix) { } else { drawNoFix(fix.satellites); } - - g.reset(); - g.drawImage(img,0,40); - g.flip(); + } @@ -253,42 +250,28 @@ function setUnits(m,u) { E.showMenu(); // remove the menu onGPS(lastFix); // Back to Speed display } - function setUnitsAlt(m,u) { settings.alt = m; settings.alt_unit = u; require('Storage').write('speedalt.json',settings); - inMenu = 0; - E.showMenu(); // remove the menu onGPS(lastFix); // Back to Speed display } - function enterMenu() { if ( inMenu ) return; inMenu = 1; E.showMenu(mainmenu); } - function exitMenu() { inMenu = 0; E.showMenu(); onGPS(lastFix); // remove the menu and restore } - */ function toggleDisplay() { - - if ( isDim ) { - onBright(); - return; - } - - if ( ! gpsPwr ) return; - showSpeed = !showSpeed; onGPS(lastFix); // Back to Speed display } @@ -299,36 +282,10 @@ function toggleMax() { onGPS(lastFix); // Back to Speed display } -function gpsPower() { - - if ( isDim ) { - onBright(); - return; - } - - gpsPwr = !gpsPwr; - if ( dbg ) print('GPS Power : '+gpsPwr); - - Bangle.setGPSPower(gpsPwr); - - if ( gpsPwr ) { - // Display GPS speed/alt - g.clear(); - onGPS(lastFix); - } - else { - // Display simple clock - drawClockLarge(); - } - -} // How to disable these while in menu? Interim using inMenu flag. function setButtons(){ - // Turn GPS on/off - setWatch(gpsPower, BTN1,{repeat:true,edge:"falling"}); - // Show launcher when middle button pressed setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); @@ -344,21 +301,12 @@ function setButtons(){ } function maxPressed() { - if ( isDim ) { - onBright(); - return; - } - - if ( ! gpsPwr ) return; - maxPress = getTime(); } function maxReleased() { var dur = getTime()-maxPress; - if ( ! gpsPwr ) return; - if ( dur < 2 ) toggleMax(); // Short press toggle fix/max display else { max.spd = 0; // Long press resets max values. @@ -367,31 +315,14 @@ function maxReleased() { } } -function onBright() { - if ( dbg ) print('Undimming'); - Bangle.setLCDBrightness(1); - timeBright = getTime(); - isDim = 0; -} - -function onDim() { - if ( ! settings.dim_m ) { - return; - } - if ( getTime() > timeBright+(settings.dim_m*60) ) { - // Time to dim the lcd. Screen tap or BTN3 will restore to 100% - if ( dbg ) print('Dimming'); - Bangle.setLCDBrightness(settings.dim_b); - isDim = 1; - } -} - function updateClock() { if ( dbg ) print('Updating clock'); + if (!canDraw) return; + drawTime(); g.reset(); g.drawImage(img,0,40); - g.flip(); +// g.flip(); // Something different to display in the emulator if ( emulator ) { @@ -399,17 +330,28 @@ function updateClock() { max.alt++; } - onDim(); // Check if time to dim the LCD } +function startDraw(){ + canDraw=true; + g.clear(); + Bangle.drawWidgets(); + onGPS(lastFix); // draw app screen +} + +function stopDraw() { + canDraw=false; +} + +// ===== Main Prog ===== + // Read settings. let settings = require('Storage').readJSON('speedalt.json',1)||{}; + settings.spd = settings.spd||0; // Multiplier for speed unit conversions. 0 = use the locale values for speed settings.spd_unit = settings.spd_unit||''; // Displayed speed unit settings.alt = settings.alt||0.3048;// Multiplier for altitude unit conversions. settings.alt_unit = settings.alt_unit||'feet'; // Displayed altitude units -settings.dim_b = settings.dim_b||0.5; // Auto dim brightness -settings.dim_m = settings.dim_m||5; // Time in mins before auto dim. settings.colour = settings.colour||0; // Colour scheme. /* @@ -438,16 +380,38 @@ if ( settings.spd == 0 ) { settings.spd_unit = m[2]; } +var SCREENACCESS = { + withApp:true, + request:function(){ + this.withApp=false; + stopDraw(); + clearWatch(); + }, + release:function(){ + this.withApp=true; + startDraw(); + setButtons(); + } +}; -// Main prog -onBright(); // Start with display not dimmed +Bangle.on('lcdPower',function(on) { + if (!SCREENACCESS.withApp) return; + if (on) { + startDraw(); + } else { + stopDraw(); + } +}); +// All set up. Lets go. g.clear(); -onGPS(lastFix); +Bangle.setLCDBrightness(1); Bangle.loadWidgets(); Bangle.drawWidgets(); -Bangle.on('GPS', onGPS); Bangle.setGPSPower(1); + +Bangle.on('GPS', onGPS); + setButtons(); setInterval(updateClock, 30000); From 7daacf4053946b2823bcd6e85e6ee1756155f042 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 23:23:12 +1300 Subject: [PATCH 54/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 501e227f0..5157d84d1 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From 02dcb629a7127a3b345190bee36cfc00747cb7b8 Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 23:34:02 +1300 Subject: [PATCH 55/91] Update settings.js --- apps/speedalt/settings.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 6a0a43772..e7ab9724b 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -20,11 +20,6 @@ require('Storage').write('speedalt.json',settings); } - function setTime(b) { - settings['time'] = b; - require('Storage').write('speedalt.json',settings); - } - function setColour(c) { settings['colour'] = c; require('Storage').write('speedalt.json',settings); @@ -52,9 +47,9 @@ const colMenu = { '': {'title': 'Colours'}, '< Back': function() { E.showMenu(appMenu); }, - 'Default' : function() { setColor(0); }, - "Hi Contrast" : function() { setColor(1); }, - "Night" : function() { setColor(2); } + 'Default' : function() { setColour(0); }, + "Hi Contrast" : function() { setColour(1); }, + "Night" : function() { setColour(2); } }; From bc215433c59658da82235a4da87705b1ff04630a Mon Sep 17 00:00:00 2001 From: nujw Date: Thu, 28 Jan 2021 23:37:11 +1300 Subject: [PATCH 56/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index d8443d421..504ca2970 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -1,2 +1,3 @@ 0.01 : Initial import. 0.02 : Misc development. +0.03 : Enable screen off. From 4488da3b71052512ed54a22be48effc2a2d76abe Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 08:26:33 +1300 Subject: [PATCH 57/91] Update settings.js --- apps/speedalt/settings.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index e7ab9724b..1c3ce9c44 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -27,29 +27,29 @@ const appMenu = { '': {'title': 'GPS Speed Alt'}, - '< Back': back, - "Units" : function() { E.showMenu(unitsMenu); }, - "Colours" : function() { E.showMenu(colMenu); } + 'Units' : function() { E.showMenu(unitsMenu); }, + 'Colours' : function() { E.showMenu(colMenu); }, + '< Back': back }; const unitsMenu = { '': {'title': 'Units'}, - '< Back': function() { E.showMenu(appMenu); }, 'default (spd)' : function() { setUnits(0,''); }, - "Kph (spd)" : function() { setUnits(1,'kph'); }, - "Knots (spd)" : function() { setUnits(1.852,'knots'); }, - "Mph (spd)" : function() { setUnits(1.60934,'mph'); }, - "m/s (spd)" : function() { setUnits(3.6,'m/s'); }, - "Meters (alt)" : function() { setUnitsAlt(1,'m'); }, - "Feet (alt)" : function() { setUnitsAlt(0.3048,'feet'); } + 'Kph (spd)' : function() { setUnits(1,'kph'); }, + 'Knots (spd)' : function() { setUnits(1.852,'knots'); }, + 'Mph (spd)' : function() { setUnits(1.60934,'mph'); }, + 'm/s (spd)' : function() { setUnits(3.6,'m/s'); }, + 'Meters (alt)' : function() { setUnitsAlt(1,'m'); }, + 'Feet (alt)' : function() { setUnitsAlt(0.3048,'feet'); }, + '< Back': function() { E.showMenu(appMenu); } }; const colMenu = { '': {'title': 'Colours'}, - '< Back': function() { E.showMenu(appMenu); }, 'Default' : function() { setColour(0); }, - "Hi Contrast" : function() { setColour(1); }, - "Night" : function() { setColour(2); } + 'Hi Contrast' : function() { setColour(1); }, + 'Night' : function() { setColour(2); }, + '< Back': function() { E.showMenu(appMenu); } }; From 22d90ab770135327bdd76068a40f87cef5630bd0 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 08:48:56 +1300 Subject: [PATCH 58/91] Update settings.js --- apps/speedalt/settings.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 1c3ce9c44..77701e808 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -27,29 +27,29 @@ const appMenu = { '': {'title': 'GPS Speed Alt'}, + '< Back': back, 'Units' : function() { E.showMenu(unitsMenu); }, - 'Colours' : function() { E.showMenu(colMenu); }, - '< Back': back + 'Colours' : function() { E.showMenu(colMenu); } }; const unitsMenu = { '': {'title': 'Units'}, + '< Back': function() { E.showMenu(appMenu); }, 'default (spd)' : function() { setUnits(0,''); }, 'Kph (spd)' : function() { setUnits(1,'kph'); }, 'Knots (spd)' : function() { setUnits(1.852,'knots'); }, 'Mph (spd)' : function() { setUnits(1.60934,'mph'); }, 'm/s (spd)' : function() { setUnits(3.6,'m/s'); }, 'Meters (alt)' : function() { setUnitsAlt(1,'m'); }, - 'Feet (alt)' : function() { setUnitsAlt(0.3048,'feet'); }, - '< Back': function() { E.showMenu(appMenu); } + 'Feet (alt)' : function() { setUnitsAlt(0.3048,'feet'); } }; const colMenu = { '': {'title': 'Colours'}, + '< Back': function() { E.showMenu(appMenu); }, 'Default' : function() { setColour(0); }, 'Hi Contrast' : function() { setColour(1); }, - 'Night' : function() { setColour(2); }, - '< Back': function() { E.showMenu(appMenu); } + 'Night' : function() { setColour(2); } }; From 576d64b256206350dd883c83c5a7bce998e9bec2 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 08:50:18 +1300 Subject: [PATCH 59/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index 504ca2970..e8d7506b0 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -1,3 +1,4 @@ 0.01 : Initial import. 0.02 : Misc development. 0.03 : Enable screen off. +0.04 : Vibrate once on no fix, twice on fix. From 7ef63005be28b229129807c56bacb2468cdabc77 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:03:18 +1300 Subject: [PATCH 60/91] Update app.js --- apps/speedalt/app.js | 52 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index 92b603062..eba98bd1e 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,10 +1,10 @@ /* Speed and Altitude [speedalt] -Ver : 0.03 +Ver : 0.04 Mike Bennett mike[at]kereru.com */ -const dbg = 1; +const dbg = 0; var buf = Graphics.createArrayBuffer(240,160,2,{msb:true}); @@ -31,8 +31,8 @@ var showMax = 0; // 1 = display the max values. 0 = display the cur fix //var inMenu = 0; var maxPress = 0; // Time max button pressed. Used to calculate short or long press. var canDraw = 1; - -var timeBright = 0; // Time of last activity that keeps the display bright +var lastBuzz = 0; // What sort of buzz was last performed. 0 = no fix, 1 = fix. +var timerBuzz2 = 0; // ID of timer for fix second buzz var time = ''; // Last time string displayed. Re displayed in background colour to remove before drawing new time. @@ -160,7 +160,7 @@ function drawTime() { var x = 0; var y = 160; - buf.setFont("7x11Numeric7Seg", 1); + buf.setFont("7x11Numeric7Seg", 2); buf.setFontAlign(-1,1); //left, bottom buf.setColor(0); @@ -173,7 +173,7 @@ function drawTime() { function drawSats(sats) { buf.setFontAlign(1,1); //right, bottom buf.setColor(3); - buf.setFont("6x8", 1); + buf.setFont("6x8", 2); if ( showMax ) { buf.setColor(2); buf.drawString("MAX",240,160); @@ -198,6 +198,7 @@ function onGPS(fix) { var m; if (fix.fix || emulator) { + doBuzz(1); //==== Speed ==== if ( settings.spd == 0 ) { @@ -233,11 +234,49 @@ function onGPS(fix) { else drawFix(speed,settings.spd_unit,fix.satellites,alt,settings.alt_unit); } else { + doBuzz(0); drawNoFix(fix.satellites); } } +// Vibrate watch when fix lost or gained. +function doBuzz(hasFix) { + + // nothing to do + if ( lastBuzz === hasFix ) { + print('Buzz : no change'); + return; + } + + // fix gained - double buzz + if ( !lastBuzz && hasFix ) { + if ( dbg ) print('Fix'); + Bangle.buzz(); + timerBuzz2 = setInterval(doBuzz2, 400); // Trigger a second buzz in 400ms + + lastBuzz = 1; + return; + } + + // fix lost - single buzz + if ( lastBuzz && !hasFix ) { + if ( dbg ) print('Fix lost'); + Bangle.buzz(); + lastBuzz = 1; + return; + } + + +} + +// Second buzz +function doBuzz2() { + if ( dbg ) print('Buzz2'); + clearInterval(timerBuzz2); + Bangle.buzz(); + } + /* function setUnits(m,u) { @@ -410,6 +449,7 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); Bangle.setGPSPower(1); +onGPS(lastFix); Bangle.on('GPS', onGPS); setButtons(); From a4086fcb8277bd0044c87653427073a41652425b Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:05:31 +1300 Subject: [PATCH 61/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 5157d84d1..c308e540e 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.03", + "version":"0.04", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From 717d76dccf85bf64cc95c037a640aa092a724862 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:15:39 +1300 Subject: [PATCH 62/91] Update app.js --- apps/speedalt/app.js | 60 +++++--------------------------------------- 1 file changed, 6 insertions(+), 54 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index eba98bd1e..d9d96bd33 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,6 +1,6 @@ /* Speed and Altitude [speedalt] -Ver : 0.04 +Ver : 0.05 Mike Bennett mike[at]kereru.com */ @@ -28,12 +28,10 @@ var mainmenu = { var lastFix = {fix:0,satellites:0}; var showSpeed = 1; // 1 = Speed in primary display. 0 = alt in primary var showMax = 0; // 1 = display the max values. 0 = display the cur fix -//var inMenu = 0; var maxPress = 0; // Time max button pressed. Used to calculate short or long press. var canDraw = 1; var lastBuzz = 0; // What sort of buzz was last performed. 0 = no fix, 1 = fix. var timerBuzz2 = 0; // ID of timer for fix second buzz - var time = ''; // Last time string displayed. Re displayed in background colour to remove before drawing new time. var max = {}; @@ -181,17 +179,6 @@ function drawSats(sats) { else buf.drawString("Sats:"+sats,240,160); } -/* -function drawClockLarge() { - buf.clear(); - drawTime(); - g.reset(); - g.drawImage(img,0,40); - g.flip(); -} -*/ - - function onGPS(fix) { lastFix = fix; @@ -253,9 +240,8 @@ function doBuzz(hasFix) { if ( !lastBuzz && hasFix ) { if ( dbg ) print('Fix'); Bangle.buzz(); - timerBuzz2 = setInterval(doBuzz2, 400); // Trigger a second buzz in 400ms - - lastBuzz = 1; + timerBuzz2 = setInterval(doBuzz2, 500); // Trigger a second buzz + lastBuzz = 1; return; } @@ -263,7 +249,7 @@ function doBuzz(hasFix) { if ( lastBuzz && !hasFix ) { if ( dbg ) print('Fix lost'); Bangle.buzz(); - lastBuzz = 1; + lastBuzz = 0; return; } @@ -277,39 +263,6 @@ function doBuzz2() { Bangle.buzz(); } - -/* -function setUnits(m,u) { - settings.spd = m; - settings.spd_unit = u; - require('Storage').writeJSON('speedalt.json',settings); - - inMenu = 0; - - E.showMenu(); // remove the menu - onGPS(lastFix); // Back to Speed display -} -function setUnitsAlt(m,u) { - settings.alt = m; - settings.alt_unit = u; - require('Storage').write('speedalt.json',settings); - inMenu = 0; - E.showMenu(); // remove the menu - onGPS(lastFix); // Back to Speed display -} -function enterMenu() { - if ( inMenu ) return; - inMenu = 1; - E.showMenu(mainmenu); -} -function exitMenu() { - inMenu = 0; - E.showMenu(); - onGPS(lastFix); // remove the menu and restore - -} -*/ - function toggleDisplay() { showSpeed = !showSpeed; onGPS(lastFix); // Back to Speed display @@ -321,14 +274,12 @@ function toggleMax() { onGPS(lastFix); // Back to Speed display } - -// How to disable these while in menu? Interim using inMenu flag. function setButtons(){ // Show launcher when middle button pressed setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); - // Switch between fix and max display + // Switch between fix and max display on short press or reset max values on long press setWatch(maxPressed, BTN3,{repeat:true,edge:"rising"}); setWatch(maxReleased, BTN3,{repeat:true,edge:"falling"}); @@ -392,6 +343,7 @@ settings.spd_unit = settings.spd_unit||''; // Displayed speed unit settings.alt = settings.alt||0.3048;// Multiplier for altitude unit conversions. settings.alt_unit = settings.alt_unit||'feet'; // Displayed altitude units settings.colour = settings.colour||0; // Colour scheme. +settings.buzz = settings.buzz||1; // Buzz when fix lost or gained. /* Colour Pallet Idx From 5df086d9e4bd7a8b35e2493edca1f053368e4445 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:17:30 +1300 Subject: [PATCH 63/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index e8d7506b0..3b12d6f2e 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -2,3 +2,4 @@ 0.02 : Misc development. 0.03 : Enable screen off. 0.04 : Vibrate once on no fix, twice on fix. +0.05 : Add setting to turn vibrate on/off. From 9c67ab7fef3959bdd1bc7c3463a21a7ecaeadf74 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:22:16 +1300 Subject: [PATCH 64/91] Update apps.json --- apps.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index c308e540e..02fdec377 100644 --- a/apps.json +++ b/apps.json @@ -2620,6 +2620,9 @@ {"name":"speedalt.app.js","url":"app.js"}, {"name":"speedalt.img","url":"app-icon.js","evaluate":true}, {"name":"speedalt.settings.js","url":"settings.js"} - ] + ], + "data": [ + {"name":"speedalt.json"} + ] } ] From 861b3e10b4cc9d902762a36e129f5a9a843445b7 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:27:20 +1300 Subject: [PATCH 65/91] Update settings.js --- apps/speedalt/settings.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 77701e808..7eedd88ef 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -29,7 +29,12 @@ '': {'title': 'GPS Speed Alt'}, '< Back': back, 'Units' : function() { E.showMenu(unitsMenu); }, - 'Colours' : function() { E.showMenu(colMenu); } + 'Colours' : function() { E.showMenu(colMenu); }, + 'Vibrate' : { + value : boolean, + format : v => v?"On":"Off", + onchange : v => { settings['buzz'] = v; require('Storage').write('speedalt.json',settings); } + } }; const unitsMenu = { From cdbfa0d502379361efb316a3b2ed37561e52ea56 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:28:01 +1300 Subject: [PATCH 66/91] Update settings.js --- apps/speedalt/settings.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 7eedd88ef..c31fcf0c6 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -1,14 +1,7 @@ (function(back) { let settings = require('Storage').readJSON('speedalt.json',1)||{}; - /* - function save(key, value) { - settings[key] = value; - require('Storage').write('speedalt.json',settings); - } - */ - - function setUnits(m,u) { + function setUnits(m,u) { settings['spd'] = m; settings['spd_unit'] = u; require('Storage').write('speedalt.json',settings); From 6d28cf5de7471c4292da807ab71662a1fa9f6a29 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:29:33 +1300 Subject: [PATCH 67/91] Update app.js --- apps/speedalt/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index d9d96bd33..cf542e5c6 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -239,17 +239,17 @@ function doBuzz(hasFix) { // fix gained - double buzz if ( !lastBuzz && hasFix ) { if ( dbg ) print('Fix'); + lastBuzz = 1; Bangle.buzz(); timerBuzz2 = setInterval(doBuzz2, 500); // Trigger a second buzz - lastBuzz = 1; return; } // fix lost - single buzz if ( lastBuzz && !hasFix ) { if ( dbg ) print('Fix lost'); - Bangle.buzz(); lastBuzz = 0; + Bangle.buzz(); return; } From caafa9d763321daad8aae0be4dbc23751d7d54fd Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:38:48 +1300 Subject: [PATCH 68/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 02fdec377..9c92371ae 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.04", + "version":"0.05", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From fcebbf6f5fb6e629b3423ae5fa0ad45b62677301 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 10:42:54 +1300 Subject: [PATCH 69/91] Update README.md --- apps/speedalt/README.md | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index dcb98ea45..cf42eb42d 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -1,19 +1,12 @@ -A watch/clock that displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. You can display the current or maximum observed speed/altitude values. Current time is always displayed. +Displays the GPS speed and altitude. One is displayed on the watch face using the largest possible characters depending on the number of digits. The other is in a smaller characters below that. Both are always visible. You can display the current or maximum observed speed/altitude values. Current time is always displayed. -As a power saving measure you can : - -- Set a timeout after which the display will dim. Touching the display or buttons will restore the display to 100% brightness. The brightness while dimmed can be set to anything between 100% (no dimming) to 0% (fully off) -- Turn the GPS on/off using one of the buttons. While GPS is off the display becomes a simple clock. - -Display Tap : Swaps the displays. You can have either speed or altitude on the large display. - -BTN1 : GPS Power on/off. +Display Tap : Swaps the displays. You can have either speed or altitude on the large primary display. BTN3 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. BTN3 : Long press > 2 secs resets the recorded maximum values. -App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Power saving settings. +App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration on/off can be used to indicate when a fix is lost or gained. From a679e01479bdb638c57f3924afd6db8e7a5be2d3 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 11:01:28 +1300 Subject: [PATCH 70/91] Update settings.js --- apps/speedalt/settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index c31fcf0c6..5eed53d03 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -1,5 +1,6 @@ (function(back) { let settings = require('Storage').readJSON('speedalt.json',1)||{}; + var vibrate = settings.buzz||1; function setUnits(m,u) { settings['spd'] = m; @@ -24,10 +25,9 @@ 'Units' : function() { E.showMenu(unitsMenu); }, 'Colours' : function() { E.showMenu(colMenu); }, 'Vibrate' : { - value : boolean, + value : vibrate, format : v => v?"On":"Off", - onchange : v => { settings['buzz'] = v; require('Storage').write('speedalt.json',settings); } - } + onchange : v => { settings.buzz = v; require('Storage').write('speedalt.json',settings); } }; const unitsMenu = { From 54603ca47be2eb6b7da88dee528f7466b8969a74 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 11:16:28 +1300 Subject: [PATCH 71/91] Update settings.js --- apps/speedalt/settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index 5eed53d03..bb8a8221f 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -1,6 +1,6 @@ (function(back) { let settings = require('Storage').readJSON('speedalt.json',1)||{}; - var vibrate = settings.buzz||1; + settings.buzz = settings.buzz||1; function setUnits(m,u) { settings['spd'] = m; @@ -25,9 +25,9 @@ 'Units' : function() { E.showMenu(unitsMenu); }, 'Colours' : function() { E.showMenu(colMenu); }, 'Vibrate' : { - value : vibrate, + value : settings.buzz, format : v => v?"On":"Off", - onchange : v => { settings.buzz = v; require('Storage').write('speedalt.json',settings); } + onchange : () => { settings.buzz = !settings.buzz; require('Storage').write('speedalt.json',settings); } }; const unitsMenu = { From 5ee1336a99d6d74c7d18f0e062ef07cfafc19686 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 11:24:12 +1300 Subject: [PATCH 72/91] Update settings.js --- apps/speedalt/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index bb8a8221f..d9220486f 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -28,7 +28,7 @@ value : settings.buzz, format : v => v?"On":"Off", onchange : () => { settings.buzz = !settings.buzz; require('Storage').write('speedalt.json',settings); } - }; + }}; const unitsMenu = { '': {'title': 'Units'}, From 10d3cfd331a4e75fbd52b832127992e11f18ddae Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 12:52:44 +1300 Subject: [PATCH 73/91] Update settings.js --- apps/speedalt/settings.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index d9220486f..c880e2a1c 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -1,22 +1,27 @@ (function(back) { + let settings = require('Storage').readJSON('speedalt.json',1)||{}; settings.buzz = settings.buzz||1; - function setUnits(m,u) { - settings['spd'] = m; - settings['spd_unit'] = u; + function writeSettings() { require('Storage').write('speedalt.json',settings); } + + function setUnits(m,u) { + settings.spd = m; + settings.spd_unit = u; + writeSettings(); + } function setUnitsAlt(m,u) { - settings['alt'] = m; - settings['alt_unit'] = u; - require('Storage').write('speedalt.json',settings); + settings.alt = m; + settings.alt_unit = u; + writeSettings(); } function setColour(c) { - settings['colour'] = c; - require('Storage').write('speedalt.json',settings); + settings.colour = c; + writeSettings(); } const appMenu = { @@ -27,7 +32,7 @@ 'Vibrate' : { value : settings.buzz, format : v => v?"On":"Off", - onchange : () => { settings.buzz = !settings.buzz; require('Storage').write('speedalt.json',settings); } + onchange : () => { settings.buzz = !settings.buzz; writeSettings(); } }}; const unitsMenu = { @@ -51,5 +56,6 @@ }; - E.showMenu(appMenu) + E.showMenu(appMenu); + }) From 7bca8c2a08b4a8477f109dadabe25c5aa4d25843 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 13:12:32 +1300 Subject: [PATCH 74/91] Add files via upload --- apps/speedalt/screen1.png | Bin 3929 -> 4324 bytes apps/speedalt/screen2.png | Bin 3806 -> 4138 bytes apps/speedalt/screen3.png | Bin 3585 -> 4193 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/speedalt/screen1.png b/apps/speedalt/screen1.png index f269f8bc4e9f6482ecdea565c10b7c778b5532aa..eac5e7e7aa7be41cd9bb0d3d478d3a312f936960 100644 GIT binary patch literal 4324 zcmd^D`8U+<`ybP&k!>cFC7!V-OEI#IL6#Y^lAIx>~7@8{3>e15pE`<&M~*STNkx~|u`@7GPbVuR&BE`A&Y0`Xgz zn_fNKS^vMFM-QWc!*Uh~1go?#y=Wilu~slyx6lMPa&q_+0zLlvxz3HmIhgQWLwk9q ze|Pn(Pw~GY;?`0QKYJm=X&+;tSz+a#9Wk8UUiQI;AOtb|kai9_RU25w2XsOa=c_?L z4+PeN+c1{|L#+gjiq*Lwx3B46O$32I9)bB=fdGk98K0!%Y1<%(xRB9oPq%FNVH)~> zDJ`BB-06Aj_s(CfWiaPnk}b?!8bKmLF3t*1sel1}uq(k6-YmQ~({=p~^mE+f3?ah5 zU#b=sH;SeOZfWe+J!nB+Iypn3x?U_#eWGuSTz#{zOvZh82zQIIj+8? zgSSAQsmxvm`w46Fme^N~e?dB%>pIrD)}0HOp^*JHZYhTN+ENfhXX_hoEAT3f;$q|} z$-e`1O?!QCx8y@2E>aMflz_r#gRjL8F2r)TN$xKHU7Gu-yQUk(sxtPy_(@ph`g;|D z%qd@uDO@Mqkr`G!rQ(@a6Z)w`v7-G5U8O|C+i|06<^2t>K_AW7qXPn*-A&47pdu@I z&P6&ZMI^WRu8CY{F0;pdcm1p1TDv2-=4^pTNyU{B-AZTEt%41YsQ{*9Y#Y011s)at zIwG+pFR_t_K2IS;Om-%CYAIXZ8g!=6M7k#=y}5;~aWy?RG}c<;R6DI~CZ6Wt0s-Ze z2ISjIYB|Pq{e(7+VOIWUqKl#O3kX?lSS2YBeChhjar2+mIteJ`!#y8%(RQXKXKN&r zT~2EgR*)#M*Ie6i-}B!p3_p%vs-06{CrkGc7yizS%%vsXFY=yonSIC5SMf7n9h9xd zGp#EFi?-jXxc{}-ZaT|0CM36Ce~#viSro}W;cN0ZDOOi`zo94Q)SWwBfjtHDHX?g= zfPOclZn!9h`i4Gb7p}(G%jK&wu9m9Fv_tyl(n{wdliS^%qlr)DnRU12D$aNYuli4Y zK7pAFSooBht5$0-e7Uatf~*%h3{89&eM55bTJ{s|_1ob)+jk?StrStkfYaVJxoxq9`b4|T5D=kqSyS&>D9?uwsb__r@fh9ay|K~^7swn-DN?FxZrh2(WJ;E&uVu6$7>AdFw1)852+p~H5gr^5r#I# z-rv-8lJlU~zpdXrkC_$SdO5BDAWaWJ%+y($2o9YJZz;LD@iY*i$Q^=?t2$&U1>Bu7p>X0}dcayhKT^N@qF3&UdeRns*+v%or=6InG)4VC9mu2y(k;sUv9L zZ@O7yXPL^1HnZ>hg{wtG&P+^=>?zlovGcMk*_pXQI+fu3Dxqw}(&weR_QmhV@EAss zpc50P3m{)!X}~Ne~>vkNSG@5Hke%io81rx@poYZS)H+*rC zYg~Y#y@pVTPw9>Bp%V%zHysUJqV-p9)ERj}q;@_3Ipe}lOcdH{Otg|Jl1Rb}WDI+R zrY!mN=TFy;zf#3;kk_yzc*{#SJ{*O+@AjwFUwr;o6Me%htZ&zff@_LbQ`Id~S22az z6+&+Qu3Gt5G?M$ERq^)fH*$oL;&&X$B2#{>+*g8-B8xAtcCDm+HT@$xGEXBzNpJBv zQ)qr*`unD$ujb5|%3SN*Ts)>|Bw8c%9W$M-EWyVqzq^;y?#D1Qce67g`Shs{8!-`w=-|#ttVXGs*nBPWjW&NmV zPp7$F?VFcLlP|At-H;)=WL9c-ioCLDd`yk$7`odq28SD6MLKLpiGLM<4nJjVU^fyX+2bEpU$_UB#vLF{=)mE&?qRyW#zRqgVPeX zxI7%75XZl>juDI^g09j%eC`@z?)a2Ud+zE4t41un=P8(0imP4<61CQA)6Vu4tn7_k zsYBg_6b)N2d`HUai6#NNSJZpl9!(QuL%g*K`KFJ$*3-(yO%_FigCdsFX(ac>pc6_7 z)A{E8afvI8iPa$~;8E+qB;xAcw8SCyWQDQ6I`kLtNbmh5qLkI9ZF8c@XCQKgLX?E* zJWrqw0#qJWwq@ka`!q$G)WbHD?NuH^_BVO{tx+FQ%I=mJw>wz z9>G33GPhCxv^_4^LvkTzF^M)IV7(`bUt%*P%}5LPX-CxculUWBqXme&I6uIXm~y_4 zjFWq!wiya0zUSBaF)dX%17DZ1))a(vz}_6u=B%%7?=ET5rPgEjr8p_|q)|Qb&PUV& zn!uxHqX}U<|nM<=Oh*1S+bq28_k#wzaD3ux`ZI_Fj+f=@@WNh9-O}I-k)!J3J z^oUu927A6A45aFTCHiD*1)Q-q(+eUq0P5t$FCKq7YXMSv2-XH#Rk?Pul-m7c?5XRl zheGKNs;-~WmP5F6I%61fw=nNROXGGYXYK8ApnCeMKEtin#yY@k)hAS>;z*4cr>UNu zz68H201diEu(sz1D#PX*5U80`>BSui0q^ z_iir6en^&4xlhACSNIO?4Ip@pR`ft z8$0LW0Jcnvh#v@S$=+zF!wh~Mr)d4-x2CAI@rbQ*yeg=vN(kqpZ&_8TP?zLO3UFcf zS^rvS7vyfzbnW4x>M@l4E?Y4zR!Ir8%Z_%<>B{{lYu0brbm# zb;zvdo79Ce_S=VV-=*W_Ya5O!eYwmpJ(ye9xt?b6M-Lnb%t)Zxz8X|F>lH2XbhRFQ z=6uX9vc)5cPwYjXb&+rehkFEv>(fzGxkXNq6Z7)i;0_1YB0RRQb_N}rUMtDpp~uku z%kqyD;IzgxSnIQq1DgOfd4&JaR6LL5_IPFZ;`_BuL9PwF*8o;51$6R0^0p`(zz_6x zW!14|SmuCVbVB+RwLTci4z!I3Gn=gg6XkMZ1vZ<+!NfjwK|m-95xO6BTaHI5&SkE7 zrjxw4!k*c$JRr~m5~E)dQs)d^XO#&J+$sHTsw@|VlK~2PkJc&>O{LkAP`tk^JRqYa z%D}(9ysN)ai>2{+cx0j-+x@tW*R(1axXg^xyXA>BlPB*dHB#hIOW&3=UBaYPYaI&O zViFiGS%qQw@}+*$y~l55v*T9^@eT!IH$A!~+Bs5Tn2e7ML5~~)V@iK8E>Rcy%h7DD zG^8nHe8nOyAp5P}pCo4PQm*V8d+5twN+A!dDGxd{zq$2BkMTHtTPEWcqV~{ydX4uhX0+(Du^QBFjFTh2C1G!?6y_c`CS(mOx zCl6v(ND~<=&{dcYCsUhr zhK2QgEM{JU{(2rUdJy^m^Q-dYMK8!M!`S}7T7@~cM37RKsgtdEae=(l+46VV^TikL zPGSA-F{!P|^M&{-vBDak;h584Mf;G&v^li961m|*8m;C6nQ^Zsc64K?ExC_w?pe9- z57aOc%D*)y-PvK>BH7`^Bes>xJWNI(H55ao!AXsZUU&eT(de|> z<&+KE()@>@zc5#n^BkwH2duS@db@7blIeTD4+WYi?h_}1nf-0{J@5I7Ul}=HJ{UTc zcBsqhlGP>KLtWY~`cm++@ictp84f}CP}=sd##g7I2-fu3{#Yq9gc|GM50QWM*+DYb z4w+eaY9MDE=6neRJegAvg@p2a=Qgm>Tp{TZ8HAW%>NRrJQ9vF7i{$aWYvd&W=mB)* zze|tYiCLjw`ZAwm&_xj7_Lw9m&B{GAU1G3E_^`o75QZ1fR)#JM!;NOSBF~Ag=`(;7 zy;$7X2y=hb(+m@ElN0p0DVtM`0_0(?#ZZ+@YHzrYNt<@%nl>IZZ@L(}1GdDIM|P@E zWw-;wnSh9af!2(Q40dw4Fl}0KVu!x-XcyUPu=n{W@J#L9I_HTvBdRtvmfXPjKFM>M zI{-~;+-R7u!gozeZ~}f35=KVdC$ST_4{1IN_qH!Zwvr8jb`rfvoA|qeRKF4n-^2Pe z!6R8#2b8!5@4(&w=G!){^Mn|M;ut@D`tF~_nL3+MezPBzUros<04^$zJgjE3q5Wyf zWxd0DJ?b`RB6cg5 z|MBMhzAJbXKQyu@dvjTt^}TSsjoj$@pL&#U9zH$3yL`#!|J|HXEPE+K$XTzis<>fo zsePWX6tLxe8lr_LHU!|2_d+wlkd6~cynMD$qvBK$_{np{^N=|ROlRn!2;vF`1Plxd ziGp!p=xM)q$6;pvh@{dTTy3APrNDr{Nw{fdCCK^xA_W8Z7D1OY4|8#v6%oLDWnxdqLmwAVLbH gmH#Vf&MN=Ks#!|6wHQLxJwxX76twACpx~R4&#!}U2sbNY` zyH+GMrrO#{2x{%3K@fWo%Qb(%eZDXE;hgjEo!|L>zwbK_=cHY6v^p-TAPN8gj@wvc zem$xy{{%$%C>vj!&jtX*RctV3SL1O@MdQ?^_pdDwrpiz=RYRH7#Vd*_mse5&o_C-D zg(_p43s%=Mk4-331LKAZ49>T<@K*ax_BWWMgKg4*I8egcdL{_uSfGF~p8*Si0%cSl z7XX0&f@Th?CNp{fASr3nna;1yMj(j-`D9Z+Af(9fl5Hvgh!T{rwg-@IV*p+{uG z|0nyO$|w!l+v4+H&=1tKMacn0ZbD=UATp}oT*46a%TrU8jO43R-#ZaP2Ug!-e?2~I zayL^ts-kQ0#%vTdTVwovmkELyDWfU+3o*Kxw4@Te?-67rnzsEsqph{~^!MUwimN9qm%@ zsI$`Z7<R7dKRsivjjSD^6f+lBovuV+{+ZqE7VnJpWr4zvZFZ z`jT#J#5s_O&-E!$ZMvM3)Gn$VOrtG#j9qxNtr}M}kj<+yhp+09okWnnu5zQyr*{Ly z)2OlW_~wJpg|S|otk%sP&q;GoyKsOA;qT{2VwHNoyB)|=`{DiiAdx@OJgvELC2ZZ# zq;OYqF|h6q&F^!barFwEQ0Vn=bI)4XuO|P#yu-LkX*xaJ7Mp!8Wa@mLPk4oS9rIwx}4jmI!!h(bL(I&niv(x_Sfqf z@76}ch*J-GJPnZAwdZfyjebFS=v9)!eIGH1<$f2))L-52b>p$q)~w0Nj+5k(-u23} zOn8HpW_M&lU$^|jnvi4upe_C4*hbqKNS4lDvQf)A3{+pEp5=_Z%}&3}F-1gHKubyA z*7r}ZZ{O7ivOjF$0$gTpCLFbTnfF!vxaN5hURzWXFuNngS?bs9N0)K>HcLp3H&1Ub zDRf7w)}9eK_B|KW#Ny7IS-H`7cja~+{5~oSE4g_G@O6|)4WC4W6A#V{Ops^8b?Afe ztFS`j?=)qfO7wc!HXwM)Yuu-Sq?GUM2cj4tAHy(vBEr9B7Td^K+h}imQQ0c1=6cW zT>LRe%6fX%Q(bc()SK;N@Oxb9D~h?idmQH36kaXlesKm{Nitq${{4li7yK{nJX6bI zn0tBiA0IsM87G0fm)aBK7sF7q=)Q~!da54f4Soo&2p&EQ!hU_=wJ2YUMZm$I$F2H3 z(2bi_mASACAE)H@PNld^2B(dih%-4J*ZYmKBei5#@5X-fx_1~^sjReet`MsB>^8|^pJ%Z|n> zYuSjGj<~J6Ju?8t6{vG+t!>?j&(+aAZvMSDVy7UAh7K&%tlw*QRc!DDt?vta7bYYP zBVSdS4{G^ts)h{HJJ_r+Y)~e{j2WQxn6+9dex>r@nsM{bdLt4DTByfKZd0P~&VYPR zHKiLA5676!Bumyo!E3^d6XCwS5OPE^QpGj(=DbM4-Je3p`oMKyIHxfrc*tu$6l za@2M?lXK~I6zuJ8vh}K)`^NILhpTWxrh=rK(F+0H?^-0Tm$QtM17uI_o=^z4cu+1C zNxUkzJ=gn}x{<#V(*4IQG)#ZwLd7ubSq;QB>%Au!NV@M!KDEyrn_KeEcgI&G@zDJB zy4AoXv`J3e1o^lI_q>V+2DO7J^0J-LRQaNM^7Yhi4oqX|)>%|tpT$$#V%g$|7bx&R zN5FAW4P;$=zWdT7zq+>1V*1rooRtqE0hA}u{o(Y}wq7nn-u!WT{=ROQj~cuvOB&c+ z=jE4cQ1$5cX`%3dwI-4Vc7SI0gfOxSp{f@IYvxk#9!^GRU?Ek{@;-8?}Oz7)2RoEINrzwn~t50YPGvI?Vc-yr6Lk`%!z3s-`Z+2T?02 zSgvzAY^TSJ`z|)n#P`Ly^Ot=P^RU~0=)4$TlNB~j;ffM(9h+}jT{*PKa88ecf__s; zW?Xz}pBZp;=8fG94g&)rZRVdg-0}dx{Peu{{}ncMnJM?K3QcmJ`o4=gZlg4{-mT%} zkAM^$NZG0NnX#8@Lexj>4%OJ9y8Szd!Lqb95KJiiBU9=#VLyM*DQ$w2W=Kz5JLi^i zG|45SQbvJH8&UqfxR3veJ&$tOM`V|!At8yPiLzF3Mk|Z3|Fn&FabsL*6o25dM&CbR zllC|B^<$zazpVA>KZ~+eC;zmoTGvZwI0=PR=U3%cwX$A#k#Gdr;FtCg#S1@Uc^){Q zZg>L^{9zLhI%BwZcrbEUxH~>gJWe4b@DeIZoH^ORY2_?Bq`5tlKv4;t5(=U$J)OH- z)BY(^m#O8WOTOE9M!WW^9|-4GkZVhLo0A~4fjjK9cGd>c#m4prcCK%2N!hJuS2kh^ zTecJ(Pdo8}j6lL7zmdIEA0X6zcxHre>CTt3)5^LvnbmlUdTX+-uFB0#d_ZFR!n|$* zbvoGUSmICu-IJb{;Qf%Hlmv9cU8fPn(RAHrW0Ucgnzy9s_QS}JN#MK>8tySlf=j!6 zrS9~zQ$)JDgVQ7 zWtuy&xi|WC$=sBNUxyC-Q}{_#dMqWX{fBWuA9vgRr2qp2MiFEk1 z-K33A%^vt|^E9Fv=I>c-B9gfG%lx!U=$7jv4#mzhZn(T_w%lsAyz6Vu9CLEh(6z4L zK-PlVOG;O_dE2G5eTlae%vj?lPvc*UCemGSya?Jx2$lH7Q>$IQ9y!uRJS4t><5^9( zXxhF+y!1Yd74U5P;z|bDj+@Loan-vdn6;*9^)Ok-pc`4 zI4$C>9OOw7E7@M&CHWvm&}hWo>U4|Xh@$hGFLwaI2&r@bW~nDL3}VVE9Uv+z8fMHu m2O#7+%Ju*7|3nrBN#GBrp8coK?1H108DL}Kh^fBplky)N6CJVu diff --git a/apps/speedalt/screen2.png b/apps/speedalt/screen2.png index fb484a8d475db366164c80cd51bf0261b3a7008a..37d7bb7cf575545540f3eef1a26daa4c63e415b2 100644 GIT binary patch literal 4138 zcmeHLX*Ap07AI0KX=#a4wC1L*OPUfXS~1nEgesyjBx{5L9i-}oMTnXZXWMT*h(r*iL*N-Jth{R^<>^O ztfAu?c5>UZ=vL9@?8N9(%p=Ry&-Ou_3E%YVk2`qhDD?1gmlzYQn1LN=@V&JV{aoM= z&IT>SgSvvT3dEs1dZjrE#Q9S-oS6xtpD}=9$DRkKXcYq;LHnw{2hL7fL6hEGOcZad zy8(R!jp)@E%0AIw)FdK{A1lJG1d~=DKV4#n#k)?8Va3)PFzmqd1e>gsSD@x*((mTU-J@-AodmpkObckkPlG}Wu~ z+tMj$>s7}RB1Mo=)HAUwoC7UO*6WRrTxID0RaWk|^^Ul*f5Ct0*Pua8Uu64(de3m` zAS#XJvTm*%OYU`$B*{D0&QV6uy1PfnPeN4jMOCd+Qly5n`$1RNX?$}Oxv8NTO z-D*I!YRqr)RL#WX-X@`Irb4Vo)Rith?OOMOju&{Y!@C!OY+ZoT*-_#kud`5CIN4lL zp3%3G0>E;AZcZ`aJeezE-LM$vRJcAkrgcOv$Q$QPUA8e=4#})g72cVVmSxaeO z3~$Mf-#`?o^?C;CUGb%^+31-#7ZtrP#bVAQ)qkm~! z@YW68W$N=#^D(bGnxz0)Jw()iqJ(|cI2jR}ok^uvd;2~csUyXT%E+nLfD(l-Yd!?# z$Gvg6e_`nE8#r0f8k!^=y?=E%7U^DIcDA}*Il~&d^5OJ>d(LZWHReyh z!IXP+4Zr}`ou3QU3aH}tc53_%H2Rju|y*I7v%B>d+T$=i&{-h2YOok-yw(|+Nkb5>^gED<(L46#UeHJ9?!bXJ>hKnY8P6<;w_CzDs`l&Qg$jqR7M~PJ(#mFn%%&gQY?G(MX0gE~= z7P<`ygP)B^{z!zW5DBI?GuQaFtYylu%SKa46i?^?;Fu0`Tk)R$YTHtV; z$%Qq`j-h694PXISM@I0&0`5bTR#L_x$_4gC_9en{s6*&rLAb8p0B zD!b-Wo!rAgIiM+w%#Fh$0P&FG$1Jr7E#AlhC9v{{M2R`w&U8y@{TG5hKwYz$#~^zv z*&c@g2~humh5Lg)QJc5P&D3&4Yb$_&j*zS_ZC& z@pt|j15B32X%$%=*CcZV_y_K&%#Y@-+>tYctYSJ0WdADIaY6&O++U5ky^6|H-W|>V z*YUlYFRW@X>%b#KI8zF@v(leif92`-Bssatd?-y8r%|;wlOOrbeL!m6wsAVpy{(y8 zy4c}}y_>HAr5(m;gfmeUN0vfB;Xm7Raj^BJb4dNFe)xMww(QKr6(>YZ%!?P&KkTfQ zV_W=e^pJoXs9HU|fu7rr#{^2}R8TogJh3Q_-F*5Fx-N*(>2K^;eGWjc6z?Nn&qw5j z@VVLWAsUzkIkp{a-S(wzB>Lx6gAXjs&#FJ&Kb3S>rsW7wPsdQ*k{Y-MA0^D|C+wd){>8nck#h^FVx7LFI zO7Sg(i<27f!RKMBu=5B5ss+9NrJI!mQb9&oe7zVcWQLIHG5x2C=!GU_tB_)oTnn0% zDO(J&i24DEL^!lv>9Tt zPO;U<8aE|q)Kv9LH-`rHGH=oSHegDi3s6;_Q#&}FjsroA$jBkJGkK<-?A>i)3!Sv1 z)hHUCv>aO-(xM0|14}g@*6&mO-QE<*ODXZdei#}pnkMo&QE)}D9Yi$(8jx#BkN^_) zJ{iu8lWl_I9I!GGq9x1;V zYb1s(T>nao>zc=tWLvcG=fhpc-In4eq1wQEkR>5w=De}{K^n21l@NXMjQ7*e)!u}; zKj)YDmEktiJ0zo#m>2!6Iar@%S$oY?q9g4GWBY+1TDUP-eHOAccQaKBtD2Zl0OqI}-N%eov8; z1-iD&zqbf1@;aTDI$yR=-FZZRE}&D{|U6)PB{Po literal 3806 zcmeHK`8O1b7oVnyq0$f{%9e+RMxieBU|mhkNfi_j5k?-19k~AMQqhX8%q44rlMtH2q86+(-Vrot}@IqjTbS$-y7)){Vr z!RKr)X2t=tl1?pw5?maVkoCf?FNjLWBISroPoA_#z@#$YCh2lJ-TpEA`p_IKHYFra zstj3#53<2ncfvO^_bw!b*W7Y5deK$(_KEB0oS`eU>}wHipb@Zah^f9cyp=mDt=uiM zbD=QKl~cfvE@6a|<`MMLKLYrzz}n~CMP+aN0z;iS5&-vuok{buSXZjr{W10TFJQ52 zE>ebX*@+XwYXaLI`#FrWNrK`t+pZ9N@$x_!lZ$hoVRt%CcA`~8+Z=;BmcJ4b+i!3h zee4?1g%fMXpL6ftFuCK<2HezH@p-;H(%8KLh0?u0k%N|(M~AsaU!j;RDa*i3p*TTN z(b8;}d8Ri#VFsa!%8cz{d7fMf9^{a)dwy683N(GhTc80f= zADOd|SXW=rMeHr^>*mT@?yUnDg!wSGd?$~95p70tS*O%|{iQk4Be7k5tdW+-BXq?& zW5-U)d&N3~u1-L_MiVUU+A?k@nW0qW;HAEbh!OO(a6WF$3Cbo1adt)w4`&sA%!-0E zA3up1$CAY0Ge*%|Ww#>q?-;z6jQRXG2q>(~jB~L}P4uC7i=byu)CJO2>dMC`u2y6O zP^QuY=R12~yVJeP!adja`wUwcZhx2|4m((4Z`^;z4OXRJ_IKY~kl89hMR#g?r7;8w zAIi1}nD=~F_3VlK#uC{522pmbNQeZ=07b_DM%xJ0pVg~`7`H{A;J1Eh+0z;rWQW7Z z8r)6tEI9P3xQ}+ot>5Vzz2i#XHLeg?6?ISWazL46*cmY&Z7Z;$Z?MmI!+3Bj3)-3B zoEq)!-SXo$^>;IGCUN6sNc}GzLE3<3wj9w~3X3jmiELOl`8urMG`Fw7EN;ybBga|U zU>TadZ)TkZrVCe>i%C2CSfE_|svVYb?KNdLEEs9YQX2Dnnq+$lqRxtwkDvr1&_JMH%V`AQ*a|O|v^yh(h0R09elMh0& zIO}rSKnm`(S=|cg}q^d+RuQ3 zHp#DS6`Nxw4|oWTQTn@U{BT`F{H7_zpJ!_UbGq$Z5%|F=%ciU%#ZX&Yj7xts`yb?3J0xa8z_$OhgaC!fgd5j{--Q@Wsr91v3;44U~0dMAM*A_ zB*-n@0lO(;1xh#4vv@x>=KuZ8||!0#)?yIdDyd92{Y_Rlx4dTOur#8+_;$GeeZBBQBO*@>j{pB zH57a~ORNYSW*4adH?xZ(CKq2zDZKwEYt7Yvrb)~z?lJu&hjH~iIqiPjDoa)U4zCC4 zd-;WZEy9P4+`1W97j{(^B+pSvVkD%H0GQh#NQ_ME#grr>0JtOF00g}hHRar%`z!@a z0D>2T-U~yE zO73>X<2H@wLBBy_#G8N1wv?(#uAq`e35FU!uOhm$A!E>|suA|`8QNq$3Vv$Tg<{04 z=QfsH5HdvoF_nxeS@&w#n~5W#B@K>1+K)m;va-VC6h;}t9VL#@95Es5ht!(<+P<7q z+X2&Q=>7;BB^<&*wu(&Gl$k;yx!3bHtd{ibn>=|sxezCzem=7ls>66pT{o|Wj`Ct|PRn!XYGZQ{n z1)pa2#7TIkQ~OT+brkIJpoKuHXgbge9S9j)^^>c3ups1>vpmtbiTYU>i9AtZ?5iT` zlx%QKwI|l-ie}YJRLRvm#FeETER+<>+Ru16?Fho>C5 z=tm|wjJ%uNOIxyo#*<%-_k!nJ+h?Q4bxgW6;4_0u{DOq}yGB2#q)1D7 zE^Bw(MzTp4%88s}*@mJj6SmI}rqKo*k=S2H#q*3IL-J1OUz#OpgfXT)g_UpWu#Wc3 zzqFzZGC>3ALb@A@2Pb_F}#C diff --git a/apps/speedalt/screen3.png b/apps/speedalt/screen3.png index 608612441cb793dc4d06fc258c37b617468d5e2d..9e061958e7e1e60aac01b75f1687c33c70f378af 100644 GIT binary patch literal 4193 zcmd^DXH=6*w+=6XyfjTfkP^CxB8W;0A#@}NN>M@)g@}jb2x=%Ip%WW|1P&bI5v2+o z1Oh=KO`^Uw6pj)QLKpMV4G7XZ+y4YxdeRDekU#8A)YH z7z`$J!pY&ZaQ*e~0g4M}E5eT~7z}yfgoCXo)&FO1N5^!Xj3bLY|A*{3JLeNE2X%BB zZsDl=TbeVq4;@0Sf_6#Qa3ctA7Cba*A)_a{O0$9MtKhDd?|bP0{nk?~9{9QjZw$>t&e4mLy=?-GHN#5LLR8WIf%Q(ygFV0i=9wg*33nX6YKz3c&5~_2(vt{7Ztt^zoycEx z|B~i?PowA#yHDg4&-ap7JWZVuo_R{r8S`hwRKuL2r7CZH%i_Xtfc)CJeg>rxN6-9g zMY>b^dMvGIbnD33!@s0^OC`{60*!l>-eFobHls@-M;G~vLP~^0Iea1d1I)@yt z==n1Lg~)T}`xbn>Lx%Yu{jCFiAKg^L?pA(-x#@9_%m*L3QD6Cec!TY7BmQ1yk{VGA z<+(j#1wXgaO|}%pznR9x9a8cU@2}Y(?qe|LRh2TV+ESbgc_3NJsuEP5O;G6FPcKDX zTyirx+S$)#F|t~KU$ZIc)F{;a+o*+3%nWwnk0Cp}D7uz~)3+QG1Vx2Eo1fZz!?#)?FlQgKp0XGx z0Tw`3g)Crx5lxTjCfpfW)@Y7-K+*0-W`O#YEzTaQjxm=X1T2pdZfEFDZ1tC)d(C5K zMJgm`a{RujrF6oFG!D`~0n_rfWn+pL|E_BqiH$Cs(iU)1EjvX+P8HREF6!Y97lRx` zv9Y#jbuDTDTaxY+T{Qpnlj%sK*+%Xs|8}-Ycg;A)-bHNN6y3`AMjtClC)l4kxOaB< z+lnQ2q;EvaL&JMH4@@or`L-U9vP63Or@7dYJA`@1!S}pX$F9*IWXCN9bAylvQn(w1 z(mRtU-Pl^)dM1~{yt_}E7~WnxX)r`R6k9WPET&oYW!}8>WsyST=J2ZeOM)1k9qDK? zrLy#h*ZL!mrX{(_ip|%S7Rfl#Sl9u8+UBji`rJ}-WcN+I9Ns3+iqv)9i%6Msj^G^a za1qJ_9dc=`cP8XD!zC>*i69p+72VRt;6>03J{h1SUg%=MP_nTI!o z7Lv^I*w4O}r3-N~V(EunY3N-0y(k_|D3M@}uNwp`G1J!it=_LM6WU*KyCVnGI@NVO z5kCg3#KOh-pOj~2wvl%vt_S>#>M?R=qg;#gkV|8n^_nlRe*Xl~hgsTH|yyVmpj=w$y~n zoAC3|__f!$Tl_4{`&`kkq00u@=XlDN=A`$ENAX0s+83u!Q))*^qNEgtJoy2BG(mV# zzU~no!%cc6|B5fb?Hd2$K_8^yr0ve5oQp&ee z#s=9YzBt~CuFaZ}FN+$%hGwCAT2dmq-kh;352s!%Gx;(ag+FQd*W?n2KIMsVQ^jd| zu8{-a%aQW5c+LZ6+aAn_sD5ppQZzfi{x9hpp$7n|_9yjEMOouV5494`)jqhJGm}=i z9C%$F;L1w(vUUxfoCGhV&+)KN!W%8NPg-}q1esYfi~m_Cum>tUA{KL?6LzLm5__cj zwQrTN)>h+tUIk$7&$+gp=D@bc%2`Ncph*wt=-vhtjb4D&e~h|BawiXaO<>>Y6q&-? z3UUD|XNgE_l!g#Es?nxP6m-ebz$1=ZzqvYDR> zJ@<#(OgO@?15?%KQDB7Jz&6sJ*lJvsA&2yMWE7U@$Z zS+c7_nI-DNIN@~#%sGxdn*JXT4*S9nFjCO%jVM|!gw^-HeL9&y@1d2n?yC^;)5=xE z|Hp%ttoi*`hh39{cOh4zpqeCe-u@G~Elds&h zj_TE<0gcMUk~=aTZ<+vE9dNcjx+Q903r>r(tkFeZ2rE>u8(Of08J;9w>i4mXT0lIr;gf3g-9q zu762L&SL*wfc)jlmkW$`!>`k~mjWY`fHR6}yl5Z%hq6rzBU^rlC&;R}x$o97$`4#| zw-#Y0w@;%w5_>CBU?WlJT7ON=)eymmB0GZ9xw02tVtwqMeiwqywO1JtWG|5Edav3| z^@!Wkws(_d3j=2v6fz0KS(v;{h-|O2i&V1{`B#sDUQgRJ5)&MAE24`wkSxH(0X6>^ z=yBVmJ9jV_u61H|0~BGyM47Rwt=CP0e)>6y{O|XCg;hcQd9O`JmlA5eZAw+x;(&d} z+z@WsjrmO{bh$dHS>*%PG|`JWO?5;22d~e)+gBagOG=IjaU$VDnCuI4-8rfmnu(^g zLMV^6uxr8WdG;LcSyeN1HtITuoN<^J59UZRr5{KBLH_VqvS z1G5M})n=pO?`{92PpqYW@_QY%mDxGH9hEk3QDH0*$6-7{2&n$oabwvri}qw|R}=>~ zH)P&A%UnNAoMrPTe@;w_x1~pY{`lu>`~i4E={Y4rzGR%qXOw6(r?6%u{^mVMNgJQ$ z1iYK2Sq7|8;lK7g8%Br&u~?|T9FC;+C~lFPTz#5W`0w2&WFSjNL{hqv(?b+>9ch8#V>Ke38pZ7 zwDpu8coV8qR{}S0|G6^7{0Yulab*P2<8`&$A2TTPTGb4HdL&DJRiNPI*Xhfbte?rV zFsr^IiRx``c`ivi_3-39Wbdt(WyE?0{y46)@9V}DUMtm``#cYA9fIn0nU1pr27F$v ziw|k1A{*~PWbP}K40e5|0O6k(AAGegEOAH=ZnfB@HQ%Qm7FP}lDOw3r@%*{>E$F&e zqR)>tPs}h1lB0NLd1rO3yKyM>bv2adrTxiQw7V+;@Wjk&{L^57qT`omlwtQ%>_tCo zW?^)H-HgWo(&zGopV+Ink^5J`xyj}6ZcE)&XBwH}Fq<&DezA$Pl3yFpNJCKfaiY`3RoZ6GG2>#KiQ)tk78Knh1nB#S3U|km8k3G zDM(c`dPXjuZ&v;A;>FU-XZqGh^vQaFUp}5?^?rVQ*_T2OG2b{5g2WU&R*2RXt7}$a zkWi};%{*@l@4&K+sz9xI^``Y;T2b*l7`aqO-8Z=WLU)LljRFF`rL({PNEpZvra955 z(zzt{zUu7BzzS#}L0Eym*EfJ^Q0ZS;1bxEbMgBCkTO}_t9^`BrEY^FK1spBA!c8w7 zZ+R61FJ@&57`Bc`s;&q;f&9H}T@#L6)ub1vMakOmqn2~a)$L$3^{-B?|3hJ1Z2RMP zmdECr;YvaIqaI7+yX)=%xY^!(y4wQm6&t#0JWDU1Vb5FVQRw9JDE?3ulCHpC^w$9u_lzD^0>SMVw$`ftO+@&Qh(DVug_hUP;a z(p2$utrl}}U?9Nt$odXG=w&)I2;F%W)Z$pcg2F zJAPS3krrV5_x+fEYY8Za%Ql!s?~SS%d!_&oO?lgq7)$B8m|CPVkRV#2RldQjM)f+U zMvA~4-{wh}^_#tz<67-$aw8_l9U|snv>ro~j%bOv&pqpxmNt#5WB$zhY0sbT)Aomn z2pemyPzV#|U@F3bDtZSAJ2-AhI4LI`e*z%_r4z6 zB38TrjO%_^{yK$VVt6jeMnhynCJmzXno9yl;p1ZIEjQ0-z(jer0Ae&1SOq;vz>x zgoK2|9ZuVx+l~A`4Z3gFo4bF@-OYD9*jinP$MK5Xvc`)=KX=bb6%C%dR{>sWalarmOoE^M4!{hOaceZCOpq9+zpe}U2hVWPnj02#( z>XuCXJ&@QjvvX-efWcmP#2F#*m~r;N@f2pS5ag(oWk6S-atu^a&p>ET7Xwqd&Yg;s{QVFvL_0 zR2FduI;K@C3hp$uMjx&nQ|&E&#Tzh6he@$lUz0f2X3q-;T}BqehyT%^Ckv8Lfvw|9 zii8<7oLKE+08rlx;Ejz>=!bx3P-ilStC-z=n^_!$4lhE)*M%5#DD%ZCHePAZQ#UsPn&mE82qSbUj_Qz0YDwmDY>#oC8D?3`7zKd`Wmir3FNu)Q5h1J8g)E zWi$~6phCwg8_=+jnDr}YkY#FO*SKaUqsD(3E`ozJ<{LAZh01Bn!jsaqX3!9%E}*q< z=8Ghx@zT>Kn3|!jxZ&1{fZf=V$px6N~22}M64AuwG$9cSw}&ILbv*@ zw`zI-;Z#N5`3;tcO)(SI6KH%STB$GJcoDWa=P&DkQrVIoLP&t67o?~~yKSD!t3t@L zFJWUl)%DgmNVT98GiCs&MeJmxwFBU6gXdC;V=fGEQdjY+cO36l<8#UtYpj*R9?rb; z_@l@zAVF>2BMK1w5MdkvlNx2fq}9HY+`+{tV3aNa@~|x#CzTd{AnZs#0dIxWu${mZkl|Xzsm8NOi`T@Y zMD$GXr2cf0=Yr0nSb~K0NE2gej@uq$==w0|fxI7`8}L>#)ME@&WO6kcLV?8EfB2^@ zMdM@d2ZQxGn_g57seK2{g>D@rrd>fJ>pb+nNyUY3mNn1o$;p^1)(F3{&rnN?X$+|U ztc%a)BH{6F8^lWf<8Z&?bwJS#zP*02o~|PB-zH8nmX4 zvmV1FAnfh_iUQ4N?~vB7X{>{5uzQpb@0(PdI{btSDb=~1=S0kua$*B$eX<{S+|SdS zGpCn2DY-AkL&X8Pn9G;3tb+|UBwTooO}b6dd%TV-k8tupPlsa7o;h|PJ%0U^&6Ju7 zF)I8<4p!z@7V}0qa)xe_PF+m!{#Thm;ppw4y8<)ti^g@fjF#6m&d>oqqDM)Ww=F|b zFf?o1Ik9)Yv2}ooWu+B|_ld2us8|!Chrqu6_P#=TF>Bm~5Itu1z;E$v2IhAs-^9#m zaCy#Z==&^Ky6W6#6FOw7RD*D%o*fAs{2qMa`+%Oe>iN8plO}+ip}kgqESA1;xBz9C zQTS%yv5|Nd(>{|eQhLmTN4B4F5ibckVfggLPzbBg@uek!yfX$EAXaRr#@JS zh11mUBT{ats*$ZuVRX~kp6M6)$)TL}46QylO@n9e&OOSE`AZ=cu`H(bSqAd`f2L$a zR?d_J)!BqXTWt;n`MOW8r73mj0Jp;G-IuuKWcRH4E6zR) zK}+zD`An|$WJ$T-e!C)1NJ89qCmIwtoOUSwiMsOQ+g`$q-nGLK!07cinM~z{RfEgy z1K&S3s_(6uftQly#8=$26?9~8kShYn{@Jl( zU@`9o0c<;cbY=P2Cxv@&97{Q(W<<%}-~JhR+7t|SIg5&w1>+=5Z#0#(8t7jml=~xG zCfP6gOL~8DRMq(1of-ae9+L%1!RF5Jc;Aj3=qF){M%0x^Omjz=?Wm%^@>MwAHG_*2 zo7gXobd|mKM6fgb*c1$nKnMdQgym%0x|I?9t5OQnuL&y#wm}v7xGhCF==EJl$5;C% z69<9E)5v$kAuUkFh(kIuHUYW-wAIt1dmrEjxepAtmoNO3B)?t>PR%v57c4w_a}lbo z%0D;B@c($a({xU@8MiK4?Ae?#|GY^eWd9y%u!4z9@CLGRJC57l1wrOA8%lcmmu#Wg5jJ;W8tM9#A%$fmXMPbV zSnRCxD(}Y(r_PeK1oMt}UirZB=AEbN=MhaFUaXZ|damKH8F9FH7-#3LAq9kg>RNRO z(XII+LtGZ0CZd6GibxVWcH>+A>%h6Bp~8DP$^$t402}QEiFZHSL!pO{C*}d5~F{R0jJA( zRn1ve3+s!WRh&~3XnX}nNl;ZVj}GkooR%*VhxQ^|AVLb~)0w=FMM%EizOpr%%f!em zfnxoPRN>859;mf)9^%3@O_8+7x5jCnu5Bv%6SRp%gWY}6vO=WRLaUAl)(#DZQ5PT; zTYgHT1&^k=nhw35z};UPT0U%K!~Te;PMor+eLii}xN`F6{WzBQn{lLS>$sIAQFK&` z&k3GfwADG^_Y1##b3cQzkn8iTmO4xT6q56{DJ^Q`uBI=(Bd6R6&wA)SGb22{Lqlwf z{D$L{FQY$)u;j1o(1QL9F&DHk z*r7a2R$RyM=*OXKt5fC-GN9F59ebBQF<}B;%2Ib%*}dZ(jyT`bhbcz%wx4sC1fUNd pv-1z<2?1U6T7Sd;6IuAW646s=zxLsj-PcaY!Oq3D+B)FZe*^OBT+#pl From 0ec401588afe6e5a3b09e433ec6b7a2ec1575f76 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 13:19:03 +1300 Subject: [PATCH 77/91] Delete screen1.png --- apps/speedalt/screen1.png | Bin 4324 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/speedalt/screen1.png diff --git a/apps/speedalt/screen1.png b/apps/speedalt/screen1.png deleted file mode 100644 index eac5e7e7aa7be41cd9bb0d3d478d3a312f936960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 zcmd^D`8U+<`ybP&k!>cFC7!V-OEI#IL6#Y^lAIx>~7@8{3>e15pE`<&M~*STNkx~|u`@7GPbVuR&BE`A&Y0`Xgz zn_fNKS^vMFM-QWc!*Uh~1go?#y=Wilu~slyx6lMPa&q_+0zLlvxz3HmIhgQWLwk9q ze|Pn(Pw~GY;?`0QKYJm=X&+;tSz+a#9Wk8UUiQI;AOtb|kai9_RU25w2XsOa=c_?L z4+PeN+c1{|L#+gjiq*Lwx3B46O$32I9)bB=fdGk98K0!%Y1<%(xRB9oPq%FNVH)~> zDJ`BB-06Aj_s(CfWiaPnk}b?!8bKmLF3t*1sel1}uq(k6-YmQ~({=p~^mE+f3?ah5 zU#b=sH;SeOZfWe+J!nB+Iypn3x?U_#eWGuSTz#{zOvZh82zQIIj+8? zgSSAQsmxvm`w46Fme^N~e?dB%>pIrD)}0HOp^*JHZYhTN+ENfhXX_hoEAT3f;$q|} z$-e`1O?!QCx8y@2E>aMflz_r#gRjL8F2r)TN$xKHU7Gu-yQUk(sxtPy_(@ph`g;|D z%qd@uDO@Mqkr`G!rQ(@a6Z)w`v7-G5U8O|C+i|06<^2t>K_AW7qXPn*-A&47pdu@I z&P6&ZMI^WRu8CY{F0;pdcm1p1TDv2-=4^pTNyU{B-AZTEt%41YsQ{*9Y#Y011s)at zIwG+pFR_t_K2IS;Om-%CYAIXZ8g!=6M7k#=y}5;~aWy?RG}c<;R6DI~CZ6Wt0s-Ze z2ISjIYB|Pq{e(7+VOIWUqKl#O3kX?lSS2YBeChhjar2+mIteJ`!#y8%(RQXKXKN&r zT~2EgR*)#M*Ie6i-}B!p3_p%vs-06{CrkGc7yizS%%vsXFY=yonSIC5SMf7n9h9xd zGp#EFi?-jXxc{}-ZaT|0CM36Ce~#viSro}W;cN0ZDOOi`zo94Q)SWwBfjtHDHX?g= zfPOclZn!9h`i4Gb7p}(G%jK&wu9m9Fv_tyl(n{wdliS^%qlr)DnRU12D$aNYuli4Y zK7pAFSooBht5$0-e7Uatf~*%h3{89&eM55bTJ{s|_1ob)+jk?StrStkfYaVJxoxq9`b4|T5D=kqSyS&>D9?uwsb__r@fh9ay|K~^7swn-DN?FxZrh2(WJ;E&uVu6$7>AdFw1)852+p~H5gr^5r#I# z-rv-8lJlU~zpdXrkC_$SdO5BDAWaWJ%+y($2o9YJZz;LD@iY*i$Q^=?t2$&U1>Bu7p>X0}dcayhKT^N@qF3&UdeRns*+v%or=6InG)4VC9mu2y(k;sUv9L zZ@O7yXPL^1HnZ>hg{wtG&P+^=>?zlovGcMk*_pXQI+fu3Dxqw}(&weR_QmhV@EAss zpc50P3m{)!X}~Ne~>vkNSG@5Hke%io81rx@poYZS)H+*rC zYg~Y#y@pVTPw9>Bp%V%zHysUJqV-p9)ERj}q;@_3Ipe}lOcdH{Otg|Jl1Rb}WDI+R zrY!mN=TFy;zf#3;kk_yzc*{#SJ{*O+@AjwFUwr;o6Me%htZ&zff@_LbQ`Id~S22az z6+&+Qu3Gt5G?M$ERq^)fH*$oL;&&X$B2#{>+*g8-B8xAtcCDm+HT@$xGEXBzNpJBv zQ)qr*`unD$ujb5|%3SN*Ts)>|Bw8c%9W$M-EWyVqzq^;y?#D1Qce67g`Shs{8!-`w=-|#ttVXGs*nBPWjW&NmV zPp7$F?VFcLlP|At-H;)=WL9c-ioCLDd`yk$7`odq28SD6MLKLpiGLM<4nJjVU^fyX+2bEpU$_UB#vLF{=)mE&?qRyW#zRqgVPeX zxI7%75XZl>juDI^g09j%eC`@z?)a2Ud+zE4t41un=P8(0imP4<61CQA)6Vu4tn7_k zsYBg_6b)N2d`HUai6#NNSJZpl9!(QuL%g*K`KFJ$*3-(yO%_FigCdsFX(ac>pc6_7 z)A{E8afvI8iPa$~;8E+qB;xAcw8SCyWQDQ6I`kLtNbmh5qLkI9ZF8c@XCQKgLX?E* zJWrqw0#qJWwq@ka`!q$G)WbHD?NuH^_BVO{tx+FQ%I=mJw>wz z9>G33GPhCxv^_4^LvkTzF^M)IV7(`bUt%*P%}5LPX-CxculUWBqXme&I6uIXm~y_4 zjFWq!wiya0zUSBaF)dX%17DZ1))a(vz}_6u=B%%7?=ET5rPgEjr8p_|q)|Qb&PUV& zn!uxHqX}U<|nM<=Oh*1S+bq28_k#wzaD3ux`ZI_Fj+f=@@WNh9-O}I-k)!J3J z^oUu927A6A45aFTCHiD*1)Q-q(+eUq0P5t$FCKq7YXMSv2-XH#Rk?Pul-m7c?5XRl zheGKNs;-~WmP5F6I%61fw=nNROXGGYXYK8ApnCeMKEtin#yY@k)hAS>;z*4cr>UNu zz68H201diEu(sz1D#PX*5U80`>BSui0q^ z_iir6en^&4xlhACSNIO?4Ip@pR`ft z8$0LW0Jcnvh#v@S$=+zF!wh~Mr)d4-x2CAI@rbQ*yeg=vN(kqpZ&_8TP?zLO3UFcf zS^rvS7vyfzbnW4x>M@l4E?Y4zR!Ir8%Z_%<>B{{lYu0brbm# zb;zvdo79Ce_S=VV-=*W_Ya5O!eYwmpJ(ye9xt?b6M-Lnb%t)Zxz8X|F>lH2XbhRFQ z=6uX9vc)5cPwYjXb&+rehkFEv>(fzGxkXNq6Z7)i;0_1YB0RRQb_N}rUMtDpp~uku z%kqyD;IzgxSnIQq1DgOfd4&JaR6LL5_IPFZ;`_BuL9PwF*8o;51$6R0^0p`(zz_6x zW!14|SmuCVbVB+RwLTci4z!I3Gn=gg6XkMZ1vZ<+!NfjwK|m-95xO6BTaHI5&SkE7 zrjxw4!k*c$JRr~m5~E)dQs)d^XO#&J+$sHTsw@|VlK~2PkJc&>O{LkAP`tk^JRqYa z%D}(9ysN)ai>2{+cx0j-+x@tW*R(1axXg^xyXA>BlPB*dHB#hIOW&3=UBaYPYaI&O zViFiGS%qQw@}+*$y~l55v*T9^@eT!IH$A!~+Bs5Tn2e7ML5~~)V@iK8E>Rcy%h7DD zG^8nHe8nOyAp5P}pCo4PQm*V8d+5twN+A!dDGxd{zq$2BkMTHtTPEWcqV~{ydX4uhX0+(Du^QBFjFTh2C1G!?6y_c`CS(mOx zCl6v(ND~<=&{dcYCsUhr zhK2QgEM{JU{(2rUdJy^m^Q-dYMK8!M!`S}7T7@~cM37RKsgtdEae=(l+46VV^TikL zPGSA-F{!P|^M&{-vBDak;h584Mf;G&v^li961m|*8m;C6nQ^Zsc64K?ExC_w?pe9- z57aOc%D*)y-PvK>BH7`^Bes>xJWNI(H55ao!AXsZUU&eT(de|> z<&+KE()@>@zc5#n^BkwH2duS@db@7blIeTD4+WYi?h_}1nf-0{J@5I7Ul}=HJ{UTc zcBsqhlGP>KLtWY~`cm++@ictp84f}CP}=sd##g7I2-fu3{#Yq9gc|GM50QWM*+DYb z4w+eaY9MDE=6neRJegAvg@p2a=Qgm>Tp{TZ8HAW%>NRrJQ9vF7i{$aWYvd&W=mB)* zze|tYiCLjw`ZAwm&_xj7_Lw9m&B{GAU1G3E_^`o75QZ1fR)#JM!;NOSBF~Ag=`(;7 zy;$7X2y=hb(+m@ElN0p0DVtM`0_0(?#ZZ+@YHzrYNt<@%nl>IZZ@L(}1GdDIM|P@E zWw-;wnSh9af!2(Q40dw4Fl}0KVu!x-XcyUPu=n{W@J#L9I_HTvBdRtvmfXPjKFM>M zI{-~;+-R7u!gozeZ~}f35=KVdC$ST_4{1IN_qH!Zwvr8jb`rfvoA|qeRKF4n-^2Pe z!6R8#2b8!5@4(&w=G!){^Mn|M;ut@D`tF~_nL3+MezPBzUros<04^$zJgjE3q5Wyf zWxd0DJ?b`RB6cg5 z|MBMhzAJbXKQyu@dvjTt^}TSsjoj$@pL&#U9zH$3yL`#!|J|HXEPE+K$XTzis<>fo zsePWX6tLxe8lr_LHU!|2_d+wlkd6~cynMD$qvBK$_{np{^N=|ROlRn!2;vF`1Plxd ziGp!p=xM)q$6;pvh@{dTTy3APrNDr{Nw{fdCCK^xA_W8Z7D1OY4|8#v6%oLDWnxdqLmwAVLbH gmH#Vf& Date: Fri, 29 Jan 2021 13:19:37 +1300 Subject: [PATCH 78/91] Add files via upload --- apps/speedalt/screen1.png | Bin 0 -> 4324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/speedalt/screen1.png diff --git a/apps/speedalt/screen1.png b/apps/speedalt/screen1.png new file mode 100644 index 0000000000000000000000000000000000000000..eac5e7e7aa7be41cd9bb0d3d478d3a312f936960 GIT binary patch literal 4324 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 gmH#Vf& Date: Fri, 29 Jan 2021 13:24:19 +1300 Subject: [PATCH 79/91] Update README.md --- apps/speedalt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index cf42eb42d..7e2b628ef 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -6,7 +6,7 @@ BTN3 : Short press < 2 secs toggles the displays between showing the current spe BTN3 : Long press > 2 secs resets the recorded maximum values. -App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration on/off can be used to indicate when a fix is lost or gained. +App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration can be used to indicate when a fix is lost or gained. One buzz for a lost fix and a double buzz when a fix is found. From e33714cee25a4b56a0b165247402c299ad0fae37 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 13:55:06 +1300 Subject: [PATCH 80/91] Tweaks to vibration settings. --- apps/speedalt/app.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index cf542e5c6..33b5390f3 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,6 +1,6 @@ /* Speed and Altitude [speedalt] -Ver : 0.05 +Ver : 0.06 Mike Bennett mike[at]kereru.com */ @@ -231,8 +231,7 @@ function onGPS(fix) { function doBuzz(hasFix) { // nothing to do - if ( lastBuzz === hasFix ) { - print('Buzz : no change'); + if ( lastBuzz === hasFix || !settings.buzz ) { return; } @@ -241,7 +240,7 @@ function doBuzz(hasFix) { if ( dbg ) print('Fix'); lastBuzz = 1; Bangle.buzz(); - timerBuzz2 = setInterval(doBuzz2, 500); // Trigger a second buzz + timerBuzz2 = setInterval(doBuzz2, 600); // Trigger a second buzz return; } From 0ca1836bdc2fee7e2786a217064461ed81976fad Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 13:56:05 +1300 Subject: [PATCH 81/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 9c92371ae..ff4a5307a 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.05", + "version":"0.06", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From 7d84f6344856ad21515a88800b652323e0644b71 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 13:57:07 +1300 Subject: [PATCH 82/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index 3b12d6f2e..516eb6ff6 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -3,3 +3,4 @@ 0.03 : Enable screen off. 0.04 : Vibrate once on no fix, twice on fix. 0.05 : Add setting to turn vibrate on/off. +0.06 : Tweaks to vibration settings. From b18773a3c51e02eb8ab66a1dff194d225d5fe3dd Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 14:39:04 +1300 Subject: [PATCH 83/91] Update ChangeLog --- apps/speedalt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt/ChangeLog b/apps/speedalt/ChangeLog index 516eb6ff6..258b5051a 100644 --- a/apps/speedalt/ChangeLog +++ b/apps/speedalt/ChangeLog @@ -4,3 +4,4 @@ 0.04 : Vibrate once on no fix, twice on fix. 0.05 : Add setting to turn vibrate on/off. 0.06 : Tweaks to vibration settings. +0.07 : Switch to BTN1 for Max toggle and reset function. From 4f2f00f3e6c78e7a1e54c591961d7640c7157d46 Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 14:39:49 +1300 Subject: [PATCH 84/91] Switch to BTN1 for Max toggle and reset function. --- apps/speedalt/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 7e2b628ef..8d954157c 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -2,9 +2,9 @@ Displays the GPS speed and altitude. One is displayed on the watch face using th Display Tap : Swaps the displays. You can have either speed or altitude on the large primary display. -BTN3 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. +BTN1 : Short press < 2 secs toggles the displays between showing the current speed/alt values or the maximum values recorded. -BTN3 : Long press > 2 secs resets the recorded maximum values. +BTN1 : Long press > 2 secs resets the recorded maximum values. App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration can be used to indicate when a fix is lost or gained. One buzz for a lost fix and a double buzz when a fix is found. From 116744d754f70fa5b39188159868577579949bde Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 14:41:00 +1300 Subject: [PATCH 85/91] Switch to BTN1 for Max toggle and reset function. --- apps/speedalt/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index 33b5390f3..1efd3b98f 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -1,6 +1,6 @@ /* Speed and Altitude [speedalt] -Ver : 0.06 +Ver : 0.07 Mike Bennett mike[at]kereru.com */ @@ -279,8 +279,8 @@ function setButtons(){ setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); // Switch between fix and max display on short press or reset max values on long press - setWatch(maxPressed, BTN3,{repeat:true,edge:"rising"}); - setWatch(maxReleased, BTN3,{repeat:true,edge:"falling"}); + setWatch(maxPressed, BTN1,{repeat:true,edge:"rising"}); + setWatch(maxReleased, BTN1,{repeat:true,edge:"falling"}); // Touch screen to toggle display setWatch(toggleDisplay, BTN4, {repeat:true,edge:"falling"}); From a5249f692d5f8addb6605df91f295939a00e28ab Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 14:42:14 +1300 Subject: [PATCH 86/91] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index ff4a5307a..8a2b17e58 100644 --- a/apps.json +++ b/apps.json @@ -2610,7 +2610,7 @@ "name": "GPS Speedo and Altimeter", "shortName":"GPS Speed Alt", "icon": "app.png", - "version":"0.06", + "version":"0.07", "description": "GPS speed and altitude display. Designed for easy viewing and use during outdoor activities such as para-gliding, hang-gliding, sailing, cycling etc.", "tags": "tool,outdoors", "type":"app", From 2b0a2177f96d8fc550dcff3a3eefe256d253ea1e Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 14:58:03 +1300 Subject: [PATCH 87/91] Update settings.js --- apps/speedalt/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/settings.js b/apps/speedalt/settings.js index c880e2a1c..21171edee 100644 --- a/apps/speedalt/settings.js +++ b/apps/speedalt/settings.js @@ -1,7 +1,7 @@ (function(back) { let settings = require('Storage').readJSON('speedalt.json',1)||{}; - settings.buzz = settings.buzz||1; + //settings.buzz = settings.buzz||1; function writeSettings() { require('Storage').write('speedalt.json',settings); From 3586dade44d685f21195bfdd4c05fb21dfcbc1ce Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 15:11:44 +1300 Subject: [PATCH 88/91] Update app.js --- apps/speedalt/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/app.js b/apps/speedalt/app.js index 1efd3b98f..7ccb20935 100644 --- a/apps/speedalt/app.js +++ b/apps/speedalt/app.js @@ -342,7 +342,7 @@ settings.spd_unit = settings.spd_unit||''; // Displayed speed unit settings.alt = settings.alt||0.3048;// Multiplier for altitude unit conversions. settings.alt_unit = settings.alt_unit||'feet'; // Displayed altitude units settings.colour = settings.colour||0; // Colour scheme. -settings.buzz = settings.buzz||1; // Buzz when fix lost or gained. +settings.buzz = settings.buzz||0; // Buzz when fix lost or gained. /* Colour Pallet Idx From a89dbdd403653d8e13544d2858765033e5a3cddd Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 15:19:14 +1300 Subject: [PATCH 89/91] Update README.md --- apps/speedalt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 8d954157c..21711f56c 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -8,7 +8,7 @@ BTN1 : Long press > 2 secs resets the recorded maximum values. App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration can be used to indicate when a fix is lost or gained. One buzz for a lost fix and a double buzz when a fix is found. - +(screen1.png) From 14b214d549e4a15b6dc250b8c26027b1e67da6ba Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 15:20:36 +1300 Subject: [PATCH 90/91] Update README.md --- apps/speedalt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index 21711f56c..c4bb5afd4 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -8,7 +8,7 @@ BTN1 : Long press > 2 secs resets the recorded maximum values. App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration can be used to indicate when a fix is lost or gained. One buzz for a lost fix and a double buzz when a fix is found. -(screen1.png) +![](screen1.png) From 9ccd0a1fbac454cd68121e6e9d272336476da22c Mon Sep 17 00:00:00 2001 From: nujw Date: Fri, 29 Jan 2021 15:21:29 +1300 Subject: [PATCH 91/91] Update README.md --- apps/speedalt/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/speedalt/README.md b/apps/speedalt/README.md index c4bb5afd4..e1d00653e 100644 --- a/apps/speedalt/README.md +++ b/apps/speedalt/README.md @@ -9,9 +9,9 @@ BTN1 : Long press > 2 secs resets the recorded maximum values. App Settings : Select the desired display units. Speed can be as per the default locale, kph, knots, mph or m/s. Altitude can be feet or metres. Select one of three colour schemes. Colours, high contrast (all white on black) or night ( all red on black ). Vibration can be used to indicate when a fix is lost or gained. One buzz for a lost fix and a double buzz when a fix is found. ![](screen1.png) - - - +![](screen2.png) +![](screen3.png) +![](screen4.png) Developed for my use in sailing, cycling and motorcycling. If you find this software useful or have feedback drop me a line mike[at]kereru.com. Enjoy!