mirror of https://github.com/espruino/BangleApps
94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
var img = require("heatshrink").decompress(atob("mEwghC/AH4AKg9wC6t3u4uVC6wWBI6t3uJeVuMQCqcBLisAi4XLxAABFxAXKgc4DBAuBRhQXEDAq7MmYXEwBHEXZYXFGAOqAAKDMmczC4mIC62CC50PC4JIBkQABiIvRmURAAUSjQXSFwMoxGKC6CRFwUSVYgXLPIgXXwMYegoXLJAYXCGBnzGA0hPQIwMgYwGC6gwCC4ZIMC4gYBC604C4ZISmcRVgapQAAMhC6GIJIwXCMBcIxGDDBAuLC4IwGAARGMAAQWGmAXPJQoWMC4pwCCpoXJAB4XXAH4A/ABQA="))
|
|
|
|
Bangle.setGPSPower(1);
|
|
Bangle.setLCDMode("doublebuffered");
|
|
E.showMessage("Loading..."); // avoid showing rubbish on screen
|
|
|
|
var lastFix = {
|
|
fix: 0,
|
|
alt: 0,
|
|
lat: 0,
|
|
lon: 0,
|
|
speed: 0,
|
|
time: 0,
|
|
satellites: 0
|
|
};
|
|
var nofix = 0;
|
|
|
|
function formatTime(now) {
|
|
var fd = now.toUTCString().split(" ");
|
|
var time = fd[4].substr(0, 5);
|
|
var date = [fd[0], fd[1], fd[2]].join(" ");
|
|
return time + " - " + date;
|
|
}
|
|
function getMaidenHead(param1,param2){
|
|
var lat=-100.0;
|
|
var lon=0.0;
|
|
var U = 'ABCDEFGHIJKLMNOPQRSTUVWX';
|
|
var L = U.toLowerCase();
|
|
|
|
lat = param1;
|
|
lon = param2;
|
|
|
|
lon = lon + 180;
|
|
t = lon/20;
|
|
fLon = Math.floor(t);
|
|
t = (t % fLon)*10;
|
|
sqLon = Math.floor(t);
|
|
t=(t-sqLon)*24;
|
|
subLon = Math.floor(t);
|
|
extLon = Math.floor((t-subLon)*10);
|
|
|
|
lat = lat + 90;
|
|
t = lat/10;
|
|
fLat = Math.floor(t);
|
|
t = (t % fLat)*10;
|
|
sqLat = Math.floor(t);
|
|
t=(t-sqLat)*24;
|
|
subLat = Math.floor(t);
|
|
extLat = Math.floor((t-subLat)*10);
|
|
|
|
return U[fLon]+U[fLat]+sqLon+sqLat+L[subLon]+L[subLat]+extLon+extLat;
|
|
}
|
|
function onGPS(fix) {
|
|
lastFix = fix;
|
|
g.clear();
|
|
g.setFontAlign(-1, -1);
|
|
g.drawImage(img, 20, -12);
|
|
g.setFont("6x8");
|
|
g.setFontVector(22);
|
|
g.drawString("GPS Info", 70, 0);
|
|
if (fix.fix) {
|
|
nofix = 0;
|
|
var alt = fix.alt;
|
|
var lat = fix.lat;
|
|
var lon = fix.lon;
|
|
var speed = fix.speed;
|
|
var time = formatTime(fix.time);
|
|
var satellites = fix.satellites;
|
|
var maidenhead = getMaidenHead(lat,lon);
|
|
var s = 15;
|
|
g.setFontVector(s);
|
|
g.drawString("Altitude: "+alt+" m",10,36);
|
|
g.drawString("Lat: "+lat,10,54);
|
|
g.drawString("Lon: "+lon,10,72);
|
|
g.drawString("Speed: "+speed.toFixed(1)+" km/h",10,90);
|
|
g.drawString("Time: "+time,10,108);
|
|
g.drawString("Satellites: "+satellites,10,126);
|
|
g.drawString("Maidenhead: "+maidenhead,10,144);
|
|
} else {
|
|
g.setFontAlign(0, 1);
|
|
g.setFont("6x8", 2);
|
|
g.drawString("Waiting for GPS", 120, 80);
|
|
nofix = (nofix+1) % 4;
|
|
g.drawString(".".repeat(nofix) + " ".repeat(4-nofix), 120, 120);
|
|
// Show number of satellites:
|
|
g.setFontAlign(0,0);
|
|
g.setFont("6x8");
|
|
g.drawString(fix.satellites+" satellites", 120, 100);
|
|
}
|
|
g.flip();
|
|
}
|
|
|
|
Bangle.on('GPS', onGPS);
|