From fbd93f0915c5b9915823367dde4308661bbe3d8c Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 21:45:10 +0800 Subject: [PATCH 01/10] Update gpssetup.js adding in support for BangleJS2 emulating the PSMOO with timeouts --- apps/gpssetup/gpssetup.js | 130 ++++++++++++++++++++++++++------------ 1 file changed, 90 insertions(+), 40 deletions(-) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index f8fed68ff5..79b1b91b03 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -1,5 +1,5 @@ const SETTINGS_FILE = "gpssetup.settings.json"; - +const BANGLE_VER = process.env.HWVERSION; //BangleJS2 support function log_debug(o) { //let timestamp = new Date().getTime(); //console.log(timestamp + " : " + o); @@ -106,49 +106,94 @@ function delay(ms) { function setupSuperE() { log_debug("setupGPS() Super-E"); - return Promise.resolve().then(function() { - UBX_CFG_RESET(); - return delay(100); - }).then(function() { - UBX_CFG_PMS(); - return delay(20); - }).then(function() { - UBX_CFG_SAVE(); - return delay(20); - }).then(function() { - log_debug("Powering GPS Off"); - /* - * must be part of the promise chain to ensure that - * setup does not return and powerOff before config functions - * have run - */ - return delay(20); - }); + switch(BANGLE_VER){ + case(1): + return Promise.resolve().then(function() { + UBX_CFG_RESET(); + return delay(100); + }).then(function() { + UBX_CFG_PMS(); + return delay(20); + }).then(function() { + UBX_CFG_SAVE(); + return delay(20); + }).then(function() { + log_debug("Powering GPS Off"); + /* + * must be part of the promise chain to ensure that + * setup does not return and powerOff before config functions + * have run + */ + return delay(20); + }); + case(2): + //nothing more to do. + return; + break; + } + } function setupPSMOO(settings) { log_debug("setupGPS() PSMOO"); - return Promise.resolve().then(function() { - UBX_CFG_RESET(); - return delay(100); - }).then(function() { - UBX_CFG_PM2(settings.update, settings.search); - return delay(20); - }).then(function() { - UBX_CFG_RXM(); - return delay(20); - }).then(function() { - UBX_CFG_SAVE(); - return delay(20); - }).then(function() { - log_debug("Powering GPS Off"); - /* - * must be part of the promise chain to ensure that - * setup does not return and powerOff before config functions - * have run - */ - return delay(20); - }); + switch(BANGLE_VER){ + case(1): + return Promise.resolve().then(function() { + UBX_CFG_RESET(); + return delay(100); + }).then(function() { + UBX_CFG_PM2(settings.update, settings.search); + return delay(20); + }).then(function() { + UBX_CFG_RXM(); + return delay(20); + }).then(function() { + UBX_CFG_SAVE(); + return delay(20); + }).then(function() { + log_debug("Powering GPS Off"); + /* + * must be part of the promise chain to ensure that + * setup does not return and powerOff before config functions + * have run + */ + return delay(20); + }); + case(2): + let gpsTimeout = null; + let gpsActive = false; + let fix = 0; + function cb(f){ + if(parseInt(f.fix) === 1){ + fix++; + if(fix >= settings.fix_req){ + fix = 0; + turnOffGPS(); + } + } + } + function turnOffGPS() { + if (!gpsActive) return; + gpsActive = false; + clearTimeout(gpsTimeout); + Bangle.setGPSPower(0,settings.appName); + Bangle.removeListener('GPS', cb); // cleaning it up + gpsTimeout = setTimeout(() => { + turnOnGPS(); + }, settings.update * 1000); + } + function turnOnGPS(){ + if (gpsActive) return; + if(!Bangle.isGPSOn()) Bangle.setGPSPower(1,settings.appName); + Bangle.on('GPS',cb); + gpsActive = true; + gpsTimeout = setTimeout(() => { + turnOffGPS(); + }, settings.search * 1000); + } + turnOnGPS(); + break; + } } /** Set GPS power mode (assumes GPS on), returns a promise. @@ -165,12 +210,17 @@ exports.setPowerMode = function(options) { if (options) { if (options.update) settings.update = options.update; if (options.search) settings.search = options.search; + if (options.fix_req) settings.fix_req = options.fix_req; if (options.power_mode) settings.power_mode = options.power_mode; + if (options.appName) settings.appName = options.appName; } settings.update = settings.update||120; settings.search = settings.search||5; + settings.fix_req = settings.fix_req||1; //default to just one fix and will turn off settings.power_mode = settings.power_mode||"SuperE"; + settings.appName = settings.appName || "gpssetup"; if (options) require("Storage").write(SETTINGS_FILE, settings); + if(!Bangle.isGPSOn()) Bangle.setGPSPower(1,settings.appName); //always know its on - no point calling this otherwise!!! if (settings.power_mode === "PSMOO") { return setupPSMOO(settings); } else { From 1e9d1a7ad0b5fa92229a5623c05d4c044bedde45 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 21:52:26 +0800 Subject: [PATCH 02/10] Update app.js Added fix_req to settings --- apps/gpssetup/app.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/gpssetup/app.js b/apps/gpssetup/app.js index e0d188af56..966000681b 100644 --- a/apps/gpssetup/app.js +++ b/apps/gpssetup/app.js @@ -34,6 +34,7 @@ function loadSettings() { settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; settings.update = settings.update||120; settings.search = settings.search||5; + settings.fix_req = settings.fix_req||1; settings.power_mode = settings.power_mode||"SuperE"; log_debug(settings); } @@ -85,6 +86,16 @@ function showMainMenu() { settings.search = v; updateSettings(); } + }, + 'Fix Req (#)': { + value: settings.fix_req, + min: 1, + max: 100, + step: 1, + onchange: v => { + settings.fix_req = v; + updateSettings(); + } } }; From 4550bbcaa290506c0eb61e27211a58ab4133e963 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 21:53:12 +0800 Subject: [PATCH 03/10] Update metadata.json added BANGLEJS2 to support --- apps/gpssetup/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/gpssetup/metadata.json b/apps/gpssetup/metadata.json index b8b6dfc238..15a7c1cf2b 100644 --- a/apps/gpssetup/metadata.json +++ b/apps/gpssetup/metadata.json @@ -6,7 +6,7 @@ "description": "Configure the GPS power options and store them in the GPS nvram", "icon": "gpssetup.png", "tags": "gps,tools,outdoors", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"gpssetup","url":"gpssetup.js"}, From c6a639a0749752aa943277993d4dfa4855dedcd4 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 21:54:33 +0800 Subject: [PATCH 04/10] Update ChangeLog --- apps/gpssetup/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/gpssetup/ChangeLog b/apps/gpssetup/ChangeLog index e57d53d8ee..6a0c028392 100644 --- a/apps/gpssetup/ChangeLog +++ b/apps/gpssetup/ChangeLog @@ -1,2 +1,3 @@ 0.01: First version of GPS Setup app 0.02: Created gppsetup module +0.03: Added support for Bangle.js2 From c46e3c05ffb18c6d707a44669fa01d2b3330f686 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 21:54:50 +0800 Subject: [PATCH 05/10] Update metadata.json --- apps/gpssetup/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/gpssetup/metadata.json b/apps/gpssetup/metadata.json index 15a7c1cf2b..ffe8d3fd88 100644 --- a/apps/gpssetup/metadata.json +++ b/apps/gpssetup/metadata.json @@ -2,7 +2,7 @@ "id": "gpssetup", "name": "GPS Setup", "shortName": "GPS Setup", - "version": "0.02", + "version": "0.03", "description": "Configure the GPS power options and store them in the GPS nvram", "icon": "gpssetup.png", "tags": "gps,tools,outdoors", From 06ecb5511cee0fe1a218798e28c7c84f9c82736c Mon Sep 17 00:00:00 2001 From: nravanelli Date: Tue, 17 Dec 2024 22:05:04 +0800 Subject: [PATCH 06/10] Update gpssetup.js added breaks --- apps/gpssetup/gpssetup.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index 79b1b91b03..0cbf487075 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -126,10 +126,11 @@ function setupSuperE() { */ return delay(20); }); + break; case(2): //nothing more to do. return; - break; + break; } } @@ -159,6 +160,7 @@ function setupPSMOO(settings) { */ return delay(20); }); + break; case(2): let gpsTimeout = null; let gpsActive = false; @@ -192,7 +194,7 @@ function setupPSMOO(settings) { }, settings.search * 1000); } turnOnGPS(); - break; + break; } } From 5acb348f66b9e354602cb2216fce8f3e02cfd457 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Thu, 19 Dec 2024 04:34:44 +0000 Subject: [PATCH 07/10] update + added comments to readme --- apps/gpssetup/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/gpssetup/README.md b/apps/gpssetup/README.md index 8c9445ec99..f1fa230908 100644 --- a/apps/gpssetup/README.md +++ b/apps/gpssetup/README.md @@ -48,13 +48,17 @@ used. These settings will remain for all apps that use the GPS. the interval the more time the GPS will spend sleeping in low power mode (7mA) between obtaining fixes (35mA). For walking in open country an update once every 60 seconds is adequate to put - you within a 6 digit grid refernce sqaure. + you within a 6 digit grid refernce sqaure. + + **Note:** For the Bangle.js2, the GPS module does not have a PSMOO mode, and thus this is emulated using on/off timeouts specified using the update and search options. - update - the time between two position fix attempts. - search - the time between two acquisition attempts if the receiver is unable to get a position fix. +- fix_req (Bangle.js2 only) - the number of fixes required before the GPS turns off until next search for GPS signal. default is 1. + ## Module A module is provided that'll allow you to set GPS configuration from your own From 6a7e1967da90fd5c2608cb44ff103c9acb31e231 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Thu, 19 Dec 2024 04:41:06 +0000 Subject: [PATCH 08/10] fixes to lexical declaration issue --- apps/gpssetup/gpssetup.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index 0cbf487075..14d916d1ca 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -162,9 +162,9 @@ function setupPSMOO(settings) { }); break; case(2): - let gpsTimeout = null; - let gpsActive = false; - let fix = 0; + var gpsTimeout = null; + var gpsActive = false; + var fix = 0; function cb(f){ if(parseInt(f.fix) === 1){ fix++; From 9761699f4b0464b3cf27b00240c75bdbc45bec30 Mon Sep 17 00:00:00 2001 From: nravanelli Date: Thu, 19 Dec 2024 04:46:09 +0000 Subject: [PATCH 09/10] fixed 'unreachable code' error --- apps/gpssetup/gpssetup.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index 14d916d1ca..f572db7ee8 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -107,7 +107,7 @@ function delay(ms) { function setupSuperE() { log_debug("setupGPS() Super-E"); switch(BANGLE_VER){ - case(1): + case(1): { return Promise.resolve().then(function() { UBX_CFG_RESET(); return delay(100); @@ -127,10 +127,12 @@ function setupSuperE() { return delay(20); }); break; - case(2): + } + case(2):{ //nothing more to do. return; break; + } } } @@ -138,7 +140,7 @@ function setupSuperE() { function setupPSMOO(settings) { log_debug("setupGPS() PSMOO"); switch(BANGLE_VER){ - case(1): + case(1):{ return Promise.resolve().then(function() { UBX_CFG_RESET(); return delay(100); @@ -161,7 +163,8 @@ function setupPSMOO(settings) { return delay(20); }); break; - case(2): + } + case(2): { var gpsTimeout = null; var gpsActive = false; var fix = 0; @@ -195,6 +198,7 @@ function setupPSMOO(settings) { } turnOnGPS(); break; + } } } From ee3df974c4d0c150b6cdf4922ed1fc8bb2e15c3b Mon Sep 17 00:00:00 2001 From: nravanelli Date: Thu, 19 Dec 2024 04:49:18 +0000 Subject: [PATCH 10/10] fix code --- apps/gpssetup/gpssetup.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index f572db7ee8..b56bd50cf3 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -126,12 +126,10 @@ function setupSuperE() { */ return delay(20); }); - break; } case(2):{ //nothing more to do. return; - break; } } @@ -162,7 +160,6 @@ function setupPSMOO(settings) { */ return delay(20); }); - break; } case(2): { var gpsTimeout = null; @@ -212,7 +209,7 @@ require("gpssetup").setPowerMode({power_mode:"SuperE"}) // <-- Super E mode See the README for more information */ exports.setPowerMode = function(options) { - settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; + var settings = require("Storage").readJSON(SETTINGS_FILE,1)||{}; if (options) { if (options.update) settings.update = options.update; if (options.search) settings.search = options.search;