[] skyspy: Create formatting library, and use it where suitable.

master
Pavel Machek 2024-06-22 23:20:47 +02:00
parent 6eaad6f13a
commit 1fa0c219e3
1 changed files with 96 additions and 73 deletions

View File

@ -1,74 +1,97 @@
/* Sky spy */ /* Sky spy */
let fmt = {
icon_alt : "\0\x08\x1a\1\x00\x00\x00\x20\x30\x78\x7C\xFE\xFF\x00\xC3\xE7\xFF\xDB\xC3\xC3\xC3\xC3\x00\x00\x00\x00\x00\x00\x00\x00",
icon_m : "\0\x08\x1a\1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC3\xE7\xFF\xDB\xC3\xC3\xC3\xC3\x00\x00\x00\x00\x00\x00\x00\x00",
icon_km : "\0\x08\x1a\1\xC3\xC6\xCC\xD8\xF0\xD8\xCC\xC6\xC3\x00\xC3\xE7\xFF\xDB\xC3\xC3\xC3\xC3\x00\x00\x00\x00\x00\x00\x00\x00",
icon_kph : "\0\x08\x1a\1\xC3\xC6\xCC\xD8\xF0\xD8\xCC\xC6\xC3\x00\xC3\xE7\xFF\xDB\xC3\xC3\xC3\xC3\x00\xFF\x00\xC3\xC3\xFF\xC3\xC3",
icon_c : "\0\x08\x1a\1\x00\x00\x60\x90\x90\x60\x00\x7F\xFF\xC0\xC0\xC0\xC0\xC0\xFF\x7F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
let libgps = {
emulator: -1,
init: function(x) {
this.emulator = (process.env.BOARD=="EMSCRIPTEN"
|| process.env.BOARD=="EMSCRIPTEN2")?1:0;
},
state: {},
/* 0 .. DD.ddddd /* 0 .. DD.ddddd
1 .. DD MM.mmm' 1 .. DD MM.mmm'
2 .. DD MM'ss" 2 .. DD MM'ss"
*/ */
mode: 1, geo_mode : 1,
format: function(x) {
switch (this.mode) { init: function() {},
case 0: fmtDist: function(km) { return km.toFixed(1) + this.icon_km; },
return "" + x; fmtSteps: function(n) { return fmtDist(0.001 * 0.719 * n); },
case 1: { fmtAlt: function(m) { return m.toFixed(0) + this.icon_alt; },
let d = Math.floor(x); fmtTimeDiff: function(d) {
let m = x - d; if (d < 180)
m = m*60; return ""+d.toFixed(0);
return "" + d + " " + m.toFixed(3) + "'"; d = d/60;
} return ""+d.toFixed(0)+"m";
case 2: { },
let d = Math.floor(x); fmtAngle: function(x) {
let m = x - d; switch (this.geo_mode) {
m = m*60; case 0:
let mf = Math.floor(m); return "" + x;
let s = m - mf; case 1: {
s = s*60; let d = Math.floor(x);
return "" + d + " " + mf + "'" + s.toFixed(0) + '"'; let m = x - d;
} m = m*60;
} return "" + d + " " + m.toFixed(3) + "'";
return "bad mode?"; }
}, case 2: {
on_gps: function(f) { let d = Math.floor(x);
let fix = this.getGPSFix(); let m = x - d;
f(fix); m = m*60;
let mf = Math.floor(m);
let s = m - mf;
s = s*60;
return "" + d + " " + mf + "'" + s.toFixed(0) + '"';
}
}
return "bad mode?";
},
fmtPos: function(pos) {
return this.fmtAngle(pos.lat) + "\n" + this.fmtAngle(pos.lon);
},
};
/* let gps = {
"lat": number, // Latitude in degrees emulator: -1,
"lon": number, // Longitude in degrees init: function(x) {
"alt": number, // altitude in M this.emulator = (process.env.BOARD=="EMSCRIPTEN"
"speed": number, // Speed in kph || process.env.BOARD=="EMSCRIPTEN2")?1:0;
"course": number, // Course in degrees },
"time": Date, // Current Time (or undefined if not known) state: {},
"satellites": 7, // Number of satellites on_gps: function(f) {
"fix": 1 // NMEA Fix state - 0 is no fix let fix = this.getGPSFix();
"hdop": number, // Horizontal Dilution of Precision f(fix);
*/
this.state.timeout = setTimeout(this.on_gps, 1000, f); /*
}, "lat": number, // Latitude in degrees
off_gps: function() { "lon": number, // Longitude in degrees
clearTimeout(gps_state.timeout); "alt": number, // altitude in M
}, "speed": number, // Speed in kph
getGPSFix: function() { "course": number, // Course in degrees
if (!this.emulator) "time": Date, // Current Time (or undefined if not known)
return Bangle.getGPSFix(); "satellites": 7, // Number of satellites
let fix = {}; "fix": 1 // NMEA Fix state - 0 is no fix
fix.fix = 1; "hdop": number, // Horizontal Dilution of Precision
fix.lat = 50; */
fix.lon = 14; this.state.timeout = setTimeout(this.on_gps, 1000, f);
fix.alt = 200; },
fix.speed = 5; off_gps: function() {
fix.course = 30; clearTimeout(gps_state.timeout);
fix.time = Date(); },
fix.satellites = 5; getGPSFix: function() {
fix.hdop = 12; if (!this.emulator)
return fix; return Bangle.getGPSFix();
} let fix = {};
fix.fix = 1;
fix.lat = 50;
fix.lon = 14;
fix.alt = 200;
fix.speed = 5;
fix.course = 30;
fix.time = Date();
fix.satellites = 5;
fix.hdop = 12;
return fix;
}
}; };
var display = 0; var display = 0;
@ -109,13 +132,13 @@ function calcAlt(alt, cur_altitude) {
return ddalt; return ddalt;
} }
function updateGps() { function updateGps() {
let have = false, lat = "lat ", lon = "lon ", alt = "?", let have = false, lat = "lat ", alt = "?",
speed = "speed ", hdop = "?", adelta = "adelta ", speed = "speed ", hdop = "?", adelta = "adelta ",
tdelta = "tdelta "; tdelta = "tdelta ";
if (cancel_gps) if (cancel_gps)
return; return;
fix = libgps.getGPSFix(); fix = gps.getGPSFix();
if (adj_time) { if (adj_time) {
print("Adjusting time"); print("Adjusting time");
setTime(fix.time.getTime()/1000); setTime(fix.time.getTime()/1000);
@ -136,16 +159,15 @@ function updateGps() {
tdelta = "" + (getTime() - fix.time.getTime()/1000).toFixed(0); tdelta = "" + (getTime() - fix.time.getTime()/1000).toFixed(0);
} }
if (fix && fix.fix && fix.lat) { if (fix && fix.fix && fix.lat) {
lat = "" + libgps.format(fix.lat); lat = "" + fmt.fmtPos(fix);
lon = "" + libgps.format(fix.lon);
alt = "" + fix.alt.toFixed(0); alt = "" + fix.alt.toFixed(0);
adelta = "" + (cur_altitude - fix.alt).toFixed(0); adelta = "" + (cur_altitude - fix.alt).toFixed(0);
speed = "" + fix.speed.toFixed(1); speed = "" + fix.speed.toFixed(1);
hdop = "" + fix.hdop.toFixed(0); hdop = "" + fix.hdop.toFixed(0);
have = true; have = true;
} else { } else {
lat = "NO FIX "; lat = "NO FIX\n"
lon = "" + (getTime() - gps_start).toFixed(0) + "s " + "" + (getTime() - gps_start).toFixed(0) + "s "
+ sats_used + "/" + snum; + sats_used + "/" + snum;
if (cur_altitude) if (cur_altitude)
adelta = "" + cur_altitude.toFixed(0); adelta = "" + cur_altitude.toFixed(0);
@ -154,7 +176,7 @@ function updateGps() {
let ddalt = calcAlt(alt, cur_altitude); let ddalt = calcAlt(alt, cur_altitude);
let msg = ""; let msg = "";
if (display == 1) { if (display == 1) {
msg = lat + "\n" + lon + msg = lat +
"\ne" + hdop + "m "+tdelta+"s\n" + "\ne" + hdop + "m "+tdelta+"s\n" +
speed + "km/h\n"+ alt + "m+" + adelta + "\nmsghere"; speed + "km/h\n"+ alt + "m+" + adelta + "\nmsghere";
} }
@ -349,7 +371,8 @@ function touchHandler(d) {
nextScreen(); nextScreen();
} }
libgps.init(); gps.init();
fmt.init();
Bangle.on("drag", touchHandler); Bangle.on("drag", touchHandler);
Bangle.setUI({ Bangle.setUI({