clkinfogps added screenshots, debug, consistant timer handling
parent
31c0f0059a
commit
8416f6e5c5
|
|
@ -1,5 +1,61 @@
|
||||||
# GPS Clock Info
|
# GPS Clock Info
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
A clock info that displays the Ordanance Survey (OS) grid reference
|
||||||
|
|
||||||
|
- The primary use is for walking where a GPS fix that is 2 minutes old is
|
||||||
|
perfectly fine for providing an OS map grid reference.
|
||||||
|
- Saves power by only turning the GPS on for the time it takes to get a fix.
|
||||||
|
- It then switches the GPS off for 90 seconds before trying to get the next fix
|
||||||
|
- At the start of the walk update the GPS with using one of the AGPS apps. This will
|
||||||
|
significantly reduce the time to the first fix.
|
||||||
|
- Displays the GPS time and number of satelites while waiting for a fix.
|
||||||
|
- The fix is invalidated after 4 minutes and will display 00:00:00 0
|
||||||
|
or the gps time while the gps is powered on and searching for a fix.
|
||||||
|
- If the display is shows solid 00:00:00 0 then tap the clkinfo to restart it
|
||||||
|
as it will have timed out after 4 minutes
|
||||||
|
- I suggest installing the GPS power widget so that you can be assured
|
||||||
|
when the GPS is draining power.
|
||||||
|
- It is unlikley that this style of gps clock info will work well with the Recorder
|
||||||
|
app as that would hold the GPS power permantly on all the time during the
|
||||||
|
recording.
|
||||||
|
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Above: The GPS is powered on and waiting for a fix.
|
||||||
|
- The GPS widget shows yellow indicating powered on
|
||||||
|
- The time from the GPS chip is displayed with the satellite count
|
||||||
|
- The time from the GPS chip is incrementing approximately every second
|
||||||
|
- Note the time on the GPS is in UTC and not the current timezone
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Above: The GPS has a fix
|
||||||
|
- The OS grid reference has been calculated
|
||||||
|
- The GPS has been turned off for 90 seconds
|
||||||
|
- The GPS widget is grey showing the GPS is off
|
||||||
|
- You will not see the GPS widget turn green as the GPS is turned off after a fix
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Above: The GPS has been powered on after 90 seconds and is waiting for a fix
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Above: The GPS has not had a fix for 4 minutes and the cycle has stopped
|
||||||
|
- The time from the GPS is 00:00:00 0, indicating that the GPS not on
|
||||||
|
- The GPS widget is grey showing the GPS is off
|
||||||
|
- Tap the clock_info to restart the GPS clock info
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/)
|
Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@
|
||||||
var fixTs;
|
var fixTs;
|
||||||
var geo = require("geotools");
|
var geo = require("geotools");
|
||||||
|
|
||||||
|
var debug = function(o) {
|
||||||
|
console.log(o);
|
||||||
|
};
|
||||||
|
|
||||||
var resetLastFix = function() {
|
var resetLastFix = function() {
|
||||||
last_fix = {
|
last_fix = {
|
||||||
fix: 0,
|
fix: 0,
|
||||||
|
|
@ -26,6 +30,35 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var clearTimer = function() {
|
||||||
|
if (timeout) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = undefined;
|
||||||
|
debug("timer cleared");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var queueGPSon = function() {
|
||||||
|
clearTimer();
|
||||||
|
// power on the GPS again in 90 seconds
|
||||||
|
timeout = setTimeout(function() {
|
||||||
|
timeout = undefined;
|
||||||
|
Bangle.setGPSPower(1,"clkinfo");
|
||||||
|
}, 90000);
|
||||||
|
debug("gps on queued");
|
||||||
|
};
|
||||||
|
|
||||||
|
var queueGPSoff = function() {
|
||||||
|
// turn off after 5 minutes, sooner if we get a fix
|
||||||
|
clearTimer();
|
||||||
|
timeout = setTimeout(function() {
|
||||||
|
timeout = undefined;
|
||||||
|
Bangle.setGPSPower(0,"clkinfo");
|
||||||
|
resetLastFix();
|
||||||
|
}, 300000);
|
||||||
|
debug("gps off queued");
|
||||||
|
};
|
||||||
|
|
||||||
var onGPS = function(fix) {
|
var onGPS = function(fix) {
|
||||||
//console.log(fix);
|
//console.log(fix);
|
||||||
last_fix.time = fix.time;
|
last_fix.time = fix.time;
|
||||||
|
|
@ -35,17 +68,10 @@
|
||||||
last_fix = fix;
|
last_fix = fix;
|
||||||
fixTs = Math.round(getTime());
|
fixTs = Math.round(getTime());
|
||||||
// cancel the timeout, if not already timed out
|
// cancel the timeout, if not already timed out
|
||||||
if (this.timeout) {
|
clearTimer();
|
||||||
clearTimeout(timeout);
|
|
||||||
this.timeout = undefined;
|
|
||||||
}
|
|
||||||
// power off the GPS
|
// power off the GPS
|
||||||
Bangle.setGPSPower(0,"clkinfo");
|
Bangle.setGPSPower(0,"clkinfo");
|
||||||
// power on the GPS again in 90 seconds
|
queueGPSon();
|
||||||
timeout = setTimeout(function() {
|
|
||||||
timeout = undefined;
|
|
||||||
Bangle.setGPSPower(1,"clkinfo");
|
|
||||||
}, 90000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if our last fix was more than 4 minutes ago, reset the fix to show gps time + satelites
|
// if our last fix was more than 4 minutes ago, reset the fix to show gps time + satelites
|
||||||
|
|
@ -63,7 +89,7 @@
|
||||||
|
|
||||||
// show gps time and satelite count
|
// show gps time and satelite count
|
||||||
if (!last_fix.fix)
|
if (!last_fix.fix)
|
||||||
return formatTime(last_fix.time) + '.' + last_fix.satelites;
|
return formatTime(last_fix.time) + ' ' + last_fix.satellites;
|
||||||
|
|
||||||
return geo.gpsToOSMapRef(last_fix);
|
return geo.gpsToOSMapRef(last_fix);
|
||||||
};
|
};
|
||||||
|
|
@ -77,27 +103,25 @@
|
||||||
text: gpsText()
|
text: gpsText()
|
||||||
}); },
|
}); },
|
||||||
run : function() {
|
run : function() {
|
||||||
|
console.log("run");
|
||||||
|
// if the timer is already runnuing reset it, we can get multiple run calls by tapping
|
||||||
|
clearTimer();
|
||||||
Bangle.setGPSPower(1,"clkinfo");
|
Bangle.setGPSPower(1,"clkinfo");
|
||||||
/* turn off after 5 minutes, sooner if we get a fix */
|
// turn GPS off after 5 mins if we dont get a fix, sooner if we get a fix
|
||||||
this.timeout = setTimeout(function() {
|
queueGPSoff();
|
||||||
this.timeout = undefined;
|
|
||||||
Bangle.setGPSPower(0,"clkinfo");
|
|
||||||
resetLastFix();
|
|
||||||
}, 300000);
|
|
||||||
},
|
},
|
||||||
show: function () {
|
show: function () {
|
||||||
|
console.log("show");
|
||||||
resetLastFix();
|
resetLastFix();
|
||||||
fixTs = Math.round(getTime());
|
fixTs = Math.round(getTime());
|
||||||
Bangle.on("GPS",onGPS);
|
Bangle.on("GPS",onGPS);
|
||||||
this.run();
|
this.run();
|
||||||
},
|
},
|
||||||
hide: function() {
|
hide: function() {
|
||||||
|
console.log("hide");
|
||||||
|
clearTimer();
|
||||||
Bangle.setGPSPower(0,"clkinfo");
|
Bangle.setGPSPower(0,"clkinfo");
|
||||||
Bangle.removeListener("GPS", onGPS);
|
Bangle.removeListener("GPS", onGPS);
|
||||||
if (this.timeout) {
|
|
||||||
clearTimeout(this.timeout);
|
|
||||||
this.timeout = undefined;
|
|
||||||
}
|
|
||||||
resetLastFix();
|
resetLastFix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
Loading…
Reference in New Issue