Merge branch 'espruino:master' into master

pull/925/head
Ronin0000 2021-09-30 17:22:33 -07:00 committed by GitHub
commit 7846b48cf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 69 additions and 47 deletions

View File

@ -1124,9 +1124,9 @@
"id": "gpsinfo",
"name": "GPS Info",
"icon": "gps-info.png",
"version":"0.04",
"version":"0.05",
"description": "An application that displays information about altitude, lat/lon, satellites and time",
"tags": "gps",
"tags": "gps,b2",
"type": "app",
"storage": [
{"name":"gpsinfo.app.js","url": "gps-info.js"},

View File

@ -94,9 +94,9 @@ function startRecord(force) {
var Layout = require("Layout");
var layout = new Layout({ type: "v", c: [
{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", 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},
]
},[ // Buttons...

View File

@ -1,3 +1,4 @@
0.02: Ensure screen doesn't display garbage at startup
0.03: Show number of satellites while waiting for fix
0.04: Add Maidenhead readout of GPS location
0.05: Refactor to use 'layout' library for multi-device support

View File

@ -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);
Bangle.setLCDMode("doublebuffered");
var Layout = require("Layout");
var layout;
Bangle.setGPSPower(1, "app");
E.showMessage("Loading..."); // avoid showing rubbish on screen
var lastFix = {
fix: 0,
fix: -1,
alt: 0,
lat: 0,
lon: 0,
@ -31,14 +34,14 @@ function getMaidenHead(param1,param2){
lon = param2;
lon = lon + 180;
t = lon/20;
var t = lon/20;
fLon = Math.floor(t);
t = (t % fLon)*10;
sqLon = Math.floor(t);
t=(t-sqLon)*24;
t = (t-sqLon)*24;
subLon = Math.floor(t);
extLon = Math.floor((t-subLon)*10);
lat = lat + 90;
t = lat/10;
fLat = Math.floor(t);
@ -51,43 +54,58 @@ function getMaidenHead(param1,param2){
return U[fLon]+U[fLat]+sqLon+sqLat+L[subLon]+L[subLat]+extLon+extLat;
}
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;
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 locale = require("locale");
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);
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;
} else {
g.setFontAlign(0, 1);
g.setFont("6x8", 2);
g.drawString("Waiting for GPS", 120, 80);
layout.sat.label = fix.satellites;
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);
layout.progress.label = ".".repeat(nofix) + " ".repeat(4-nofix);
}
g.flip();
layout.render();
}
Bangle.loadWidgets();
Bangle.drawWidgets();
Bangle.on('GPS', onGPS);

View File

@ -312,14 +312,17 @@ Layout.prototype.update = function() {
l._h = 24;
l._w = 14 + l.label.length*8;
}, "img": function(l) {
var src = l.src();
if (typeof(src) === 'object') {
l._h = ("width" in src) ? src.width : src.getWidth();
l._w = ("height" in src) ? src.height : src.getHeight();
var src = l.src(); // get width and height out of image
if (src[0]) {
l._w = src[0];
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 {
var im = E.toString(src);
l._h = im.charCodeAt(0);
l._w = im.charCodeAt(1);
l._w = im.charCodeAt(0);
l._h = im.charCodeAt(1);
}
}, "": function(l) {
// size should already be set up in width/height