Add setting for GNSS type

pull/2028/head
Marco H 2022-07-11 13:39:14 +02:00
parent cf1f2119cc
commit d537fc5d73
5 changed files with 109 additions and 69 deletions

View File

@ -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). Will download A-GPS data in background (if enabled in settings).
The GNSS type can be configured in the settings.
Make sure: Make sure:
* your GadgetBridge version supports http requests * your GadgetBridge version supports http requests
* turn on internet access in GadgetBridge settings * turn on internet access in GadgetBridge settings

View File

@ -21,15 +21,34 @@ function display(text1, text2) {
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
let waiting = false;
function start() { function start() {
display("Updating A-GPS..."); g.reset();
require("agpsdata").pull(function() { g.clear();
display("A-GPS updated.", "touch to close"); waiting = false;
Bangle.on("touch", () => { load(); }); display("Retry?", "touch to retry");
}, Bangle.on("touch", () => { updateAgps(); });
function(error) {
display("Error:" + error, "touch to retry");
Bangle.on("touch", () => { start(); });
});
} }
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();

View File

@ -1 +1 @@
{"enabled":true,"refresh":1440} {"enabled":true,"refresh":1440,"gnsstype":1}

View File

@ -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) { function setAGPS(data) {
var js = jsFromBase64(data); var js = jsFromBase64(data);
try { try {
@ -14,8 +24,8 @@ function jsFromBase64(b64) {
var bin = atob(b64); var bin = atob(b64);
var chunkSize = 128; var chunkSize = 128;
var js = "Bangle.setGPSPower(1);\n"; // turn GPS on var js = "Bangle.setGPSPower(1);\n"; // turn GPS on
var gnss_select="1"; var gnsstype = settings.gnsstype || 1; // default GPS
js += `Serial1.println("${CASIC_CHECKSUM("$PCAS04,"+gnss_select)}")\n`; // set GNSS mode js += `Serial1.println("${CASIC_CHECKSUM("$PCAS04,"+gnsstype)}")\n`; // set GNSS mode
// What about: // What about:
// NAV-TIMEUTC (0x01 0x10) // NAV-TIMEUTC (0x01 0x10)
// NAV-PV (0x01 0x03) // NAV-PV (0x01 0x03)
@ -60,6 +70,6 @@ exports.pull = function(successCallback, failureCallback) {
}); });
} else { } else {
console.log("error: No http method found"); console.log("error: No http method found");
if (failureCallback) failureCallback(/*LANG*/"No http method found"); if (failureCallback) failureCallback(/*LANG*/"No http method");
} }
}; };

View File

@ -1,62 +1,71 @@
(function(back) { (function(back) {
function writeSettings(key, value) { function writeSettings(key, value) {
var s = Object.assign( var s = Object.assign(
require('Storage').readJSON("agpsdata.default.json", true) || {}, require('Storage').readJSON(settingsDefaultFile, true) || {},
require('Storage').readJSON(FILE, true) || {} require('Storage').readJSON(settingsFile, true) || {});
); s[key] = value;
s[key] = value; require('Storage').writeJSON(settingsFile, s);
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;
readSettings(); readSettings();
}
function buildMainMenu(){ function readSettings() {
var mainmenu = { settings = Object.assign(
'': { 'title': 'AGPS download' }, require('Storage').readJSON(settingsDefaultFile, true) || {},
'< Back': back, require('Storage').readJSON(settingsFile, true) || {});
"Enabled": { }
value: !!settings.enabled,
onchange: v => { var settingsFile = "agpsdata.settings.json";
writeSettings("enabled", v); var settingsDefaultFile = "agpsdata.default.json";
}
}, var settings;
"Refresh every": { readSettings();
value: settings.refresh / 60,
min: 1, const gnsstypes = [
max: 168, "", "GPS", "BDS", "GPS+BDS", "GLONASS", "GPS+GLONASS", "BDS+GLONASS",
step: 1, "GPS+BDS+GLON."
format: v=>v+"h", ];
onchange: v => {
writeSettings("refresh",Math.round(v * 60)); function buildMainMenu() {
} var mainmenu = {
}, '' : {'title' : 'AGPS download'},
"Force refresh": ()=>{ '< Back' : back,
E.showMessage("Loading AGPS data"); "Enabled" : {
value : !!settings.enabled,
require("agpsdata").pull(function() { onchange : v => { writeSettings("enabled", v); }
E.showAlert("Success").then(()=>{ },
E.showMenu(buildMainMenu()); "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());
}); });