forked from FOSS/BangleApps
Merge branch 'espruino:master' into master
commit
7846b48cf6
|
@ -1124,9 +1124,9 @@
|
||||||
"id": "gpsinfo",
|
"id": "gpsinfo",
|
||||||
"name": "GPS Info",
|
"name": "GPS Info",
|
||||||
"icon": "gps-info.png",
|
"icon": "gps-info.png",
|
||||||
"version":"0.04",
|
"version":"0.05",
|
||||||
"description": "An application that displays information about altitude, lat/lon, satellites and time",
|
"description": "An application that displays information about altitude, lat/lon, satellites and time",
|
||||||
"tags": "gps",
|
"tags": "gps,b2",
|
||||||
"type": "app",
|
"type": "app",
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"gpsinfo.app.js","url": "gps-info.js"},
|
{"name":"gpsinfo.app.js","url": "gps-info.js"},
|
||||||
|
|
|
@ -94,9 +94,9 @@ function startRecord(force) {
|
||||||
var Layout = require("Layout");
|
var Layout = require("Layout");
|
||||||
var layout = new Layout({ type: "v", c: [
|
var layout = new Layout({ type: "v", c: [
|
||||||
{type:"txt", font:"6x8", label:"Samples", pad:2},
|
{type:"txt", font:"6x8", label:"Samples", pad:2},
|
||||||
{type:"txt", id:"samples", font:"6x8:2", label:" - ", pad:5},
|
{type:"txt", id:"samples", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg},
|
||||||
{type:"txt", font:"6x8", label:"Time", pad:2},
|
{type:"txt", font:"6x8", label:"Time", pad:2},
|
||||||
{type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5},
|
{type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg},
|
||||||
{type:"txt", font:"6x8:2", label:"RECORDING", bgCol:"#f00", pad:5, fillx:1},
|
{type:"txt", font:"6x8:2", label:"RECORDING", bgCol:"#f00", pad:5, fillx:1},
|
||||||
]
|
]
|
||||||
},[ // Buttons...
|
},[ // Buttons...
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
0.02: Ensure screen doesn't display garbage at startup
|
0.02: Ensure screen doesn't display garbage at startup
|
||||||
0.03: Show number of satellites while waiting for fix
|
0.03: Show number of satellites while waiting for fix
|
||||||
0.04: Add Maidenhead readout of GPS location
|
0.04: Add Maidenhead readout of GPS location
|
||||||
|
0.05: Refactor to use 'layout' library for multi-device support
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
var img = require("heatshrink").decompress(atob("mEwghC/AH4AKg9wC6t3u4uVC6wWBI6t3uJeVuMQCqcBLisAi4XLxAABFxAXKgc4DBAuBRhQXEDAq7MmYXEwBHEXZYXFGAOqAAKDMmczC4mIC62CC50PC4JIBkQABiIvRmURAAUSjQXSFwMoxGKC6CRFwUSVYgXLPIgXXwMYegoXLJAYXCGBnzGA0hPQIwMgYwGC6gwCC4ZIMC4gYBC604C4ZISmcRVgapQAAMhC6GIJIwXCMBcIxGDDBAuLC4IwGAARGMAAQWGmAXPJQoWMC4pwCCpoXJAB4XXAH4A/ABQA="))
|
function satelliteImage() {
|
||||||
|
return require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4AGnE4F1wvsF34wgFldcLdyMYsoACF1WJF4YxPFzOtF4wxNFzAvKSiIvU1ovIGAkJAAQucF5QxCFwYwbF4QwLrwvjYIVfrwABrtdq9Wqwvkq4oCAAtXmYvi1teE4NXrphCrxoCGAbvdSIoAHNQNeFzQvGeRQvCsowrYYNfF8YwHZQQFCF8QwGF4owjeYovBroHEMERhEF8IwNrtWryYFF8YwCq4vhGBeJF5AwaxIwKwVXFwwvandfMJeJF8M6nZiLGQIvdstfGAVlGBZkCxJeZJQIwCGIRjMFzYACGIc6r/+FsIvGGIYABEzYvPGQYvusovkAH4A/AH4A/ACo="));
|
||||||
|
}
|
||||||
|
|
||||||
Bangle.setGPSPower(1);
|
var Layout = require("Layout");
|
||||||
Bangle.setLCDMode("doublebuffered");
|
var layout;
|
||||||
|
Bangle.setGPSPower(1, "app");
|
||||||
E.showMessage("Loading..."); // avoid showing rubbish on screen
|
E.showMessage("Loading..."); // avoid showing rubbish on screen
|
||||||
|
|
||||||
var lastFix = {
|
var lastFix = {
|
||||||
fix: 0,
|
fix: -1,
|
||||||
alt: 0,
|
alt: 0,
|
||||||
lat: 0,
|
lat: 0,
|
||||||
lon: 0,
|
lon: 0,
|
||||||
|
@ -31,11 +34,11 @@ function getMaidenHead(param1,param2){
|
||||||
lon = param2;
|
lon = param2;
|
||||||
|
|
||||||
lon = lon + 180;
|
lon = lon + 180;
|
||||||
t = lon/20;
|
var t = lon/20;
|
||||||
fLon = Math.floor(t);
|
fLon = Math.floor(t);
|
||||||
t = (t % fLon)*10;
|
t = (t % fLon)*10;
|
||||||
sqLon = Math.floor(t);
|
sqLon = Math.floor(t);
|
||||||
t=(t-sqLon)*24;
|
t = (t-sqLon)*24;
|
||||||
subLon = Math.floor(t);
|
subLon = Math.floor(t);
|
||||||
extLon = Math.floor((t-subLon)*10);
|
extLon = Math.floor((t-subLon)*10);
|
||||||
|
|
||||||
|
@ -51,43 +54,58 @@ function getMaidenHead(param1,param2){
|
||||||
return U[fLon]+U[fLat]+sqLon+sqLat+L[subLon]+L[subLat]+extLon+extLat;
|
return U[fLon]+U[fLat]+sqLon+sqLat+L[subLon]+L[subLat]+extLon+extLat;
|
||||||
}
|
}
|
||||||
function onGPS(fix) {
|
function onGPS(fix) {
|
||||||
|
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" },
|
||||||
|
]},[],{lazy:true});
|
||||||
|
} 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" },
|
||||||
|
{type:"txt", font:"6x8", pad:3, label:"Satellites" }
|
||||||
|
]},
|
||||||
|
{type:"txt", font:"6x8", label:"", id:"progress" }
|
||||||
|
]},[],{lazy:true});
|
||||||
|
}
|
||||||
|
g.clearRect(0,24,g.getWidth(),g.getHeight());
|
||||||
|
layout.render();
|
||||||
|
}
|
||||||
lastFix = 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) {
|
if (fix.fix) {
|
||||||
nofix = 0;
|
nofix = 0;
|
||||||
var alt = fix.alt;
|
var locale = require("locale");
|
||||||
var lat = fix.lat;
|
|
||||||
var lon = fix.lon;
|
|
||||||
var speed = fix.speed;
|
|
||||||
var time = formatTime(fix.time);
|
|
||||||
var satellites = fix.satellites;
|
var satellites = fix.satellites;
|
||||||
var maidenhead = getMaidenHead(lat,lon);
|
var maidenhead = getMaidenHead(fix.lat,fix.lon);
|
||||||
var s = 15;
|
layout.alt.label = "Altitude: "+locale.distance(fix.alt);
|
||||||
g.setFontVector(s);
|
layout.lat.label = "Lat: "+fix.lat.toFixed(6);
|
||||||
g.drawString("Altitude: "+alt+" m",10,36);
|
layout.lon.label = "Lon: "+fix.lon.toFixed(6);
|
||||||
g.drawString("Lat: "+lat,10,54);
|
layout.speed.label = "Speed: "+locale.speed(fix.speed);
|
||||||
g.drawString("Lon: "+lon,10,72);
|
layout.time.label = "Time: "+formatTime(fix.time);
|
||||||
g.drawString("Speed: "+speed.toFixed(1)+" km/h",10,90);
|
layout.sat.label = "Satellites: "+satellites;
|
||||||
g.drawString("Time: "+time,10,108);
|
layout.maidenhead.label = "Maidenhead: "+maidenhead;
|
||||||
g.drawString("Satellites: "+satellites,10,126);
|
|
||||||
g.drawString("Maidenhead: "+maidenhead,10,144);
|
|
||||||
} else {
|
} else {
|
||||||
g.setFontAlign(0, 1);
|
layout.sat.label = fix.satellites;
|
||||||
g.setFont("6x8", 2);
|
|
||||||
g.drawString("Waiting for GPS", 120, 80);
|
|
||||||
nofix = (nofix+1) % 4;
|
nofix = (nofix+1) % 4;
|
||||||
g.drawString(".".repeat(nofix) + " ".repeat(4-nofix), 120, 120);
|
layout.progress.label = ".".repeat(nofix) + " ".repeat(4-nofix);
|
||||||
// Show number of satellites:
|
|
||||||
g.setFontAlign(0,0);
|
|
||||||
g.setFont("6x8");
|
|
||||||
g.drawString(fix.satellites+" satellites", 120, 100);
|
|
||||||
}
|
}
|
||||||
g.flip();
|
layout.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
Bangle.on('GPS', onGPS);
|
Bangle.on('GPS', onGPS);
|
||||||
|
|
|
@ -312,14 +312,17 @@ Layout.prototype.update = function() {
|
||||||
l._h = 24;
|
l._h = 24;
|
||||||
l._w = 14 + l.label.length*8;
|
l._w = 14 + l.label.length*8;
|
||||||
}, "img": function(l) {
|
}, "img": function(l) {
|
||||||
var src = l.src();
|
var src = l.src(); // get width and height out of image
|
||||||
if (typeof(src) === 'object') {
|
if (src[0]) {
|
||||||
l._h = ("width" in src) ? src.width : src.getWidth();
|
l._w = src[0];
|
||||||
l._w = ("height" in src) ? src.height : src.getHeight();
|
l._h = src[1];
|
||||||
|
} else if ('object'==typeof src) {
|
||||||
|
l._w = ("width" in src) ? src.width : src.getWidth();
|
||||||
|
l._h = ("height" in src) ? src.height : src.getHeight();
|
||||||
} else {
|
} else {
|
||||||
var im = E.toString(src);
|
var im = E.toString(src);
|
||||||
l._h = im.charCodeAt(0);
|
l._w = im.charCodeAt(0);
|
||||||
l._w = im.charCodeAt(1);
|
l._h = im.charCodeAt(1);
|
||||||
}
|
}
|
||||||
}, "": function(l) {
|
}, "": function(l) {
|
||||||
// size should already be set up in width/height
|
// size should already be set up in width/height
|
||||||
|
|
Loading…
Reference in New Issue