From cb4df2d7c68dc7cdbe29f3b7aa9798298a855c8f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 11 Jun 2020 13:37:55 +0100 Subject: [PATCH] GPS POI Logger - A simple app to log points of interest with their GPS coordinates and read them back onto your PC. Based on the https://www.espruino.com/Bangle.js+Storage tutorial --- apps.json | 13 +++++++ apps/gpspoilog/ChangeLog | 1 + apps/gpspoilog/app-icon.js | 1 + apps/gpspoilog/app.js | 67 +++++++++++++++++++++++++++++++++ apps/gpspoilog/app.png | Bin 0 -> 1366 bytes apps/gpspoilog/interface.html | 69 ++++++++++++++++++++++++++++++++++ 6 files changed, 151 insertions(+) create mode 100644 apps/gpspoilog/ChangeLog create mode 100644 apps/gpspoilog/app-icon.js create mode 100644 apps/gpspoilog/app.js create mode 100644 apps/gpspoilog/app.png create mode 100644 apps/gpspoilog/interface.html diff --git a/apps.json b/apps.json index 48428fb76..0fb69b9cf 100644 --- a/apps.json +++ b/apps.json @@ -1918,5 +1918,18 @@ {"name":"magnav.img","url":"magnav-icon.js","evaluate":true} ], "data":[{"name":"magnav.json"}] + }, + { "id": "gpspoilog", + "name": "GPS POI Logger", + "shortName":"GPS POI Log", + "icon": "app.png", + "version":"0.01", + "description": "A simple app to log points of interest with their GPS coordinates and read them back onto your PC. Based on the https://www.espruino.com/Bangle.js+Storage tutorial", + "tags": "outdoors", + "interface": "interface.html", + "storage": [ + {"name":"gpspoilog.app.js","url":"app.js"}, + {"name":"gpspoilog.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/gpspoilog/ChangeLog b/apps/gpspoilog/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/gpspoilog/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/gpspoilog/app-icon.js b/apps/gpspoilog/app-icon.js new file mode 100644 index 000000000..89f8d1bd7 --- /dev/null +++ b/apps/gpspoilog/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AEeGAAwttGMotLGMItPGLwuTGDQuVGDIfHq9RAAgvfDw+AFwtRq4weFZYAIwAvYJIguPSowvavl8F8qpFF6wwSF44AFvl9vo3GF8l80+t1unGAovkvovDvovrAAQvqR4IACR9TviGAovHABIuXF/4vgGAmAFx+AFzDxGACYvVGDAuWF+AwWFzAvwGCguaGCYucF+AwQFzwvwGBwugGBouiF+AwKF0gwJF0wwHF1AvwGAguqGAYusAH4A/AFI=")) diff --git a/apps/gpspoilog/app.js b/apps/gpspoilog/app.js new file mode 100644 index 000000000..2da0c0e7e --- /dev/null +++ b/apps/gpspoilog/app.js @@ -0,0 +1,67 @@ +var menuItems = { + "":{title:"GPS POI Log"}, + " ":{value:"No Fix"}, + "Tree" : ()=>addItem("Tree"), + "Gate" : ()=>addItem("Gate"), + "Flower" : ()=>addItem("Flower"), + "Plant" : ()=>addItem("Plant"), + "Bus Stop" : ()=>addItem("Bus Stop"), + "Pub" : ()=>addItem("Pub") +}; + +var menu = E.showMenu(menuItems); +var gps = { fix : 0}; +var gpsCount = 0; +var file = require("Storage").open("gpspoilog.csv","a"); + +function setStatus(msg) { + menuItems[" "].value = msg; + menu.draw(); +} + +Bangle.on('GPS',function(g) { + gps = g; + gpsCount++; + var msg; + if (g.fix) { + msg = g.satellites + " Satellites"; + } else { + msg = "No Fix"; + } + setStatus(msg+" "+"-\\|/"[gpsCount&3]); +}); + + +function addItem(name) { + if (!gps.fix) { + setStatus("Ignored - no fix"); + return; // don't do anything as no fix + } + // The fields we want to put in out CSV file + var csv = [ + 0|getTime(), // Time to the nearest second + gps.lat, + gps.lon, + gps.alt, + name + ]; + // Write data here + file.write(csv.join(",")+"\n"); + setStatus("Written"); +} + + +Bangle.loadWidgets(); +Bangle.drawWidgets(); +Bangle.setGPSPower(1); + + + +function getData(callback) { + var f = require("Storage").open("gpspoilog.csv","r"); + var l = f.readLine(); + while (l!==undefined) { + callback(l); + l = f.readLine(); + } +} diff --git a/apps/gpspoilog/app.png b/apps/gpspoilog/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b323bb283e0bd92d266330ac70a30747d54fc661 GIT binary patch literal 1366 zcmV-c1*!UpP)~mlm)5r=cSB~1-SKIv+v!6lhRY0wRa)DXHA~yss zDdebD94@-pcPtn@n9PN4)(Ny9+Y;z=1~x0C5qQv0^s0#ZXlA@{SFrYz!EE%iN}w$g z3TokF1tlKk{}$1Wp_Nmy=m=0|$o%X#nsO4dAjs^?wTG&ja=kx)>C1DR~je_u}b zky1qNbzLxbkd<2_XmBf_IC-tA(83UwMCrlEz`pNnuoh z+oi?NGR`J7c(o9K#Z_|wI2XB=?n~$-u|xu`1pwPp_bCICZ9rSTc@nDSUS38KP8X%@LR`;&MYfVu{oUuc&;Sr&lg!PHC!r_9IIG2zPW6 z(}_tF5aBTsJ=4o*k)a()o!Uq%%1SAm1Gba;7S4u+Wn}!QI4DF86_Z!AAyZV4lN7E_7h9S33qf7 z?&!RyKhNizbO8^G{$!$OR7=M{co?{CVhfPx_Yv?r*!Erbwq+CWJ2*bSiHm_~z<0#N z&?tcyEB6fud^fh;DVlhl`D~j4e;zaP1I)+|P~bS@j=WPmG!9!1y|Q$-(SRA>joPT4 zW7{g${ysqfW^js!s94)|U%S@ob5kF#&I7IC(9ghgZa5zBOMP|A^QOkGPGlD94M<W1L@Oq>+;I$(B7>C&~fPTkkZ}&pnQ<%-l}<@0VlljMCuYDN!c?qXYOj&=#t;uDaRtKzObIK&YxU zBBFMA<%_6Kvk4xuOaMSDwu1W81NCC8z?bzp$~u8f)y;QA>GeR|1ubEr)|=k2WkS{o zKzb^DU`$Z*ezsF*1UX3nps3)+JHTlJ)6+Ba`&>VTo(MThAh`5k%(kr{nGZg9M9I3~ z(u1*F>E + + + + +
+ + + + + + +