2021-09-30 16:02:17 +00:00
|
|
|
function satelliteImage() {
|
|
|
|
return require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4AGnE4F1wvsF34wgFldcLdyMYsoACF1WJF4YxPFzOtF4wxNFzAvKSiIvU1ovIGAkJAAQucF5QxCFwYwbF4QwLrwvjYIVfrwABrtdq9Wqwvkq4oCAAtXmYvi1teE4NXrphCrxoCGAbvdSIoAHNQNeFzQvGeRQvCsowrYYNfF8YwHZQQFCF8QwGF4owjeYovBroHEMERhEF8IwNrtWryYFF8YwCq4vhGBeJF5AwaxIwKwVXFwwvandfMJeJF8M6nZiLGQIvdstfGAVlGBZkCxJeZJQIwCGIRjMFzYACGIc6r/+FsIvGGIYABEzYvPGQYvusovkAH4A/AH4A/ACo="));
|
|
|
|
}
|
2019-11-13 11:09:41 +00:00
|
|
|
|
2021-09-30 16:02:17 +00:00
|
|
|
var Layout = require("Layout");
|
|
|
|
var layout;
|
|
|
|
Bangle.setGPSPower(1, "app");
|
2020-03-04 15:04:21 +00:00
|
|
|
E.showMessage("Loading..."); // avoid showing rubbish on screen
|
2019-11-13 11:09:41 +00:00
|
|
|
|
|
|
|
var lastFix = {
|
2021-09-30 16:02:17 +00:00
|
|
|
fix: -1,
|
2019-11-13 11:09:41 +00:00
|
|
|
alt: 0,
|
|
|
|
lat: 0,
|
|
|
|
lon: 0,
|
2019-12-05 10:10:20 +00:00
|
|
|
speed: 0,
|
2019-11-13 11:09:41 +00:00
|
|
|
time: 0,
|
|
|
|
satellites: 0
|
|
|
|
};
|
2021-12-22 21:57:05 +00:00
|
|
|
var SATinView = 0;
|
2022-01-03 10:49:43 +00:00
|
|
|
var nofBD = 0;
|
|
|
|
var nofGP = 0;
|
2019-11-13 11:09:41 +00:00
|
|
|
|
|
|
|
function formatTime(now) {
|
2021-12-22 21:57:05 +00:00
|
|
|
if (now == undefined) {
|
|
|
|
return "no GPS time available";
|
|
|
|
} else {
|
|
|
|
var fd = now.toUTCString().split(" ");
|
|
|
|
var time = fd[4].substr(0, 5);
|
|
|
|
var date = [fd[0], fd[1], fd[2]].join(" ");
|
|
|
|
return time + " - " + date;
|
|
|
|
}
|
2019-11-13 11:09:41 +00:00
|
|
|
}
|
2020-11-15 20:27:12 +00:00
|
|
|
function getMaidenHead(param1,param2){
|
|
|
|
var lat=-100.0;
|
|
|
|
var lon=0.0;
|
|
|
|
var U = 'ABCDEFGHIJKLMNOPQRSTUVWX';
|
|
|
|
var L = U.toLowerCase();
|
2019-11-13 11:09:41 +00:00
|
|
|
|
2020-11-15 20:27:12 +00:00
|
|
|
lat = param1;
|
|
|
|
lon = param2;
|
|
|
|
|
|
|
|
lon = lon + 180;
|
2021-09-30 16:02:17 +00:00
|
|
|
var t = lon/20;
|
2020-11-15 20:27:12 +00:00
|
|
|
fLon = Math.floor(t);
|
|
|
|
t = (t % fLon)*10;
|
|
|
|
sqLon = Math.floor(t);
|
2021-09-30 16:02:17 +00:00
|
|
|
t = (t-sqLon)*24;
|
2020-11-15 20:27:12 +00:00
|
|
|
subLon = Math.floor(t);
|
|
|
|
extLon = Math.floor((t-subLon)*10);
|
2021-09-30 16:02:17 +00:00
|
|
|
|
2020-11-15 20:27:12 +00:00
|
|
|
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;
|
|
|
|
}
|
2019-11-13 11:09:41 +00:00
|
|
|
function onGPS(fix) {
|
2021-09-30 16:02:17 +00:00
|
|
|
if (lastFix.fix != fix.fix) {
|
|
|
|
// if fix is different, change the layout
|
|
|
|
if (fix.fix) {
|
|
|
|
layout = new Layout( {
|
|
|
|
type:"v", c: [
|
|
|
|
{type:"txt", font:"6x8:2", label:"GPS Info" },
|
|
|
|
{type:"img", src:satelliteImage, pad:4 },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"alt" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"lat" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"lon" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"speed" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"time" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"sat" },
|
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"maidenhead" },
|
2021-10-18 10:32:46 +00:00
|
|
|
]},{lazy:true});
|
2021-09-30 16:02:17 +00:00
|
|
|
} else {
|
|
|
|
layout = new Layout( {
|
|
|
|
type:"v", c: [
|
|
|
|
{type:"txt", font:"6x8:2", label:"GPS Info" },
|
|
|
|
{type:"img", src:satelliteImage, pad:4 },
|
|
|
|
{type:"txt", font:"6x8", label:"Waiting for GPS" },
|
|
|
|
{type:"h", c: [
|
|
|
|
{type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" },
|
2021-12-22 21:57:05 +00:00
|
|
|
{type:"txt", font:"6x8", pad:3, label:"Satellites used" }
|
2021-09-30 16:02:17 +00:00
|
|
|
]},
|
2021-12-22 21:57:05 +00:00
|
|
|
{type:"txt", font:"6x8", label:"", fillx:true, id:"progress" }
|
2021-10-18 10:32:46 +00:00
|
|
|
]},{lazy:true});
|
2021-09-30 16:02:17 +00:00
|
|
|
}
|
2021-10-18 10:32:46 +00:00
|
|
|
g.clearRect(0,24,g.getWidth(),g.getHeight());
|
2021-09-30 16:02:17 +00:00
|
|
|
layout.render();
|
|
|
|
}
|
2019-11-13 11:09:41 +00:00
|
|
|
lastFix = fix;
|
|
|
|
if (fix.fix) {
|
2021-09-30 16:02:17 +00:00
|
|
|
var locale = require("locale");
|
2019-11-13 11:09:41 +00:00
|
|
|
var satellites = fix.satellites;
|
2021-09-30 16:02:17 +00:00
|
|
|
var maidenhead = getMaidenHead(fix.lat,fix.lon);
|
|
|
|
layout.alt.label = "Altitude: "+locale.distance(fix.alt);
|
|
|
|
layout.lat.label = "Lat: "+fix.lat.toFixed(6);
|
|
|
|
layout.lon.label = "Lon: "+fix.lon.toFixed(6);
|
|
|
|
layout.speed.label = "Speed: "+locale.speed(fix.speed);
|
|
|
|
layout.time.label = "Time: "+formatTime(fix.time);
|
|
|
|
layout.sat.label = "Satellites: "+satellites;
|
|
|
|
layout.maidenhead.label = "Maidenhead: "+maidenhead;
|
2019-11-13 11:09:41 +00:00
|
|
|
} else {
|
2021-09-30 16:02:17 +00:00
|
|
|
layout.sat.label = fix.satellites;
|
2021-12-22 21:57:05 +00:00
|
|
|
layout.progress.label = "in view: " + SATinView;
|
2019-11-13 11:09:41 +00:00
|
|
|
}
|
2021-10-18 10:32:46 +00:00
|
|
|
layout.render();
|
2019-11-13 11:09:41 +00:00
|
|
|
}
|
|
|
|
|
2021-12-22 21:57:05 +00:00
|
|
|
function onGPSraw(nmea) {
|
|
|
|
if (nmea.slice(3,6) == "GSV") {
|
2021-12-24 11:42:25 +00:00
|
|
|
// console.log(nmea);
|
2022-01-03 10:08:32 +00:00
|
|
|
if (nmea.slice(0,7) == "$BDGSV,") nofBD = Number(nmea.slice(11,13));
|
|
|
|
if (nmea.slice(0,7) == "$GPGSV,") nofGP = Number(nmea.slice(11,13));
|
2021-12-24 11:42:25 +00:00
|
|
|
SATinView = nofBD + nofGP;
|
2021-12-22 21:57:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-30 16:02:17 +00:00
|
|
|
Bangle.loadWidgets();
|
|
|
|
Bangle.drawWidgets();
|
2019-11-13 11:09:41 +00:00
|
|
|
Bangle.on('GPS', onGPS);
|
2021-12-22 21:57:05 +00:00
|
|
|
Bangle.on('GPS-raw', onGPSraw);
|