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).
The GNSS type can be configured in the settings.
Make sure:
* your GadgetBridge version supports http requests
* turn on internet access in GadgetBridge settings

View File

@ -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();

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) {
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");
}
};

View File

@ -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());
});