From e7f4edbd3288408f7dc4d31149aaa1307598c690 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Thu, 21 Oct 2021 22:33:13 +0100 Subject: [PATCH 1/6] Added basic README and screenshots for a number of Apps --- apps/aclock/README.md | 4 ++++ apps/aclock/screenshot_analog.png | Bin 0 -> 3069 bytes apps/boldclk/README.md | 4 ++++ apps/boldclk/screenshot_bold.png | Bin 0 -> 3563 bytes apps/clock2x3/README.md | 4 ++++ apps/clock2x3/screenshot_pixel.png | Bin 0 -> 1926 bytes apps/ffcniftya/README.md | 4 ++++ apps/ffcniftya/screenshot_nifty.png | Bin 0 -> 3487 bytes apps/flappy/README.md | 5 +++++ apps/flappy/screenshot1_flappy.png | Bin 0 -> 2509 bytes apps/flappy/screenshot2_flappy.png | Bin 0 -> 2805 bytes apps/floralclk/README.md | 4 ++++ apps/floralclk/screenshot_floral.png | Bin 0 -> 6073 bytes apps/s7clk/README.md | 4 ++++ apps/s7clk/screenshot_s7segment.png | Bin 0 -> 2144 bytes apps/score/README.md | 3 +++ apps/score/screenshot_score.png | Bin 0 -> 1796 bytes apps/trex/README.md | 4 ++++ apps/trex/screenshot_trex.png | Bin 0 -> 668 bytes apps/waveclk/README.md | 4 ++++ 20 files changed, 40 insertions(+) create mode 100644 apps/aclock/README.md create mode 100644 apps/aclock/screenshot_analog.png create mode 100644 apps/boldclk/README.md create mode 100644 apps/boldclk/screenshot_bold.png create mode 100644 apps/clock2x3/README.md create mode 100644 apps/clock2x3/screenshot_pixel.png create mode 100644 apps/ffcniftya/README.md create mode 100644 apps/ffcniftya/screenshot_nifty.png create mode 100644 apps/flappy/README.md create mode 100644 apps/flappy/screenshot1_flappy.png create mode 100644 apps/flappy/screenshot2_flappy.png create mode 100644 apps/floralclk/README.md create mode 100644 apps/floralclk/screenshot_floral.png create mode 100644 apps/s7clk/README.md create mode 100644 apps/s7clk/screenshot_s7segment.png create mode 100644 apps/score/screenshot_score.png create mode 100644 apps/trex/README.md create mode 100644 apps/trex/screenshot_trex.png create mode 100644 apps/waveclk/README.md diff --git a/apps/aclock/README.md b/apps/aclock/README.md new file mode 100644 index 000000000..7d31cdae2 --- /dev/null +++ b/apps/aclock/README.md @@ -0,0 +1,4 @@ +# Analogue Clock + +![](screenshot_analog.png) + diff --git a/apps/aclock/screenshot_analog.png b/apps/aclock/screenshot_analog.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e84b4282a99cd420fd84f1bd07c1ce2bb43a04 GIT binary patch literal 3069 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 LNkvXXu0mjfYyh|2 literal 0 HcmV?d00001 diff --git a/apps/boldclk/README.md b/apps/boldclk/README.md new file mode 100644 index 000000000..0e7865b99 --- /dev/null +++ b/apps/boldclk/README.md @@ -0,0 +1,4 @@ +# Bold Clock + +![](screenshot_bold.png) + diff --git a/apps/boldclk/screenshot_bold.png b/apps/boldclk/screenshot_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..4024fca40e6014286442a37fb3d5518ad9747380 GIT binary patch literal 3563 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�Qbsi zcX6$Zh;(4hP5bL`E8nXFOsNT9yVlC6f+|Jb|&sSw6yY0XX7liF55UX3pYMbATmZGd%-={jJOZu{pq$OWppie69u2 z0m=p73*uR>Ta}6Yo8aZ6kq^B-U~g4&19;?~ESG`&_{6R-3Q%NqD8SLj4-$v_9KDs= zwc3(7$blE)-zSD`&3r3*i6i zagpoKD`1brEjVf0$mO$`B|j+ z(GeJJqS<8`U8KD>AO+g=mpJN=qfkWmNFA;@G5}14m>Uc{P7f};Z(B3vz%v6-iorcP zC1RmISpc3ve1VAcM7Cymz6HP(u?ygzNKy2l=$Zx8(K^xtOc9ylEDuLyioldqf}*X5 zZYy&Xz$@xCeRl(Rw~|@vG8*D&R6e6bUsQTSb5oyZ0JtrSarDVrX_(%PcDclLcOT(} zh37FD3Gk?@KmnM#K{K{XpF(ge6K&ayQZCYROh$kyxv-Y~5#wwPFv{Uj^wmx+yZ~;~ zgq{x68hO_GE_E|(5Ae)+DEgx3R1vRsmH?x*Qa9_}rrqIv`+nyf7y&kOI&%1ZV^AHf z1u!MT_AXoqa-`Re&yNKd0g9Y0=}!TebJ;>^0D8V-Re`&Sjs>_)Es(P{p05Bb$zv(s zj8IPxE;w1*9}VzGWE5ScFnI&~gb0f^N&!6hPFIpYO8~w@h|(I$#zGE1?Rf#L0PyS! zuimYnng>^kfVbNt0Y`%T`f5HefIDiUqudJMN)h;I7r=bYhCL`b lu;O$z)afrW%ERX?@E3q@&z3pg2j~C*002ovPDHLkV1kctqHX{H literal 0 HcmV?d00001 diff --git a/apps/clock2x3/README.md b/apps/clock2x3/README.md new file mode 100644 index 000000000..0b5d25f9d --- /dev/null +++ b/apps/clock2x3/README.md @@ -0,0 +1,4 @@ +# 2x3 Pixel Clock + +![](screenshot_pixel.png) + diff --git a/apps/clock2x3/screenshot_pixel.png b/apps/clock2x3/screenshot_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..4b09f06a1386602290e86ac4d2a42c2dff285b02 GIT binary patch literal 1926 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 L+?}f(34i+&w))`% literal 0 HcmV?d00001 diff --git a/apps/score/README.md b/apps/score/README.md index 1de1ccdb5..6a5bf8172 100644 --- a/apps/score/README.md +++ b/apps/score/README.md @@ -4,6 +4,9 @@ This app will allow you to keep scores for most kinds of sports. To correct a falsely awarded point simply open and close the menu within .5 seconds. This will put the app into correction mode (indicated by the `R`). In this mode any score increments will be decrements. To move back a set, reduce both players scores to 0, then decrement one of the scores once again. +## Screenshot +![](screenshot_score.png) + ## Bangle.js 1 | Keybinding | Description | |---------------------|------------------------------| diff --git a/apps/score/screenshot_score.png b/apps/score/screenshot_score.png new file mode 100644 index 0000000000000000000000000000000000000000..662c59e9ea49f1d1bcfc4ac093a998c9c3d83405 GIT binary patch literal 1796 zcmeHIc~g^j5dP&R5sN5A2UQwY`5=D^^H4qCWTndN~OE?T=})^_(LgRyBlv zK4sYJh~{Q<$&HRx>l(-0OWNn1!bGP-#R+dO;C9qO8zDDamsfc>prcm12gv&0nWTW@ zMhPfT+Lp0HgQi}^0Sw=kyipjN+5b79PcG)$F)S{%!2v~Te;I>E`vd@}_O;6g(B(LZ z1B3*nt0AQ08VUn7v0wBcbP)d(-L;?IF4fMwIQP;DAP7OIp%*B6!=eQfR?42{9E&j? z!gV4kUB%d5B*pm(HhloUlWr;Uq^YoB9itn7Kue}P8Z~-*?E2bSYZIcgXk|=0oLm+x z_H4n#@@3wE&UdyQ+(z6A&18Ar)19^1&~kcKEyiSkeT`kJ6xy?I`c9SX265&M5gv48 zrk-uMP>sCsM#6CEua%bo>XliI?j|e893>kuJGK8=h7n8$s!{ko5vFRrju%Elbp@5C z0y!#fmt=mJ-)y>99H{pM83A{=!{+Ud)@&}t&{T8LF&BA#X`CQ_PEm$jZ0B}!;vqXD z(94i7DweX!2c2VvK`)D7|7f9PpUV`_o7pGs$g(+~IUdvVl)w0L3$I$O?(X|TF?@lm z-BGnUr;w^&_)k%@w{HM6-rE?yr7I)3YLJAS%=p7M(wnBph7a`DDwPvdpMr2mBj?;=cR%^$C{@`8uG}EBH^LW!F z2k_eb40l;FC8T6mtww-n96Dfl44~^-WQz>|5m+^%iKcHA>w)$S0+FwTHUZNS?!#0k9WxW^g%n_MzGwDO+d_?!@*NIll^;GIi z3R-qD$P#7`zm{EMfRTBja)&xSj4C{OW6PIPt-S)oqPWAuz+(4+hEaG&I zP9g;xH9=s&?9?NLou=2SN36LIi1S|_p4^%yOX153zsD^TA<{+rAAZCoHN7k{2#Du5 z#`}bE$AY)ZtI~0rtxyR@-e}Lvi)m|HoaRyaN{0~3RWow!c=bs7*%7CZ8NJ<2)W3V^ z!^O(c&Ci~n0SI18&$HC^b^uLR3z;eKaP;Vgsmq3TI!zTauH+(gAY*zZC6grOhNYS{ zJFG>O$x|pDTLNyK96NPnsd$N4|Lubca3Xf8FxI)cq84`bXU%SI7z~7UbYB&aKv)}J e+(G!4$IH6DqRVPDJzuVRYryRgh0Gz*vi}6(DCm;_ literal 0 HcmV?d00001 diff --git a/apps/trex/README.md b/apps/trex/README.md new file mode 100644 index 000000000..03e3f5883 --- /dev/null +++ b/apps/trex/README.md @@ -0,0 +1,4 @@ +# T-Rex + +![](screenshot_trex.png) + diff --git a/apps/trex/screenshot_trex.png b/apps/trex/screenshot_trex.png new file mode 100644 index 0000000000000000000000000000000000000000..a66cc013fa349cf661d12c4e511d0fd7529f0bda GIT binary patch literal 668 zcmV;N0%QG&P)Px%R!KxbRCr$P+~JagAPfXxegB8HV^4Z%iny#qN7(+kn>Nt$86#-zye!Ky=>ZGO z^E@T8_5bx@3GM6aYqNl1+bIY7M%>W-UjgH`pU9sKH5qNOQ-hEUPFs5K^FO&NdEm=4 z_y{+lKM~oEZT{?xNKcHRfNKUiYUWm->_M_M2QT0Xfm-B>u4{IRN5#S=;*;{*S$t%a z0w%9$Aek)OzZ9&_U?h`;`@etFz-dx#r*3<5Wu%<+8q);WUsbhh@m}H3ah(QMIVe+~ z23EEP0;9Xh$Z@AKcw{(q>;gum$T$I$aA-3Dqf%s?fJr#CnSfC#GETrG9NJ94s1z9| zU=j{(CSX*Gj1w>khc**1Dn-T#n1n-{2^f_k;{;5?q0I!0N|ABH0$+83R=~k`5)TJ# zzwW>8_0bn?hXT&s!)I^oj=&c1RwAOl!z^F{lk=lYGnI&Tmf4<4cR{H{G{X1DI>(gc-s#zT%ii6e&P4=o0Ram*SRlB2Ww3yQ1%kW3 zEQ8lmqQPSsx_fvY?0=Ugw=!xqr)+Uv;HnJuix+S31DqS2f9~klPmb32HT|*a?-Qal zuD$V~<1Br~H?ZvpeKR)8(EeFiWY6-aElYdeS>zWB@m^wF=+_(o0000 Date: Sat, 23 Oct 2021 20:25:35 +0100 Subject: [PATCH 2/6] GPS Touch: swipe left, right to change display --- apps.json | 15 +++ apps/gpstouch/README.md | 5 + apps/gpstouch/geotools.js | 128 +++++++++++++++++++ apps/gpstouch/gpstouch.app.js | 222 +++++++++++++++++++++++++++++++++ apps/gpstouch/gpstouch.icon.js | 1 + apps/gpstouch/gpstouch.png | Bin 0 -> 1571 bytes 6 files changed, 371 insertions(+) create mode 100644 apps/gpstouch/README.md create mode 100644 apps/gpstouch/geotools.js create mode 100644 apps/gpstouch/gpstouch.app.js create mode 100644 apps/gpstouch/gpstouch.icon.js create mode 100644 apps/gpstouch/gpstouch.png diff --git a/apps.json b/apps.json index 51cca784b..b1ad57074 100644 --- a/apps.json +++ b/apps.json @@ -4037,5 +4037,20 @@ {"name":"vernierrespirate.img","url":"app-icon.js","evaluate":true} ], "data": [{"name":"vernierrespirate.json"}] + }, + { + "id": "gpstouch", + "name": "GPS Touch", + "version": "0.01", + "description": "A touch based GPS watch, shows OS map reference", + "icon": "gpstouch.png", + "tags": "tools,app", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"geotools","url":"geotools.js"}, + {"name":"gpstouch.app.js","url":"gpstouch.app.js"}, + {"name":"gpstouch.img","url":"gpstouch.icon.js","evaluate":true} + ] } ] diff --git a/apps/gpstouch/README.md b/apps/gpstouch/README.md new file mode 100644 index 000000000..1d6bb5d17 --- /dev/null +++ b/apps/gpstouch/README.md @@ -0,0 +1,5 @@ +# GPS Touch + +## Screenshots + + diff --git a/apps/gpstouch/geotools.js b/apps/gpstouch/geotools.js new file mode 100644 index 000000000..5adc57872 --- /dev/null +++ b/apps/gpstouch/geotools.js @@ -0,0 +1,128 @@ +/** + * + * A module of Geo functions for use with gps fixes + * + * let geo = require("geotools"); + * let os = geo.gpsToOSGrid(fix); + * let ref = geo.gpsToOSMapRef(fix); + * + */ + +Number.prototype.toRad = function() { return this*Math.PI/180; }; +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Ordnance Survey Grid Reference functions (c) Chris Veness 2005-2014 */ +/* - www.movable-type.co.uk/scripts/gridref.js */ +/* - www.movable-type.co.uk/scripts/latlon-gridref.html */ +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +function OsGridRef(easting, northing) { + this.easting = 0|easting; + this.northing = 0|northing; +} +OsGridRef.latLongToOsGrid = function(point) { + var lat = point.lat.toRad(); + var lon = point.lon.toRad(); + + var a = 6377563.396, b = 6356256.909; // Airy 1830 major & minor semi-axes + var F0 = 0.9996012717; // NatGrid scale factor on central meridian + var lat0 = (49).toRad(), lon0 = (-2).toRad(); // NatGrid true origin is 49�N,2�W + var N0 = -100000, E0 = 400000; // northing & easting of true origin, metres + var e2 = 1 - (b*b)/(a*a); // eccentricity squared + var n = (a-b)/(a+b), n2 = n*n, n3 = n*n*n; + + var cosLat = Math.cos(lat), sinLat = Math.sin(lat); + var nu = a*F0/Math.sqrt(1-e2*sinLat*sinLat); // transverse radius of curvature + var rho = a*F0*(1-e2)/Math.pow(1-e2*sinLat*sinLat, 1.5); // meridional radius of curvature + var eta2 = nu/rho-1; + + var Ma = (1 + n + (5/4)*n2 + (5/4)*n3) * (lat-lat0); + var Mb = (3*n + 3*n*n + (21/8)*n3) * Math.sin(lat-lat0) * Math.cos(lat+lat0); + var Mc = ((15/8)*n2 + (15/8)*n3) * Math.sin(2*(lat-lat0)) * Math.cos(2*(lat+lat0)); + var Md = (35/24)*n3 * Math.sin(3*(lat-lat0)) * Math.cos(3*(lat+lat0)); + var M = b * F0 * (Ma - Mb + Mc - Md); // meridional arc + + var cos3lat = cosLat*cosLat*cosLat; + var cos5lat = cos3lat*cosLat*cosLat; + var tan2lat = Math.tan(lat)*Math.tan(lat); + var tan4lat = tan2lat*tan2lat; + + var I = M + N0; + var II = (nu/2)*sinLat*cosLat; + var III = (nu/24)*sinLat*cos3lat*(5-tan2lat+9*eta2); + var IIIA = (nu/720)*sinLat*cos5lat*(61-58*tan2lat+tan4lat); + var IV = nu*cosLat; + var V = (nu/6)*cos3lat*(nu/rho-tan2lat); + var VI = (nu/120) * cos5lat * (5 - 18*tan2lat + tan4lat + 14*eta2 - 58*tan2lat*eta2); + + var dLon = lon-lon0; + var dLon2 = dLon*dLon, dLon3 = dLon2*dLon, dLon4 = dLon3*dLon, dLon5 = dLon4*dLon, dLon6 = dLon5*dLon; + + var N = I + II*dLon2 + III*dLon4 + IIIA*dLon6; + var E = E0 + IV*dLon + V*dLon3 + VI*dLon5; + + return new OsGridRef(E, N); +}; + +/* + * converts northing, easting to standard OS grid reference. + * + * [digits=10] - precision (10 digits = metres) + * to_map_ref(8, 651409, 313177); => 'TG 5140 1317' + * to_map_ref(0, 651409, 313177); => '651409,313177' + * + */ +function to_map_ref(digits, easting, northing) { + if (![ 0,2,4,6,8,10,12,14,16 ].includes(Number(digits))) throw new RangeError(`invalid precision '${digits}'`); // eslint-disable-line comma-spacing + + let e = easting; + let n = northing; + + // use digits = 0 to return numeric format (in metres) - note northing may be >= 1e7 + if (digits == 0) { + const format = { useGrouping: false, minimumIntegerDigits: 6, maximumFractionDigits: 3 }; + const ePad = e.toLocaleString('en', format); + const nPad = n.toLocaleString('en', format); + return `${ePad},${nPad}`; + } + + // get the 100km-grid indices + const e100km = Math.floor(e / 100000), n100km = Math.floor(n / 100000); + + // translate those into numeric equivalents of the grid letters + let l1 = (19 - n100km) - (19 - n100km) % 5 + Math.floor((e100km + 10) / 5); + let l2 = (19 - n100km) * 5 % 25 + e100km % 5; + + // compensate for skipped 'I' and build grid letter-pairs + if (l1 > 7) l1++; + if (l2 > 7) l2++; + const letterPair = String.fromCharCode(l1 + 'A'.charCodeAt(0), l2 + 'A'.charCodeAt(0)); + + // strip 100km-grid indices from easting & northing, and reduce precision + e = Math.floor((e % 100000) / Math.pow(10, 5 - digits / 2)); + n = Math.floor((n % 100000) / Math.pow(10, 5 - digits / 2)); + + // pad eastings & northings with leading zeros + e = e.toString().padStart(digits/2, '0'); + n = n.toString().padStart(digits/2, '0'); + + return `${letterPair} ${e} ${n}`; +} + +/** + * + * Module exports section, example code below + * + * let geo = require("geotools"); + * let os = geo.gpsToOSGrid(fix); + * let ref = geo.gpsToOSMapRef(fix); + */ + +// get easting and northings +exports.gpsToOSGrid = function(gps_fix) { + return OsGridRef.latLongToOsGrid(gps_fix); +} + +// string with an OS Map grid reference +exports.gpsToOSMapRef = function(gps_fix) { + let os = OsGridRef.latLongToOsGrid(last_fix); + return to_map_ref(6, os.easting, os.northing); +} diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js new file mode 100644 index 000000000..3b2c54569 --- /dev/null +++ b/apps/gpstouch/gpstouch.app.js @@ -0,0 +1,222 @@ +const h = g.getHeight(); +const w = g.getWidth(); +let last_fix; + +function resetLastFix() { + last_fix = { + fix: 0, + alt: 0, + lat: 0, + lon: 0, + speed: 0, + time: 0, + course: 0, + satellites: 0 + }; +} + +function processFix(fix) { + last_fix.time = fix.time; + + if (fix.fix) { + if (!last_fix.fix) { + // we dont need to suppress this in quiet mode as it is user initiated + Bangle.buzz(); // buzz on first position + } + last_fix = fix; + } +} + +function draw() { + var d = new Date(); + var da = d.toString().split(" "); + var time = da[4].substr(0,5); + var hh = da[4].substr(0,2); + var mm = da[4].substr(3,2); + + g.reset(); + drawTop(d,hh,mm); + drawInfo(); +} + +function drawTop(d,hh,mm) { + g.setFont("Vector", w/3); + g.setFontAlign(0, 0); + g.setColor(g.theme.bg); + g.fillRect(0, 24, w, ((h-24)/2) + 24); + g.setColor(g.theme.fg); + + g.setFontAlign(1,0); // right aligned + g.drawString(hh, (w/2) - 6, ((h-24)/4) + 24); + g.setFontAlign(-1,0); // left aligned + g.drawString(mm, (w/2) + 6, ((h-24)/4) + 24); + + // for the colon + g.setFontAlign(0,0); // centre aligned + if (d.getSeconds()&1) g.drawString(":", w/2, ((h-24)/4) + 24); +} + +function drawInfo() { + if (infoData[infoMode] && infoData[infoMode].calc) { + g.setFont("Vector", w/7); + g.setFontAlign(0, 0); + + if (infoData[infoMode].get_color) + g.setColor(infoData[infoMode].get_color()); + else + g.setColor(g.theme.bgH); + g.fillRect(0, ((h-24)/2) + 24 + 1, w, h); + + if (infoData[infoMode].is_control) + g.setColor("#fff"); + else + g.setColor(g.theme.fg); + + g.drawString((infoData[infoMode].calc()), w/2, (3*(h-24)/4) + 24); + } +} + +const infoData = { + ID_LAT: { + calc: () => 'Lat: ' + last_fix.lat.toFixed(4), + }, + ID_LON: { + calc: () => 'Lon: ' + last_fix.lon.toFixed(4), + }, + ID_SPEED: { + calc: () => 'Speed: ' + last_fix.speed.toFixed(1), + }, + ID_ALT: { + calc: () => 'Alt: ' + last_fix.alt.toFixed(0), + }, + ID_COURSE: { + calc: () => 'Course: '+ last_fix.course.toFixed(0), + }, + ID_SATS: { + calc: () => 'Satelites: ' + last_fix.satellites, + }, + ID_TIME: { + calc: () => formatTime(last_fix.time), + }, + OS_REF: { + calc: () => 'NZ 208 987', + }, + GPS_POWER: { + calc: () => (Bangle.isGPSOn()) ? 'GPS On' : 'GPS Off', + action: () => toggleGPS(), + get_color: () => Bangle.isGPSOn() ? '#f00' : '#00f', + is_control: true, + }, + GPS_LOGGER: { + calc: () => 'Logger ' + loggerStatus(), + action: () => toggleLogger(), + get_color: () => loggerStatus() == "ON" ? '#f00' : '#00f', + is_control: true, + }, +}; + +function toggleGPS() { + Bangle.setGPSPower(Bangle.isGPSOn() ? 0 : 1, 'gpstouch'); + // add or remove listenner + if (Bangle.isGPSOn()) + Bangle.on('GPS', processFix); + else + Bangle.removeListener("GPS", processFix); + resetLastFix(); +} + +function loggerStatus() { + var settings = require("Storage").readJSON("gpsrec.json",1)||{}; + if (settings == {}) return "Install"; + return settings.recording ? "ON" : "OFF"; +} + +function toggleLogger() { + var settings = require("Storage").readJSON("gpsrec.json",1)||{}; + if (settings == {}) return; + + settings.recording = !settings.recording; + require("Storage").write("gpsrec.json", settings); + + if (WIDGETS["gpsrec"]) + WIDGETS["gpsrec"].reload(); + + // not sure if safe to register a listenner again + if (Bangle.isGPSOn()) + Bangle.on('GPS', processFix); +} + +function formatTime(now) { + try { + var fd = now.toUTCString().split(" "); + return fd[4]; + } catch (e) { + return "00:00:00"; + } +} + +const infoList = Object.keys(infoData).sort(); +let infoMode = infoList[0]; + +function nextInfo() { + let idx = infoList.indexOf(infoMode); + if (idx > -1) { + if (idx === infoList.length - 1) infoMode = infoList[0]; + else infoMode = infoList[idx + 1]; + } +} + +function prevInfo() { + let idx = infoList.indexOf(infoMode); + if (idx > -1) { + if (idx === 0) infoMode = infoList[infoList.length - 1]; + else infoMode = infoList[idx - 1]; + } +} + +Bangle.on('swipe', dir => { + if (dir == 1) prevInfo() else nextInfo(); + draw(); +}); + +let prevTouch = 0; + +Bangle.on('touch', function(button, xy) { + let dur = 1000*(getTime() - prevTouch); + prevTouch = getTime(); + + if (dur <= 1000 && xy.y < h/2 && infoData[infoMode].is_control) { + Bangle.buzz(); + if (infoData[infoMode] && infoData[infoMode].action) { + infoData[infoMode].action(); + draw(); + } + } +}); + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower', on => { + if (secondInterval) + clearInterval(secondInterval); + secondInterval = undefined; + if (on) + secondInterval = setInterval(draw, 1000); + draw(); +}); + + +resetLastFix(); + +// add listenner if already powered on, plus tag app +if (Bangle.isGPSOn()) { + Bangle.setGPSPower(1, 'gpstouch'); + Bangle.on('GPS', processFix); +} + +g.clear(); +var secondInterval = setInterval(draw, 1000); +draw(); +// Show launcher when button pressed +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); diff --git a/apps/gpstouch/gpstouch.icon.js b/apps/gpstouch/gpstouch.icon.js new file mode 100644 index 000000000..c4cf85676 --- /dev/null +++ b/apps/gpstouch/gpstouch.icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///j+EAYO/uYDB//wCYcPBA4AFh/ABZMDBbkX6gLIgtX6tQBY9VBYNVBY0BBYdABYsFqoACEgQLDitVtWpqtUBYtVq2q1WVGAQLErQLB0oLFHQNqBYIkBHgMDIwYKBAAJIDIweqz/2BYJtDBYI6Bv/9HgILHYwILGh4gBBYWfbooLF6AjPBYW//wLGL4Wv/RfGNZaDIBYibEBYizIBYjLDBYzXBd4TXCBZ60BBYRqEBZpUBBYRSFJAQLCA4b7BHgQLFgYLGIwYLEgoLBHQYLEgILBHQYLEgALBAoYLFi/UBZMHBZUD6ALKApQAFBbHwBZMP/4ABBwgIDA=")) diff --git a/apps/gpstouch/gpstouch.png b/apps/gpstouch/gpstouch.png new file mode 100644 index 0000000000000000000000000000000000000000..c411356ae69347a83882fe195782df211aa629e9 GIT binary patch literal 1571 zcmV+;2Hg3HP)7!JOvVz*38;=4<&H5LVRE7i! zwE@)hpWulvKu;xEMTMGS7!-*xS1GdF+PWqHWMt@9fSV%xU>F?sdga$tN-6RC zc>^dn3?@fxJ#7!&a)Df>SSW(u?^pGJ*X^c8L{vPhdGzZM^83|YAaiF|hEwH1-av$*f)f8Y~qFARB^73HnR2V(_5xr7y^Cn!p2z7PP*%_}x)2Obf zP;<)4n!xDr40nTEmM?i{9J z%~@k5kQZyu%Y))#NKfyZBO?P=tbmy_6E;7m>%3)26G%{rT%EM6S> zm(4;1mMnqs;}bUf%y4L^%OFA1X#)Y3uN1-FHeH935*Ru(-v95`dt7R40${T1S%zi~ ziSxO87pkft9FDdt#Z0ePem0}abSE|pmd5_e)2GLaS4y$B<^+e1pP{Q;nXWrnws;OJ zUwaAZMUs^j;i#*NOZO^ZssPh{K!h2wwkcEM{XReR9o0uqJrobn)fMK;+VA<|tCMm5 zi8vDFN(L*Pcyz2GCnx&){(}$)zCN9lp!(Qp9<+y|Y-7fl%ashKAEDOPuBocmFDfA%F)r$N#l)Xawm>^XmdIt6zZhC{gI!hNv>I4rVDU57=DanXj1DWu*^Xjx}7r9)0c9bymH(Fe$;R6^qdI=sR%jT0++WDIjjJyKo`i zY2KU}Y!%hP&Te!&dbkFkMqBHF`h%j+z<*D9wANRq+vwc>g%Do8AgqY zw!b)g8gpmm(%fwaSFggJJtp?dz)Q7`-09fd@eM2eM+u0+sRe;YYe<;Prc4CuYpVuq#b8Qo_y)TrN zg%?t?&EBGEyl*$yb^+_wNl4Rp7wE9d(T&w*Wpc}IuvSo787wNV7 zk4FyJ2`nnvzNDbEGN_3n-#{kWRWNB1+eP@+YMfGBN=swC-Mj`eNfi10J|8G9mT*@W z%YjA9ioJUX_XXY Date: Sat, 23 Oct 2021 21:08:32 +0100 Subject: [PATCH 3/6] Added change log for GPS Touch --- apps/gpstouch/Changelog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/gpstouch/Changelog diff --git a/apps/gpstouch/Changelog b/apps/gpstouch/Changelog new file mode 100644 index 000000000..7f837e50e --- /dev/null +++ b/apps/gpstouch/Changelog @@ -0,0 +1 @@ +0.01: First version From dc3dda8235a5ba6892c671c124a149e4dd14e2bb Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sat, 23 Oct 2021 21:46:43 +0100 Subject: [PATCH 4/6] Added README.md files into apps.json --- apps.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps.json b/apps.json index b1ad57074..8ff29bdd3 100644 --- a/apps.json +++ b/apps.json @@ -458,6 +458,7 @@ "icon": "clock-analog.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -473,6 +474,7 @@ "icon": "clock2x3.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -503,6 +505,7 @@ "description": "T-Rex game in the style of Chrome's offline game", "icon": "trex.png", "tags": "game", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -1093,6 +1096,7 @@ "icon": "icon.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -1312,6 +1316,7 @@ "description": "A Flappy Bird game clone", "icon": "app.png", "tags": "game", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -1386,6 +1391,7 @@ "icon": "bold_clock.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -3941,6 +3947,7 @@ "icon": "app.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -3956,6 +3963,7 @@ "icon": "app.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ @@ -4002,6 +4010,7 @@ "icon": "app.png", "type": "clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ From bce96a00007af45e8af77e21c84eea59ee39297e Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sat, 23 Oct 2021 22:31:12 +0100 Subject: [PATCH 5/6] Updated README and added screenshots --- apps/gpstouch/README.md | 13 ++++++++++++- apps/gpstouch/gpstouch.app.js | 4 ++-- apps/gpstouch/screenshot1.png | Bin 0 -> 2627 bytes apps/gpstouch/screenshot2.png | Bin 0 -> 2555 bytes apps/gpstouch/screenshot3.png | Bin 0 -> 2474 bytes apps/gpstouch/screenshot4.png | Bin 0 -> 2750 bytes 6 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 apps/gpstouch/screenshot1.png create mode 100644 apps/gpstouch/screenshot2.png create mode 100644 apps/gpstouch/screenshot3.png create mode 100644 apps/gpstouch/screenshot4.png diff --git a/apps/gpstouch/README.md b/apps/gpstouch/README.md index 1d6bb5d17..7329f9833 100644 --- a/apps/gpstouch/README.md +++ b/apps/gpstouch/README.md @@ -1,5 +1,16 @@ # GPS Touch +- A touch controlled GPS watch for Bangle JS 2 +- Key feature is the conversion of Lat/Lon into Ordinance Servey Grid Reference +- Swipe left and right to change the display +- Select GPS and switch the GPS On or Off by touching twice in the top half of the display +- Select LOGGER and switch the GPS Recorder On or Off by touching twice in the top half of the display +- Displays the GPS time in the bottom half of the screen when the GPS is powered on, otherwise 00:00:00 +- Select display of Course, Speed, Altitude, Longitude, Latitude, Ordinance Servey Grid Reference + ## Screenshots - +![](screenshot1.png) +![](screenshot2.png) +![](screenshot3.png) +![](screenshot4.png) diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js index 3b2c54569..9a022095d 100644 --- a/apps/gpstouch/gpstouch.app.js +++ b/apps/gpstouch/gpstouch.app.js @@ -1,5 +1,6 @@ const h = g.getHeight(); const w = g.getWidth(); +let geo = require("geotools"); let last_fix; function resetLastFix() { @@ -99,7 +100,7 @@ const infoData = { calc: () => formatTime(last_fix.time), }, OS_REF: { - calc: () => 'NZ 208 987', + calc: () => last_fix.lat == 0 ? "Searching.." : geo.gpsToOSMapRef(last_fix), }, GPS_POWER: { calc: () => (Bangle.isGPSOn()) ? 'GPS On' : 'GPS Off', @@ -204,7 +205,6 @@ Bangle.on('lcdPower', on => { draw(); }); - resetLastFix(); // add listenner if already powered on, plus tag app diff --git a/apps/gpstouch/screenshot1.png b/apps/gpstouch/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..03cb1e2a953dc8945c1c7dcacf0644992e5019e2 GIT binary patch literal 2627 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 literal 0 HcmV?d00001 From 5e068166e133b8c9d8ec5ae29031380d4839952d Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sun, 24 Oct 2021 18:11:52 +0100 Subject: [PATCH 6/6] GPS touch, tweaks after real world testing --- apps.json | 2 +- apps/gpstouch/gpstouch.app.js | 50 ++++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/apps.json b/apps.json index 8ff29bdd3..f67557bdd 100644 --- a/apps.json +++ b/apps.json @@ -3510,7 +3510,7 @@ "icon": "simplest.png", "type": "clock", "tags": "clock", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"simplest.app.js","url":"app.js"}, diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js index 9a022095d..0425cdc23 100644 --- a/apps/gpstouch/gpstouch.app.js +++ b/apps/gpstouch/gpstouch.app.js @@ -2,6 +2,11 @@ const h = g.getHeight(); const w = g.getWidth(); let geo = require("geotools"); let last_fix; +let listennerCount = 0; + +function log_debug(o) { + //console.log(o); +} function resetLastFix() { last_fix = { @@ -18,11 +23,12 @@ function resetLastFix() { function processFix(fix) { last_fix.time = fix.time; - + log_debug(fix); + if (fix.fix) { if (!last_fix.fix) { // we dont need to suppress this in quiet mode as it is user initiated - Bangle.buzz(); // buzz on first position + Bangle.buzz(1500); // buzz on first position } last_fix = fix; } @@ -65,13 +71,13 @@ function drawInfo() { if (infoData[infoMode].get_color) g.setColor(infoData[infoMode].get_color()); else - g.setColor(g.theme.bgH); + g.setColor("#0ff"); g.fillRect(0, ((h-24)/2) + 24 + 1, w, h); if (infoData[infoMode].is_control) g.setColor("#fff"); else - g.setColor(g.theme.fg); + g.setColor("#000"); g.drawString((infoData[infoMode].calc()), w/2, (3*(h-24)/4) + 24); } @@ -100,7 +106,7 @@ const infoData = { calc: () => formatTime(last_fix.time), }, OS_REF: { - calc: () => last_fix.lat == 0 ? "Searching.." : geo.gpsToOSMapRef(last_fix), + calc: () => !last_fix.fix ? "OO 000 000" : geo.gpsToOSMapRef(last_fix), }, GPS_POWER: { calc: () => (Bangle.isGPSOn()) ? 'GPS On' : 'GPS Off', @@ -117,12 +123,24 @@ const infoData = { }; function toggleGPS() { + if (loggerStatus() == "ON") + return; + Bangle.setGPSPower(Bangle.isGPSOn() ? 0 : 1, 'gpstouch'); // add or remove listenner - if (Bangle.isGPSOn()) - Bangle.on('GPS', processFix); - else - Bangle.removeListener("GPS", processFix); + if (Bangle.isGPSOn()) { + if (listennerCount == 0) { + Bangle.on('GPS', processFix); + listennerCount++; + log_debug("listennerCount=" + listennerCount); + } + } else { + if (listennerCount > 0) { + Bangle.removeListener("GPS", processFix); + listennerCount--; + log_debug("listennerCount=" + listennerCount); + } + } resetLastFix(); } @@ -142,9 +160,11 @@ function toggleLogger() { if (WIDGETS["gpsrec"]) WIDGETS["gpsrec"].reload(); - // not sure if safe to register a listenner again - if (Bangle.isGPSOn()) + if (settings.recording && listennerCount == 0) { Bangle.on('GPS', processFix); + listennerCount++; + log_debug("listennerCount=" + listennerCount); + } } function formatTime(now) { @@ -208,9 +228,13 @@ Bangle.on('lcdPower', on => { resetLastFix(); // add listenner if already powered on, plus tag app -if (Bangle.isGPSOn()) { +if (Bangle.isGPSOn() || loggerStatus() == "ON") { Bangle.setGPSPower(1, 'gpstouch'); - Bangle.on('GPS', processFix); + if (listennerCount == 0) { + Bangle.on('GPS', processFix); + listennerCount++; + log_debug("listennerCount=" + listennerCount); + } } g.clear();