Update gpssetup.js

adding in support for BangleJS2 emulating the PSMOO with timeouts
master
nravanelli 2024-12-17 21:45:10 +08:00 committed by GitHub
parent 6e11c5647a
commit fbd93f0915
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 90 additions and 40 deletions

View File

@ -1,5 +1,5 @@
const SETTINGS_FILE = "gpssetup.settings.json"; const SETTINGS_FILE = "gpssetup.settings.json";
const BANGLE_VER = process.env.HWVERSION; //BangleJS2 support
function log_debug(o) { function log_debug(o) {
//let timestamp = new Date().getTime(); //let timestamp = new Date().getTime();
//console.log(timestamp + " : " + o); //console.log(timestamp + " : " + o);
@ -106,6 +106,8 @@ function delay(ms) {
function setupSuperE() { function setupSuperE() {
log_debug("setupGPS() Super-E"); log_debug("setupGPS() Super-E");
switch(BANGLE_VER){
case(1):
return Promise.resolve().then(function() { return Promise.resolve().then(function() {
UBX_CFG_RESET(); UBX_CFG_RESET();
return delay(100); return delay(100);
@ -124,10 +126,18 @@ function setupSuperE() {
*/ */
return delay(20); return delay(20);
}); });
case(2):
//nothing more to do.
return;
break;
}
} }
function setupPSMOO(settings) { function setupPSMOO(settings) {
log_debug("setupGPS() PSMOO"); log_debug("setupGPS() PSMOO");
switch(BANGLE_VER){
case(1):
return Promise.resolve().then(function() { return Promise.resolve().then(function() {
UBX_CFG_RESET(); UBX_CFG_RESET();
return delay(100); return delay(100);
@ -149,6 +159,41 @@ function setupPSMOO(settings) {
*/ */
return delay(20); 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. /** Set GPS power mode (assumes GPS on), returns a promise.
@ -165,12 +210,17 @@ exports.setPowerMode = function(options) {
if (options) { if (options) {
if (options.update) settings.update = options.update; if (options.update) settings.update = options.update;
if (options.search) settings.search = options.search; 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.power_mode) settings.power_mode = options.power_mode;
if (options.appName) settings.appName = options.appName;
} }
settings.update = settings.update||120; settings.update = settings.update||120;
settings.search = settings.search||5; 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.power_mode = settings.power_mode||"SuperE";
settings.appName = settings.appName || "gpssetup";
if (options) require("Storage").write(SETTINGS_FILE, settings); 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") { if (settings.power_mode === "PSMOO") {
return setupPSMOO(settings); return setupPSMOO(settings);
} else { } else {