Merge pull request #641 from hughbarney/master
added gps_get|set_settings, restore to SuperE setup on poweroff()master
commit
7104eaec24
|
|
@ -2624,7 +2624,7 @@
|
|||
"name": "Low power GPS Service",
|
||||
"shortName":"GPS Service",
|
||||
"icon": "gpsservice.png",
|
||||
"version":"0.01",
|
||||
"version":"0.02",
|
||||
"description": "low power GPS widget",
|
||||
"tags": "gps outdoors navigation",
|
||||
"readme": "README.md",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
0.01: New App
|
||||
0.02: Restore to SuperE mode on power off.
|
||||
|
|
@ -63,6 +63,64 @@ Service. Go to Settings, select App/Widgets and then 'GPS Service'.
|
|||
|
||||

|
||||
|
||||
## Interface for Apps
|
||||
|
||||
The code below demonstrates how you can setup and start the gpsservice from your own App.
|
||||
|
||||
```js
|
||||
function test_gps_on() {
|
||||
|
||||
var settings = WIDGETS.gpsservice.gps_get_settings();
|
||||
|
||||
// change the settings to what you require
|
||||
settings.gpsservice = true;
|
||||
settings.update = 65;
|
||||
settings.search = 5;
|
||||
settings.power_mode = "PSMOO";
|
||||
|
||||
WIDGETS.gpsservice.gps_set_settings(settings);
|
||||
WIDGETS.gpsservice.reload(); // will power on
|
||||
}
|
||||
```
|
||||
|
||||
In your app can retrieve the last fix as and when required.
|
||||
|
||||
```js
|
||||
var fix = {
|
||||
fix: 0,
|
||||
alt: 0,
|
||||
lat: 0,
|
||||
lon: 0,
|
||||
speed: 0,
|
||||
time: 0,
|
||||
satellites: 0
|
||||
};
|
||||
|
||||
// only attempt to get gps fix if gpsservice is loaded
|
||||
if (WIDGETS.gpsservice !== undefined) {
|
||||
fix = WIDGETS.gpsservice.gps_get_fix();
|
||||
gps_on = WIDGETS.gpsservice.gps_get_status();
|
||||
}
|
||||
|
||||
if (fix.fix) {
|
||||
var time = formatTime(fix.time);
|
||||
var age = timeSince(time);
|
||||
```
|
||||
|
||||
When done you can turn the gpsservice off using the code below.
|
||||
|
||||
```js
|
||||
function test_gps_off() {
|
||||
|
||||
var settings = WIDGETS.gpsservice.gps_get_settings();
|
||||
|
||||
settings.gpsservice = false;
|
||||
settings.power_mode = "SuperE";
|
||||
|
||||
WIDGETS.gpsservice.gps_set_settings(settings);
|
||||
WIDGETS.gpsservice.reload(); // will power off
|
||||
}
|
||||
```
|
||||
|
||||
## To Do List
|
||||
* add a logging option with options for interval between log points
|
||||
|
|
|
|||
|
|
@ -229,3 +229,31 @@ function setupGPS() {
|
|||
Bangle.on('GPS',onGPS);
|
||||
}
|
||||
|
||||
function test_gps_on() {
|
||||
|
||||
var settings = WIDGETS.gpsservice.gps_get_settings();
|
||||
|
||||
settings.gpsservice = true;
|
||||
settings.update = 65;
|
||||
settings.search = 5;
|
||||
settings.power_mode = "PSMOO";
|
||||
|
||||
WIDGETS.gpsservice.gps_set_settings(settings);
|
||||
WIDGETS.gpsservice.reload(); // will power on
|
||||
}
|
||||
|
||||
|
||||
function test_gps_off() {
|
||||
|
||||
var settings = WIDGETS.gpsservice.gps_get_settings();
|
||||
|
||||
settings.gpsservice = false;
|
||||
settings.power_mode = "SuperE";
|
||||
|
||||
WIDGETS.gpsservice.gps_set_settings(settings);
|
||||
WIDGETS.gpsservice.reload(); // will power off
|
||||
}
|
||||
|
||||
// test_gps_on();
|
||||
// test_gps_off();
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
var settings = {};
|
||||
var fixToggle = false; // toggles once for each reading
|
||||
var have_fix = false;
|
||||
var debug = false;
|
||||
|
||||
var last_fix = {
|
||||
fix: 0,
|
||||
|
|
@ -15,17 +16,20 @@
|
|||
|
||||
function gps_get_fix() { return last_fix; }
|
||||
function gps_get_status() { return WIDGETS.gpsservice.width === 24 ? true : false;}
|
||||
function gps_get_version() { return "0.1"; }
|
||||
function gps_get_version() { return "0.2"; }
|
||||
|
||||
function log_debug(o) {
|
||||
if (debug) console.log(o);
|
||||
}
|
||||
|
||||
function gps_set_debug(v) {
|
||||
debug = v;
|
||||
}
|
||||
|
||||
// Called by the GPS widget settings to reload settings and decide what to do
|
||||
function reload() {
|
||||
settings = require("Storage").readJSON("gpsservice.settings.json",1)||{};
|
||||
settings.gpsservice = settings.gpsservice||false;
|
||||
settings.update = settings.update||120;
|
||||
settings.search = settings.search||5;
|
||||
settings.power_mode = settings.power_mode||"SuperE";
|
||||
//console.log(settings);
|
||||
|
||||
settings = gps_get_settings();
|
||||
log_debug(settings);
|
||||
Bangle.removeListener('GPS',onGPS);
|
||||
|
||||
if (settings.gpsservice) {
|
||||
|
|
@ -35,6 +39,26 @@
|
|||
}
|
||||
}
|
||||
|
||||
// retrieve the settings from Storage, can be called by external apps
|
||||
function gps_get_settings() {
|
||||
var sets = require("Storage").readJSON("gpsservice.settings.json",1)||{};
|
||||
sets.gpsservice = sets.gpsservice||false;
|
||||
sets.update = sets.update||120;
|
||||
sets.search = sets.search||5;
|
||||
sets.power_mode = sets.power_mode||"SuperE";
|
||||
return sets;
|
||||
}
|
||||
|
||||
// pass in the required settings, can be called by external apps
|
||||
function gps_set_settings(sets) {
|
||||
settings.gpsservice = sets.gpsservice||false;
|
||||
settings.update = sets.update||120;
|
||||
settings.search = sets.search||5;
|
||||
settings.power_mode = sets.power_mode||"SuperE";
|
||||
require("Storage").write("gpsservice.settings.json", settings);
|
||||
}
|
||||
|
||||
// issue: currently possible to call this without having set settings.gpsservice in settings file
|
||||
function gps_power_on() {
|
||||
have_fix = false;
|
||||
fixToggle = false;
|
||||
|
|
@ -43,6 +67,7 @@
|
|||
}
|
||||
|
||||
function gps_power_off() {
|
||||
setupSuperE(); // return to expected setup for other apps
|
||||
Bangle.setGPSPower(0);
|
||||
have_fix = false;
|
||||
fixToggle = false;
|
||||
|
|
@ -61,35 +86,42 @@
|
|||
|
||||
function setupGPS() {
|
||||
Bangle.setGPSPower(1);
|
||||
//console.log(settings);
|
||||
|
||||
if (settings.power_mode === "PSMOO") {
|
||||
//console.log("setupGPS() PSMOO");
|
||||
UBX_CFG_RESET();
|
||||
wait(100);
|
||||
|
||||
UBX_CFG_PM2(settings.update, settings.search);
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_RXM();
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_SAVE();
|
||||
wait(20);
|
||||
setupPSMOO();
|
||||
} else {
|
||||
//console.log("setupGPS() Super-E");
|
||||
UBX_CFG_RESET();
|
||||
wait(100);
|
||||
|
||||
UBX_CFG_PMS();
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_SAVE();
|
||||
wait(20);
|
||||
setupSuperE();
|
||||
}
|
||||
Bangle.on('GPS',onGPS);
|
||||
}
|
||||
|
||||
function setupPSMOO() {
|
||||
log_debug("setupGPS() PSMOO");
|
||||
UBX_CFG_RESET();
|
||||
wait(100);
|
||||
|
||||
UBX_CFG_PM2(settings.update, settings.search);
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_RXM();
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_SAVE();
|
||||
wait(20);
|
||||
}
|
||||
|
||||
function setupSuperE() {
|
||||
log_debug("setupGPS() Super-E");
|
||||
UBX_CFG_RESET();
|
||||
wait(100);
|
||||
|
||||
UBX_CFG_PMS();
|
||||
wait(20);
|
||||
|
||||
UBX_CFG_SAVE();
|
||||
wait(20);
|
||||
}
|
||||
|
||||
function writeGPScmd(cmd) {
|
||||
var d = [0xB5,0x62]; // sync chars
|
||||
d = d.concat(cmd);
|
||||
|
|
@ -201,7 +233,7 @@
|
|||
function onGPS(fix) {
|
||||
fixToggle = !fixToggle;
|
||||
WIDGETS.gpsservice.draw();
|
||||
|
||||
log_debug(fix);
|
||||
last_fix.satellites = fix.satellites;
|
||||
|
||||
/*
|
||||
|
|
@ -236,12 +268,15 @@
|
|||
gps_get_status:gps_get_status,
|
||||
gps_get_fix:gps_get_fix,
|
||||
gps_get_version:gps_get_version,
|
||||
gps_get_settings:gps_get_settings,
|
||||
gps_set_settings:gps_set_settings,
|
||||
gps_set_debug:gps_set_debug,
|
||||
reload:function() {
|
||||
reload();
|
||||
Bangle.drawWidgets(); // relayout all widgets
|
||||
reload();
|
||||
Bangle.drawWidgets(); // relayout all widgets
|
||||
}};
|
||||
|
||||
// load settings, set correct widget width
|
||||
// load settings, set correct widget width
|
||||
reload();
|
||||
|
||||
})();
|
||||
|
|
|
|||
Loading…
Reference in New Issue