android - Update the interval each time

master
Martin Boonk 2023-02-23 20:39:37 +01:00
parent abd8313a6c
commit 6b352486ea
1 changed files with 9 additions and 14 deletions

View File

@ -140,7 +140,6 @@
"gps": function() { "gps": function() {
const settings = require("Storage").readJSON("android.settings.json",1)||{}; const settings = require("Storage").readJSON("android.settings.json",1)||{};
if (!settings.overwriteGps) return; if (!settings.overwriteGps) return;
// modify event for using it as Bangle GPS event // modify event for using it as Bangle GPS event
delete event.t; delete event.t;
if (!isFinite(event.satellites)) event.satellites = NaN; if (!isFinite(event.satellites)) event.satellites = NaN;
@ -154,27 +153,24 @@
event.time = new Date(event.time); event.time = new Date(event.time);
} }
if (!gpsState.firstGPSEvent) { if (!gpsState.lastGPSEvent) {
// this is the first event, save time of arrival and deactivate internal GPS // this is the first event, save time of arrival and deactivate internal GPS
gpsState.firstGPSEvent = Date.now();
Bangle.moveGPSPower(0); Bangle.moveGPSPower(0);
} else { } else {
if (!gpsState.interval){
// this is the second event, store the intervall for expecting the next GPS event // this is the second event, store the intervall for expecting the next GPS event
gpsState.interval = Date.now() - gpsState.firstGPSEvent; gpsState.interval = Date.now() - gpsState.lastGPSEvent;
}
} }
gpsState.lastGPSEvent = Date.now();
// in any case, cleanup the GPS state in case no new events arrive // in any case, cleanup the GPS state in case no new events arrive
if (gpsState.timeoutGPS) clearTimeout(gpsState.timeoutGPS); if (gpsState.timeoutGPS) clearTimeout(gpsState.timeoutGPS);
gpsState.timeoutGPS = setTimeout(()=>{ gpsState.timeoutGPS = setTimeout(()=>{
// reset state // reset state
gpsState.firstGPSEvent = undefined; gpsState.lastGPSEvent = undefined;
gpsState.timeoutGPS = undefined; gpsState.timeoutGPS = undefined;
gpsState.interval = undefined; gpsState.interval = undefined;
// did not get an expected GPS event but have GPS clients, switch back to internal GPS // did not get an expected GPS event but have GPS clients, switch back to internal GPS
if (Bangle.isGPSOn()) Bangle.moveGPSPower(1); if (Bangle.isGPSOn()) Bangle.moveGPSPower(1);
}, (gpsState.interval || 10000) + 1000); }, (gpsState.interval || 10000) + 1000);
Bangle.emit('GPS', event); Bangle.emit('GPS', event);
}, },
// {t:"is_gps_active"} // {t:"is_gps_active"}
@ -288,7 +284,6 @@
// GPS overwrite logic // GPS overwrite logic
if (settings.overwriteGps) { // if the overwrite option is set.. if (settings.overwriteGps) { // if the overwrite option is set..
const origSetGPSPower = Bangle.setGPSPower; const origSetGPSPower = Bangle.setGPSPower;
// migrate all GPS clients to the other variant on connection events
Bangle.moveGPSPower = (state) => { Bangle.moveGPSPower = (state) => {
if (Bangle.isGPSOn()){ if (Bangle.isGPSOn()){
let orig = Bangle._PWR.GPS; let orig = Bangle._PWR.GPS;
@ -303,7 +298,7 @@
let wrap = function(f){ let wrap = function(f){
return (s)=>{ return (s)=>{
if (serialTimeout) clearTimeout(serialTimeout); if (serialTimeout) clearTimeout(serialTimeout);
origSetGPSPower(1, "androidgpsserial") origSetGPSPower(1, "androidgpsserial");
f(s); f(s);
serialTimeout = setTimeout(()=>{ serialTimeout = setTimeout(()=>{
serialTimeout = undefined; serialTimeout = undefined;
@ -315,9 +310,9 @@
Serial1.write = wrap(Serial1.write); Serial1.write = wrap(Serial1.write);
// replace set GPS power logic to suppress activation of gps (and instead request it from the phone) // replace set GPS power logic to suppress activation of gps (and instead request it from the phone)
Bangle.setGPSPower = (isOn, appID) => { Bangle.setGPSPower = ((isOn, appID) => {
let pwr; let pwr;
if (!gpsState.firstGPSEvent){ if (!this.lastGPSEvent){
// use internal GPS power function if no gps event has arrived from GadgetBridge // use internal GPS power function if no gps event has arrived from GadgetBridge
pwr = origSetGPSPower(isOn, appID); pwr = origSetGPSPower(isOn, appID);
} else { } else {
@ -334,7 +329,7 @@
// always update Gadgetbridge on current power state // always update Gadgetbridge on current power state
gbSend({ t: "gps_power", status: pwr }); gbSend({ t: "gps_power", status: pwr });
return pwr; return pwr;
}; }).bind(gpsState);
// allow checking for GPS via GadgetBridge // allow checking for GPS via GadgetBridge
Bangle.isGPSOn = () => { Bangle.isGPSOn = () => {
return !!(Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0); return !!(Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0);