diff --git a/apps/agpsdata/README.md b/apps/agpsdata/README.md index 9d5672434..57bb055a1 100644 --- a/apps/agpsdata/README.md +++ b/apps/agpsdata/README.md @@ -4,6 +4,8 @@ Load assisted GPS (A-GPS) data directly to your Bangle.js using the new http req Will download A-GPS data in background (if enabled in settings). +The GNSS type can be configured in the settings. + Make sure: * your GadgetBridge version supports http requests * turn on internet access in GadgetBridge settings diff --git a/apps/agpsdata/app.js b/apps/agpsdata/app.js index b3b070539..647723bb4 100644 --- a/apps/agpsdata/app.js +++ b/apps/agpsdata/app.js @@ -21,15 +21,34 @@ function display(text1, text2) { Bangle.loadWidgets(); Bangle.drawWidgets(); +let waiting = false; + function start() { - display("Updating A-GPS..."); - require("agpsdata").pull(function() { - display("A-GPS updated.", "touch to close"); - Bangle.on("touch", () => { load(); }); - }, - function(error) { - display("Error:" + error, "touch to retry"); - Bangle.on("touch", () => { start(); }); - }); + g.reset(); + g.clear(); + waiting = false; + display("Retry?", "touch to retry"); + Bangle.on("touch", () => { updateAgps(); }); } -start(); + +function updateAgps() { + g.reset(); + g.clear(); + if (!waiting) { + waiting = true; + display("Updating A-GPS..."); + require("agpsdata").pull(function() { + waiting = false; + display("A-GPS updated.", "touch to close"); + Bangle.on("touch", () => { load(); }); + }, + function(error) { + waiting = false; + E.showAlert(error, "Error") + .then(() => { start(); }); + }); + } else { + display("Waiting..."); + } +} +updateAgps(); diff --git a/apps/agpsdata/default.json b/apps/agpsdata/default.json index 097593d86..0b6e0cecf 100644 --- a/apps/agpsdata/default.json +++ b/apps/agpsdata/default.json @@ -1 +1 @@ -{"enabled":true,"refresh":1440} +{"enabled":true,"refresh":1440,"gnsstype":1} diff --git a/apps/agpsdata/lib.js b/apps/agpsdata/lib.js index c27ad5db6..7d9758c0a 100644 --- a/apps/agpsdata/lib.js +++ b/apps/agpsdata/lib.js @@ -1,3 +1,13 @@ +function readSettings() { + settings = Object.assign( + require('Storage').readJSON("agpsdata.default.json", true) || {}, + require('Storage').readJSON(FILE, true) || {}); +} + +var FILE = "agpsdata.settings.json"; +var settings; +readSettings(); + function setAGPS(data) { var js = jsFromBase64(data); try { @@ -14,8 +24,8 @@ function jsFromBase64(b64) { var bin = atob(b64); var chunkSize = 128; var js = "Bangle.setGPSPower(1);\n"; // turn GPS on - var gnss_select="1"; - js += `Serial1.println("${CASIC_CHECKSUM("$PCAS04,"+gnss_select)}")\n`; // set GNSS mode + var gnsstype = settings.gnsstype || 1; // default GPS + js += `Serial1.println("${CASIC_CHECKSUM("$PCAS04,"+gnsstype)}")\n`; // set GNSS mode // What about: // NAV-TIMEUTC (0x01 0x10) // NAV-PV (0x01 0x03) @@ -60,6 +70,6 @@ exports.pull = function(successCallback, failureCallback) { }); } else { console.log("error: No http method found"); - if (failureCallback) failureCallback(/*LANG*/"No http method found"); + if (failureCallback) failureCallback(/*LANG*/"No http method"); } }; diff --git a/apps/agpsdata/settings.js b/apps/agpsdata/settings.js index 9d754e82b..80a2f3956 100644 --- a/apps/agpsdata/settings.js +++ b/apps/agpsdata/settings.js @@ -1,62 +1,71 @@ (function(back) { - function writeSettings(key, value) { - var s = Object.assign( - require('Storage').readJSON("agpsdata.default.json", true) || {}, - require('Storage').readJSON(FILE, true) || {} - ); - s[key] = value; - require('Storage').writeJSON(FILE, s); - readSettings(); - } - - function readSettings(){ - settings = Object.assign( - require('Storage').readJSON("agpsdata.default.json", true) || {}, - require('Storage').readJSON(FILE, true) || {} - ); - } - - var FILE="agpsdata.settings.json"; - var settings; +function writeSettings(key, value) { + var s = Object.assign( + require('Storage').readJSON(settingsDefaultFile, true) || {}, + require('Storage').readJSON(settingsFile, true) || {}); + s[key] = value; + require('Storage').writeJSON(settingsFile, s); readSettings(); +} - function buildMainMenu(){ - var mainmenu = { - '': { 'title': 'AGPS download' }, - '< Back': back, - "Enabled": { - value: !!settings.enabled, - onchange: v => { - writeSettings("enabled", v); - } - }, - "Refresh every": { - value: settings.refresh / 60, - min: 1, - max: 168, - step: 1, - format: v=>v+"h", - onchange: v => { - writeSettings("refresh",Math.round(v * 60)); - } - }, - "Force refresh": ()=>{ - E.showMessage("Loading AGPS data"); - - require("agpsdata").pull(function() { - E.showAlert("Success").then(()=>{ - E.showMenu(buildMainMenu()); +function readSettings() { + settings = Object.assign( + require('Storage').readJSON(settingsDefaultFile, true) || {}, + require('Storage').readJSON(settingsFile, true) || {}); +} + +var settingsFile = "agpsdata.settings.json"; +var settingsDefaultFile = "agpsdata.default.json"; + +var settings; +readSettings(); + +const gnsstypes = [ + "", "GPS", "BDS", "GPS+BDS", "GLONASS", "GPS+GLONASS", "BDS+GLONASS", + "GPS+BDS+GLON." +]; + +function buildMainMenu() { + var mainmenu = { + '' : {'title' : 'AGPS download'}, + '< Back' : back, + "Enabled" : { + value : !!settings.enabled, + onchange : v => { writeSettings("enabled", v); } + }, + "Refresh every" : { + value : settings.refresh / 60, + min : 1, + max : 168, + step : 1, + format : v => v + "h", + onchange : v => { writeSettings("refresh", Math.round(v * 60)); } + }, + "GNSS type" : { + value : settings.gnsstype, + min : 1, + max : 7, + step : 1, + format : v => gnsstypes[v], + onchange : x => writeSettings('gnsstype', x) + }, + "Force refresh" : () => { + E.showMessage("Loading A-GPS data"); + require("agpsdata") + .pull( + function() { + E.showAlert("Success").then( + () => { E.showMenu(buildMainMenu()); }); + }, + function(error) { + E.showAlert(error, "Error") + .then(() => { E.showMenu(buildMainMenu()); }); }); - },function(error) { - E.showAlert(error,"Error").then(()=>{ - E.showMenu(buildMainMenu()); - }); - }); - } - }; + } + }; - return mainmenu; - } + return mainmenu; +} - E.showMenu(buildMainMenu()); +E.showMenu(buildMainMenu()); });