BangleApps/apps/gpsrec/widget.js

78 lines
2.0 KiB
JavaScript

(() => {
// add the width
var xpos = WIDGETPOS.tl;
WIDGETPOS.tl += 24;/* the widget width plus some extra pixel to keep distance to others */;
var settings = {};
var hasFix = false;
var fixToggle = false; // toggles once for each reading
var gpsTrack; // file for GPS track
var periodCtr = 0;
// draw your widget at xpos
function draw() {
g.reset();
g.setFont("4x6");
g.setFontAlign(0,0);
g.clearRect(xpos,0,xpos+23,23);
if (!settings.recording) {
g.setColor("#606060");
} else {
g.setColor("#ff0000");
if (hasFix) {
if (fixToggle) {
g.fillCircle(xpos+11,11,9);
g.setColor("#000000");
} else
g.drawCircle(xpos+11,11,9);
} else {
g.setColor(fixToggle ? "#ff0000" : "#7f0000");
g.drawString("NO",xpos+12,5);
g.drawString("FIX",xpos+12,19);
}
}
g.drawString("GPS",xpos+12,12);
g.setColor(-1); // change color back to be nice to other apps
}
function onGPS(fix) {
hasFix = fix.fix;
fixToggle = !fixToggle;
draw();
if (hasFix) {
periodCtr--;
if (periodCtr<=0) {
periodCtr = settings.period;
if (gpsTrack) gpsTrack.write([
fix.time.getTime(),
fix.lat.toFixed(5),
fix.lon.toFixed(5),
fix.alt
].join(",")+"\n");
}
}
}
// Called by the GPS app to reload settings and decide what's
function reload() {
settings = require("Storage").readJSON("gpsrec.json",1)||{};
settings.period = settings.period||1;
settings.file |= 0;
Bangle.removeListener('GPS',onGPS);
if (settings.recording) {
Bangle.on('GPS',onGPS);
Bangle.setGPSPower(1);
var n = settings.file.toString(36);
gpsTrack = require("Storage").open(".gpsrc"+n,"a");
} else {
Bangle.setGPSPower(0);
gpsTrack = undefined;
}
draw();
}
reload();
// add the widget
WIDGETS["gpsrec"]={draw:draw,reload:reload};
})()