2020-02-07 17:16:45 +00:00
|
|
|
(() => {
|
|
|
|
var settings = {};
|
|
|
|
var hasFix = false;
|
|
|
|
var fixToggle = false; // toggles once for each reading
|
|
|
|
var gpsTrack; // file for GPS track
|
|
|
|
var periodCtr = 0;
|
2020-06-25 06:55:44 +00:00
|
|
|
var gpsOn = false;
|
2020-02-07 17:16:45 +00:00
|
|
|
|
2020-03-05 13:15:27 +00:00
|
|
|
// draw your widget
|
2020-02-07 17:16:45 +00:00
|
|
|
function draw() {
|
2020-03-05 13:15:27 +00:00
|
|
|
if (!settings.recording) return;
|
2020-02-07 17:16:45 +00:00
|
|
|
g.reset();
|
2020-03-09 09:54:54 +00:00
|
|
|
g.drawImage(atob("GBgCAAAAAAAAAAQAAAAAAD8AAAAAAP/AAAAAAP/wAAAAAH/8C9AAAB/8L/QAAAfwv/wAAAHS//wAAAAL//gAAAAf/+AAAAAf/4AAAAL//gAAAAD/+DwAAAB/Uf8AAAAfA//AAAACAf/wAAAAAH/0AAAAAB/wAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),this.x,this.y);
|
2020-03-05 13:15:27 +00:00
|
|
|
if (hasFix) {
|
2020-03-09 09:54:54 +00:00
|
|
|
g.setColor("#FF0000");
|
|
|
|
g.drawImage(fixToggle ? atob("CgoCAAAAA0AAOAAD5AAPwAAAAAAAAAAAAAAAAA==") : atob("CgoCAAABw0AcOAHj5A8PwHwAAvgAB/wABUAAAA=="),this.x,this.y+14);
|
2020-02-07 17:16:45 +00:00
|
|
|
} else {
|
2020-03-09 09:54:54 +00:00
|
|
|
g.setColor("#0000FF");
|
|
|
|
if (fixToggle)
|
|
|
|
g.setFont("6x8").drawString("?",this.x,this.y+14);
|
2020-02-07 17:16:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function onGPS(fix) {
|
|
|
|
hasFix = fix.fix;
|
|
|
|
fixToggle = !fixToggle;
|
2020-03-09 09:54:54 +00:00
|
|
|
WIDGETS["gpsrec"].draw();
|
2020-02-07 17:16:45 +00:00
|
|
|
if (hasFix) {
|
|
|
|
periodCtr--;
|
|
|
|
if (periodCtr<=0) {
|
|
|
|
periodCtr = settings.period;
|
|
|
|
if (gpsTrack) gpsTrack.write([
|
2020-02-13 09:32:18 +00:00
|
|
|
fix.time.getTime(),
|
2020-02-07 17:16:45 +00:00
|
|
|
fix.lat.toFixed(5),
|
|
|
|
fix.lon.toFixed(5),
|
|
|
|
fix.alt
|
|
|
|
].join(",")+"\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-05 13:15:27 +00:00
|
|
|
// Called by the GPS app to reload settings and decide what to do
|
2020-02-07 17:16:45 +00:00
|
|
|
function reload() {
|
2020-02-28 17:02:26 +00:00
|
|
|
settings = require("Storage").readJSON("gpsrec.json",1)||{};
|
2020-05-08 20:58:55 +00:00
|
|
|
settings.period = settings.period||10;
|
2020-02-07 17:16:45 +00:00
|
|
|
settings.file |= 0;
|
|
|
|
|
|
|
|
Bangle.removeListener('GPS',onGPS);
|
2020-06-25 06:55:44 +00:00
|
|
|
var gOn = false;
|
2020-02-07 17:16:45 +00:00
|
|
|
if (settings.recording) {
|
2020-03-05 13:15:27 +00:00
|
|
|
WIDGETS["gpsrec"].width = 24;
|
2020-06-25 06:55:44 +00:00
|
|
|
Bangle.on('GPS', onGPS);
|
2020-02-07 17:16:45 +00:00
|
|
|
var n = settings.file.toString(36);
|
|
|
|
gpsTrack = require("Storage").open(".gpsrc"+n,"a");
|
2020-06-25 06:55:44 +00:00
|
|
|
gOn = true;
|
2020-02-07 17:16:45 +00:00
|
|
|
} else {
|
2020-03-05 13:15:27 +00:00
|
|
|
WIDGETS["gpsrec"].width = 0;
|
2020-02-07 17:16:45 +00:00
|
|
|
gpsTrack = undefined;
|
|
|
|
}
|
2020-06-25 06:55:44 +00:00
|
|
|
if (gOn != gpsOn) {
|
|
|
|
Bangle.setGPSPower(gOn);
|
|
|
|
gpsOn = gOn;
|
|
|
|
}
|
2020-02-07 17:16:45 +00:00
|
|
|
}
|
|
|
|
// add the widget
|
2020-03-05 13:15:27 +00:00
|
|
|
WIDGETS["gpsrec"]={area:"tl",width:24,draw:draw,reload:function() {
|
|
|
|
reload();
|
|
|
|
Bangle.drawWidgets(); // relayout all widgets
|
|
|
|
}};
|
|
|
|
// load settings, set correct widget width
|
|
|
|
reload();
|
2020-02-07 17:16:45 +00:00
|
|
|
})()
|