diff --git a/apps/gpssetup/ChangeLog b/apps/gpssetup/ChangeLog index 6a0c02839..f627c37fd 100644 --- a/apps/gpssetup/ChangeLog +++ b/apps/gpssetup/ChangeLog @@ -1,3 +1,4 @@ 0.01: First version of GPS Setup app 0.02: Created gppsetup module 0.03: Added support for Bangle.js2 +0.04: Added adaptive option for PSMOO with Bangle.js2 diff --git a/apps/gpssetup/README.md b/apps/gpssetup/README.md index f1fa23090..ad08f4aa4 100644 --- a/apps/gpssetup/README.md +++ b/apps/gpssetup/README.md @@ -59,6 +59,7 @@ used. These settings will remain for all apps that use the GPS. - fix_req (Bangle.js2 only) - the number of fixes required before the GPS turns off until next search for GPS signal. default is 1. +- adaptive (Bangle.js2 only) - When a GPS signal is acquired, this can reduce the time in seconds until next scan to generate higher temporal resolution of gps fixes. Off if set to 0. ## Module A module is provided that'll allow you to set GPS configuration from your own @@ -69,11 +70,13 @@ app. To use it: // needed unless the watch's battery has run down require("gpssetup").setPowerMode(); -// This sets up the PSMOO mode. update/search are optional in seconds +// This sets up the PSMOO mode. update/search/adaptive are optional in seconds require("gpssetup").setPowerMode({ power_mode:"PSMOO", update:optional (default 120), - search:optional (default 5)}) + search:optional (default 5), + adaptive: optional (default 0) + }); // This sets up SuperE require("gpssetup").setPowerMode({power_mode:"SuperE"}) diff --git a/apps/gpssetup/gpssetup.js b/apps/gpssetup/gpssetup.js index b56bd50cf..ad20158b3 100644 --- a/apps/gpssetup/gpssetup.js +++ b/apps/gpssetup/gpssetup.js @@ -165,9 +165,11 @@ function setupPSMOO(settings) { var gpsTimeout = null; var gpsActive = false; var fix = 0; + var lastFix = false; function cb(f){ if(parseInt(f.fix) === 1){ fix++; + lastFix = true; if(fix >= settings.fix_req){ fix = 0; turnOffGPS(); @@ -180,9 +182,14 @@ function setupPSMOO(settings) { clearTimeout(gpsTimeout); Bangle.setGPSPower(0,settings.appName); Bangle.removeListener('GPS', cb); // cleaning it up + var timeout = settings.update * 1000; + if(lastFix && settings.adaptive > 0){ + timeout = settings.adaptive * 1000; + } + lastFix = false; gpsTimeout = setTimeout(() => { turnOnGPS(); - }, settings.update * 1000); + }, timeout); } function turnOnGPS(){ if (gpsActive) return; @@ -213,15 +220,17 @@ exports.setPowerMode = function(options) { if (options) { if (options.update) settings.update = options.update; if (options.search) settings.search = options.search; + if (options.adaptive) settings.adaptive = options.adaptive; 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.adaptive = settings.adaptive||0; 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"; + 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") { @@ -229,4 +238,4 @@ exports.setPowerMode = function(options) { } else { return setupSuperE(); } -}; +}; \ No newline at end of file