97 lines
3.1 KiB
JavaScript
Executable File
97 lines
3.1 KiB
JavaScript
Executable File
(() => {
|
|
let STOR = require("Storage");
|
|
let lastSpeed;
|
|
|
|
function drawFace() {
|
|
// variables
|
|
var first_run = true;
|
|
var naNShown = false; // just for performance; if the speed is unknown, then refresh the display once
|
|
var speedFont = "6x8";
|
|
var speedSize = 8;
|
|
var speedNaNSize = 3;
|
|
var textFont = "Vector";
|
|
var textSize = 14;
|
|
var linePadding = 50;
|
|
var lineWidth = 2;
|
|
var maxSpeedFont = "Vector";
|
|
var maxSpeedSize = 20;
|
|
var maxSpeedTextSize = 10;
|
|
var maxSpeed = 0; // speed score
|
|
var maxSpeedEver = Number(STOR.read("maxspeed.trailsense.json")) || 0;
|
|
|
|
// Some initialization
|
|
Bangle.setGPSPower(true);
|
|
g.setFontAlign(0,0);
|
|
g.setColor(g.theme.bg);
|
|
g.fillRect(0,0,g.getWidth(), g.getHeight());
|
|
g.setColor(g.theme.fg2);
|
|
g.fillRect(0, linePadding-2, g.getWidth(), linePadding);
|
|
g.fillRect(0, g.getHeight()-linePadding, g.getWidth(), g.getHeight()-linePadding+2);
|
|
// text
|
|
g.setColor(g.theme.fg2);
|
|
g.setFont(textFont, textSize);
|
|
g.drawString("km/h", g.getWidth()/2, g.getHeight() - linePadding - 20);
|
|
g.drawString("Speed:", g.getWidth()/2, linePadding + 20);
|
|
|
|
g.setColor(g.theme.fg2);
|
|
g.setFont(maxSpeedFont, maxSpeedTextSize);
|
|
g.drawString("Maxspeed [km/h]: NOW/EVER", g.getWidth()/2, g.getHeight()-maxSpeedTextSize/2);
|
|
|
|
Bangle.loadWidgets();
|
|
Bangle.drawWidgets();
|
|
|
|
// utilitiy functions
|
|
function round(value, decimals) {
|
|
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
|
|
}
|
|
|
|
|
|
Bangle.on("GPS",
|
|
(gps_fix) => {
|
|
var speed = round(gps_fix.speed, 1);
|
|
if(speed<3.4) speed="0.0";
|
|
if(Number(speed)>maxSpeed) maxSpeed = speed;
|
|
if(maxSpeed > maxSpeedEver) { STOR.write("maxspeed.trailsense.json", maxSpeed.toString()); }
|
|
maxSpeedEver = Number(STOR.read("maxspeed.trailsense.json")) || 0;
|
|
|
|
if((speed != lastSpeed || first_run) && !isNaN(speed)) {
|
|
first_run = false;
|
|
naNShown = false; // update naNShown for accidently signal loss (so that the loop down there can run again)
|
|
|
|
// clear screen
|
|
g.setColor(g.theme.bg);
|
|
g.fillRect(0, g.getHeight()/2-30, g.getWidth(), g.getHeight()/2+30);
|
|
|
|
// draw speed
|
|
g.setColor(g.theme.fg);
|
|
g.setFont(speedFont, speedSize);
|
|
g.drawString(speed, g.getWidth()/2, g.getHeight()/2);
|
|
|
|
// draw speed highscore
|
|
g.setColor(g.theme.bg);
|
|
g.fillRect(0, g.getHeight()-maxSpeedSize*2, g.getWidth(), g.getHeight()-maxSpeedSize/2)
|
|
g.setColor(g.theme.fg);
|
|
g.setFont(maxSpeedFont, maxSpeedSize);
|
|
g.drawString(round(maxSpeed, 1) + " / " + maxSpeedEver, g.getWidth()/2, g.getHeight()-maxSpeedSize);
|
|
} else if(isNaN(speed) && !naNShown) {
|
|
g.setColor(g.theme.bg);
|
|
g.fillRect(0, g.getHeight()/2-30, g.getWidth(), g.getHeight()/2+30);
|
|
g.setColor(g.theme.fg);
|
|
g.setFont(speedFont, speedNaNSize);
|
|
g.drawString("Loading...", g.getWidth()/2, g.getHeight()/2);
|
|
|
|
naNShown = true;
|
|
}
|
|
lastSpeed = speed; // set last speed var for next loop
|
|
})
|
|
}
|
|
|
|
function stop() {
|
|
g.clear();
|
|
Bangle.removeAllListeners();
|
|
Bangle.setGPSPower(false);
|
|
}
|
|
|
|
return { drawFace:drawFace, stop:stop };
|
|
})();
|