From 81e7a7bf3a1023742d014000702a98b1461e270f Mon Sep 17 00:00:00 2001 From: Conor ONeill Date: Fri, 8 Nov 2019 14:18:47 +0000 Subject: [PATCH 1/4] added NodeConf EU 5k Fun Run dedicated app --- apps/nceu-funrun.js | 149 +++++++++++++++++++++++++++++++++++++++++++ apps/nceu-funrun.png | Bin 0 -> 2219 bytes 2 files changed, 149 insertions(+) create mode 100644 apps/nceu-funrun.js create mode 100644 apps/nceu-funrun.png diff --git a/apps/nceu-funrun.js b/apps/nceu-funrun.js new file mode 100644 index 000000000..66cfb5c70 --- /dev/null +++ b/apps/nceu-funrun.js @@ -0,0 +1,149 @@ +require("Storage").write('+funrun', { + name: "5K Fun Run", + icon: "*funrun", + src: "-funrun" +}); + +require("Storage").write('*funrun', require("heatshrink").decompress(atob("mEwwgurglEC6tDmYYUgkzAANAFygXKKYIADBwgXDkg8LBwwXMoQXEH4hHNC4s0O6BfECAKhDHYKnOghCB3cga6dEnYYBaScC2cznewC6W7OQU7BYyIFAAhFBAAYwGC5RFBC5QAJlY0FSIQAMkUjGgrTJRYoXFPQIXGLg8iAAJFDDgIXGgYXJGAWweQJHOC4jtBC6cidgQXUUQQXBogACDYR3HmQXHAAYzKU4IACC48kJBwFBgg7EMZYwDJAReDoh5PC4QARJAoARJAYXTJChtDoSgNAAaeEAAU0C5wqCC4q5LOYYvWgjOEaJ4AGoZGQPY6OPFw0yF34uFRlYXCFykAoQuVeIQWUAB4A="))) + +require('Storage').write('-funrun', ` +var coords = new Int32Array([-807016,6918514,-807057,6918544,-807135,6918582,-807238,6918630,-807289,6918646,-807308,6918663,-807376,6918755,-807413,6918852,-807454,6919002,-807482,6919080,-807509,6919158,-807523,6919221,-807538,6919256,-807578,6919336,-807628,6919447,-807634,6919485,-807640,6919505,-807671,6919531,-807703,6919558,-807760,6919613,-807752,6919623,-807772,6919643,-807802,6919665,-807807,6919670,-807811,6919685,-807919,6919656,-807919,6919645,-807890,6919584,-807858,6919533,-807897,6919503,-807951,6919463,-807929,6919430,-807916,6919412,-807907,6919382,-807901,6919347,-807893,6919322,-807878,6919292,-807858,6919274,-807890,6919232,-807909,6919217,-807938,6919206,-807988,6919180,-807940,6919127,-807921,6919100,-807908,6919072,-807903,6919039,-807899,6919006,-807911,6918947,-807907,6918936,-807898,6918905,-807881,6918911,-807874,6918843,-807870,6918821,-807854,6918775,-807811,6918684,-807768,6918593,-807767,6918593,-807729,6918516,-807726,6918505,-807726,6918498,-807739,6918481,-807718,6918465,-807697,6918443,-807616,6918355,-807518,6918263,-807459,6918191,-807492,6918162,-807494,6918147,-807499,6918142,-807500,6918142,-807622,6918041,-807558,6917962,-807520,6917901,-807475,6917933,-807402,6917995,-807381,6918024,-807361,6918068,-807323,6918028,-807262,6918061,-807263,6918061,-807159,6918116,-807148,6918056,-807028,6918063,-807030,6918063,-806979,6918068,-806892,6918090,-806760,6918115,-806628,6918140,-806556,6918162,-806545,6918175,-806531,6918173,-806477,6918169,-806424,6918180,-806425,6918180,-806367,6918195,-806339,6918197,-806309,6918191,-806282,6918182,-806248,6918160,-806225,6918136,-806204,6918107,-806190,6918076,-806169,6917968,-806167,6917953,-806157,6917925,-806140,6917896,-806087,6917839,-806071,6917824,-805969,6917904,-805867,6917983,-805765,6918063,-805659,6918096,-805677,6918131,-805676,6918131,-805717,6918212,-805757,6918294,-805798,6918397,-805827,6918459,-805877,6918557,-805930,6918608,-805965,6918619,-806037,6918646,-806149,6918676,-806196,6918685,-806324,6918703,-806480,6918735,-806528,6918738,-806644,6918712,-806792,6918667,-806846,6918659,-806914,6918654,-806945,6918661,-806971,6918676,-806993,6918689,-806992,6918692,-807065,6918753,-807086,6918786,-807094,6918788,-807102,6918795,-807104,6918793,-807107,6918799,-807102,6918802,-807112,6918812,-807106,6918815,-807115,6918826,-807120,6918823,-807132,6918841,-807141,6918850,-807151,6918841,-807170,6918832,-807193,6918813,-807222,6918775,-807246,6918718,-807250,6918694,-807264,6918637,-807238,6918630,-807148,6918587,-807057,6918544,-806948,6918463]); + +var min = {\"x\":-807988,\"y\":6917824}; +var max = {\"x\":-805659,\"y\":6919685}; +var gcoords = new Uint8Array(coords.length); +var coordDistance = new Uint16Array(coords.length/2); + +var PT_DISTANCE = 30; // distance to a point before we consider it complete + +function toScr(p) { +return { + x : 10 + (p.x-min.x)*100/(max.x-min.x), + y : 230 - (p.y-min.y)*100/(max.y-min.y) +}; +} + +var last; +var totalDistance = 0; +for (var i=0;iK~!jg_Ev@>moV3NSJC6i2>wlsvcOfe3Gp=mQiI!zlp^&y+M8Nk6J+`%{mY-4Q62HCo$ z)oOS9gIKmFw&X~%n@*pf@4oN*JJvpQ!@$zp&G^0EAubSDSz6I}ec1OKC!q02 zc?l7O`n+#FLJ|#WK|9ZJxNJJjS^LemHGcD)!irB>01!npm>__hJY1d~pg2uPKSJ!K zTN`c?0wG*Znoz$mJdh(K8q&tRT#Bag;Nqq9$93#l|J7lg2d3L^BY3mGXSD%5H!9C-i`OQk4S zu}Ykr{(v3=&Kj%BiYM|VggR%nnECOZ1y~kC)&X7sJ{h(}TmhcoU8}{sOit zM=0_>t&|yNlr56dTIHDMLV$zacpkp~etsy`{P_Gg|M1~ta|Z<&O<(+pVcFu?(Y}x5 zwp*HvkJ^)@vr`0RQ7%R333hG)aQyo++_$^AzE$0_!ivM}Wb#MVN`wOKW2v0l3n`k; zdrI}n2Z>~sA#}9~AkWJN)80!<+UXJild3{cz@rb%d_FqLBRIZi$4?h`$G@njv|{y> z%LuJegpFZ3`{8W41czY|){H(!*nlq)^9t;Lb=UD$Z_?(zS#IpgUj`zgLkI9YT&>sP zyLKCj@2YXZ(F}obp2?0Ec`GpvUU_ZL#SU-sW~Ek-PDX`Gwi_Y+Ij0xazn|tkU0u-p zOb1zs;(q7%H4v;oeQSr&%`nR%qYhYZoDyH@WJC#uG>D}V@LT}zc6DNbZVqVj)#>l= z8i1qe66;mjEuM|G^u(;xh{g>HkVxbHLD7^YQUR^K_Kixd0b;2H0HBW7q5rl6wYN{< z+nGfpjyw<7nd_YIYPTQ|Qu%q2X}&?4vn|qbg927A%039-V5Et*?|$Q1oo=Kvr6>yO z_yjcd_2ZEgCp2OeIHwnm`tuAo%bmY_ zY4^StMn?$(vH5&n7Qlp;qG5<7GALAP%Ik3^4clVg%)R>Bi$=3AWld6A1}M?U40Q|* z!RHv@Gt@UzDk~2S4BP9ElrE$N%A`v+Ak@tc0DL}=-)b=vA_#?Reo%iIn1Yj-3&_gV zaZc;dU5h$CISs?hL8Z~a>$Fo|zvcvh;$i=?tqqr&s>=%R_4S3m+2MY*h(O+1Q&D$i z*fu5Y^nqXfcyWg-)1=fU5S3h7YQFC91)i?L$bN(|#CFaQ423{~H+ z?SodZ3=_1=EmbvS&f1i3b4i9EBTKJ4AAk=jQ-+N5diFMLfLy>5~nRgxUT8 zKqQu6W^R6PSL*G)iRgK09~TA7B_0MY-3k+|uHU zX8bApuvK4GS|Ae9E$LaaLI(uOO4FHVK15-;Q!+4o9H053wYw|!W?*k(Goz(Q~@yMU1 zDc6*c2V&UF3A`{XDJ^qa$pbO007dYx>lfSBrDSGHdcNpjSU)@E Date: Fri, 8 Nov 2019 14:27:26 +0000 Subject: [PATCH 2/4] added code for OpenLocation icon --- apps/openlocation-icon.js | 1 + apps/openlocation.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 apps/openlocation-icon.js diff --git a/apps/openlocation-icon.js b/apps/openlocation-icon.js new file mode 100644 index 000000000..d0b10a084 --- /dev/null +++ b/apps/openlocation-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AFWIAAQVVDKQSDl3ikUoDB0IC4ci93u8QFBwAWPxGCC4gYLLQoXC9BiMFwOCLYJaBC4RfCkQwJCIZCCAoJGDDYQXIlwWBkUulAXBFwQcDIw5YGwQWCEQcoJAwLEa44LCGA4LDN4QaFVghGIC4IbBOgYABxwMCJAoXEdYqODC5IiDVAheFQgQXFBYjrGEIoXEEYouFKQZ4HC4r+BIxAXHFpAXHToIXILggXOBgMikQXFLwoXHU4IRBdhAXKBoIXHIwx3GBwJ1GXooXHhAYCFwoXId4oQCPAMiDQY4BfIoXIPQLBGPIkoC5AODPRIXFPAQXE8QYEC4R2FC5BJFC5RICC5JpCIwwwEKwYXEEIIuHC5HoC4pmBC45ICHwSQGFwJGHGAZWDeYouJGAZ4CCwoABFxIYDkTvFCxp6EAAwWMDBIWODIwVRAH4AXA=")) diff --git a/apps/openlocation.json b/apps/openlocation.json index 2abc1a727..c02a5a233 100644 --- a/apps/openlocation.json +++ b/apps/openlocation.json @@ -1,4 +1,5 @@ { "name":"Open Location","type":"app", + "icon":"*openloc", "src":"-openloc" } From 44dedb2a67d6c9941e9ef5a2a30aaa4eba05de29 Mon Sep 17 00:00:00 2001 From: Conor ONeill Date: Fri, 8 Nov 2019 15:22:33 +0000 Subject: [PATCH 3/4] updated fun run app to obey BangleApps structure --- apps.json | 11 +++++++++++ apps/nceu-funrun-icon.js | 1 + apps/nceu-funrun.js | 31 +++++++++++-------------------- apps/nceu-funrun.json | 5 +++++ 4 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 apps/nceu-funrun-icon.js create mode 100644 apps/nceu-funrun.json diff --git a/apps.json b/apps.json index e00345468..f79f74488 100644 --- a/apps.json +++ b/apps.json @@ -254,5 +254,16 @@ {"name":"+route"}, {"name":"=route"} ] + }, + { "id": "funrun5", + "name": "5K Fun Run", + "icon": "nceu-funrun.png", + "description": "Display a map of the NodeConf EU 2019 5K Fun Run route and your location on it", + "tags": "health", + "storage": [ + {"name":"-funrun5"}, + {"name":"+funrun5"}, + {"name":"=funrun5"} + ] } ] diff --git a/apps/nceu-funrun-icon.js b/apps/nceu-funrun-icon.js new file mode 100644 index 000000000..a13452a8b --- /dev/null +++ b/apps/nceu-funrun-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwgurglEC6tDmYYUgkzAANAFygXKKYIADBwgXDkg8LBwwXMoQXEH4hHNC4s0O6BfECAKhDHYKnOghCB3cga6dEnYYBaScC2cznewC6W7OQU7BYyIFAAhFBAAYwGC5RFBC5QAJlY0FSIQAMkUjGgrTJRYoXFPQIXGLg8iAAJFDDgIXGgYXJGAWweQJHOC4jtBC6cidgQXUUQQXBogACDYR3HmQXHAAYzKU4IACC48kJBwFBgg7EMZYwDJAReDoh5PC4QARJAoARJAYXTJChtDoSgNAAaeEAAU0C5wqCC4q5LOYYvWgjOEaJ4AGoZGQPY6OPFw0yF34uFRlYXCFykAoQuVeIQWUAB4A=")) diff --git a/apps/nceu-funrun.js b/apps/nceu-funrun.js index 66cfb5c70..6a48a6c20 100644 --- a/apps/nceu-funrun.js +++ b/apps/nceu-funrun.js @@ -1,16 +1,7 @@ -require("Storage").write('+funrun', { - name: "5K Fun Run", - icon: "*funrun", - src: "-funrun" -}); - -require("Storage").write('*funrun', require("heatshrink").decompress(atob("mEwwgurglEC6tDmYYUgkzAANAFygXKKYIADBwgXDkg8LBwwXMoQXEH4hHNC4s0O6BfECAKhDHYKnOghCB3cga6dEnYYBaScC2cznewC6W7OQU7BYyIFAAhFBAAYwGC5RFBC5QAJlY0FSIQAMkUjGgrTJRYoXFPQIXGLg8iAAJFDDgIXGgYXJGAWweQJHOC4jtBC6cidgQXUUQQXBogACDYR3HmQXHAAYzKU4IACC48kJBwFBgg7EMZYwDJAReDoh5PC4QARJAoARJAYXTJChtDoSgNAAaeEAAU0C5wqCC4q5LOYYvWgjOEaJ4AGoZGQPY6OPFw0yF34uFRlYXCFykAoQuVeIQWUAB4A="))) - -require('Storage').write('-funrun', ` var coords = new Int32Array([-807016,6918514,-807057,6918544,-807135,6918582,-807238,6918630,-807289,6918646,-807308,6918663,-807376,6918755,-807413,6918852,-807454,6919002,-807482,6919080,-807509,6919158,-807523,6919221,-807538,6919256,-807578,6919336,-807628,6919447,-807634,6919485,-807640,6919505,-807671,6919531,-807703,6919558,-807760,6919613,-807752,6919623,-807772,6919643,-807802,6919665,-807807,6919670,-807811,6919685,-807919,6919656,-807919,6919645,-807890,6919584,-807858,6919533,-807897,6919503,-807951,6919463,-807929,6919430,-807916,6919412,-807907,6919382,-807901,6919347,-807893,6919322,-807878,6919292,-807858,6919274,-807890,6919232,-807909,6919217,-807938,6919206,-807988,6919180,-807940,6919127,-807921,6919100,-807908,6919072,-807903,6919039,-807899,6919006,-807911,6918947,-807907,6918936,-807898,6918905,-807881,6918911,-807874,6918843,-807870,6918821,-807854,6918775,-807811,6918684,-807768,6918593,-807767,6918593,-807729,6918516,-807726,6918505,-807726,6918498,-807739,6918481,-807718,6918465,-807697,6918443,-807616,6918355,-807518,6918263,-807459,6918191,-807492,6918162,-807494,6918147,-807499,6918142,-807500,6918142,-807622,6918041,-807558,6917962,-807520,6917901,-807475,6917933,-807402,6917995,-807381,6918024,-807361,6918068,-807323,6918028,-807262,6918061,-807263,6918061,-807159,6918116,-807148,6918056,-807028,6918063,-807030,6918063,-806979,6918068,-806892,6918090,-806760,6918115,-806628,6918140,-806556,6918162,-806545,6918175,-806531,6918173,-806477,6918169,-806424,6918180,-806425,6918180,-806367,6918195,-806339,6918197,-806309,6918191,-806282,6918182,-806248,6918160,-806225,6918136,-806204,6918107,-806190,6918076,-806169,6917968,-806167,6917953,-806157,6917925,-806140,6917896,-806087,6917839,-806071,6917824,-805969,6917904,-805867,6917983,-805765,6918063,-805659,6918096,-805677,6918131,-805676,6918131,-805717,6918212,-805757,6918294,-805798,6918397,-805827,6918459,-805877,6918557,-805930,6918608,-805965,6918619,-806037,6918646,-806149,6918676,-806196,6918685,-806324,6918703,-806480,6918735,-806528,6918738,-806644,6918712,-806792,6918667,-806846,6918659,-806914,6918654,-806945,6918661,-806971,6918676,-806993,6918689,-806992,6918692,-807065,6918753,-807086,6918786,-807094,6918788,-807102,6918795,-807104,6918793,-807107,6918799,-807102,6918802,-807112,6918812,-807106,6918815,-807115,6918826,-807120,6918823,-807132,6918841,-807141,6918850,-807151,6918841,-807170,6918832,-807193,6918813,-807222,6918775,-807246,6918718,-807250,6918694,-807264,6918637,-807238,6918630,-807148,6918587,-807057,6918544,-806948,6918463]); -var min = {\"x\":-807988,\"y\":6917824}; -var max = {\"x\":-805659,\"y\":6919685}; +var min = {"x":-807988,"y":6917824}; +var max = {"x":-805659,"y":6919685}; var gcoords = new Uint8Array(coords.length); var coordDistance = new Uint16Array(coords.length/2); @@ -52,16 +43,16 @@ g.clearRect(0,0,239,120); g.setFontAlign(0,0); g.setColor(1,0,0); g.setFontVector(40); -g.drawString((currentDist===undefined)?\"?\":(Math.round(currentDist)+\"m\"), 160, 30); +g.drawString((currentDist===undefined)?"?":(Math.round(currentDist)+"m"), 160, 30); g.setColor(1,1,1); -g.setFont(\"6x8\",2); -g.drawString(Math.round(totalDistance)+\"m\", 160, 70); -g.drawString((nextPtIdx/2)+\"/\"+coordDistance.length, 50, 20); +g.setFont("6x8",2); +g.drawString(Math.round(totalDistance)+"m", 160, 70); +g.drawString((nextPtIdx/2)+"/"+coordDistance.length, 50, 20); if (!fix.fix) { g.setColor(1,0,0); - g.drawString(\"No GPS\", 50, 50); - g.setFont(\"6x8\",1); - g.drawString(fix.satellites+\" Sats\", 50, 70); + g.drawString("No GPS", 50, 50); + g.setFont("6x8",1); + g.drawString(fix.satellites+" Sats", 50, 70); } if (lastFix && lastFix.fix) { @@ -138,7 +129,6 @@ arrow(heading,0xF800); oldHeading = heading; } - // draw the heading var oldHeading = 0; Bangle.on('GPS', onGPS); @@ -146,4 +136,5 @@ Bangle.on('mag', onCompass); Bangle.setGPSPower(1); Bangle.setCompassPower(1); g.clear(); -`); + + diff --git a/apps/nceu-funrun.json b/apps/nceu-funrun.json new file mode 100644 index 000000000..ea709a924 --- /dev/null +++ b/apps/nceu-funrun.json @@ -0,0 +1,5 @@ +{ + "name":"5K Fun Run","type":"app", + "icon":"*funrun5", + "src":"-funrun5" +} From 52c4d0c6be662b792d1d9ddd68d5d5de01cf3c71 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Fri, 8 Nov 2019 07:54:57 -0800 Subject: [PATCH 4/4] Experimental HID gestures --- apps/hid-keyboard.js | 18 ++++++++++++++++++ apps/settings-default.json | 1 + apps/settings.js | 9 +++++++++ 3 files changed, 28 insertions(+) diff --git a/apps/hid-keyboard.js b/apps/hid-keyboard.js index e87fd709f..41fdfa8ac 100644 --- a/apps/hid-keyboard.js +++ b/apps/hid-keyboard.js @@ -49,6 +49,24 @@ function drawApp() { } if (next) { + + if (settings.HIDGestures) { + Bangle.on('aiGestures', (v) => { + switch (v) { + case 'swipeleft': + E.showMessage('next'); + setTimeout(drawApp, 1000); + next(() => {}); + break; + case 'swiperight': + E.showMessage('prev'); + setTimeout(drawApp, 1000); + prev(() => {}); + break; + } + }); + } + setWatch(function(e) { var len = e.time - e.lastTime; if (len > 0.3 && len < 0.9) { diff --git a/apps/settings-default.json b/apps/settings-default.json index 26d07d76a..bc95dd686 100644 --- a/apps/settings-default.json +++ b/apps/settings-default.json @@ -4,5 +4,6 @@ beep: true, // Beep enabled by default. App must support timezone: 0, // Set the timezone for the device HID : false, // BLE HID mode, off by default + HIDGestures: false, debug: false, // Debug mode disabled by default. App must support } diff --git a/apps/settings.js b/apps/settings.js index 245feae6b..e84a8112e 100644 --- a/apps/settings.js +++ b/apps/settings.js @@ -23,6 +23,7 @@ function resetSettings() { beep: true, timezone: 0, HID : false, + HIDGestures: false, debug: false, }; setLCDTimeout(settings.timeout); @@ -91,6 +92,14 @@ function showMainMenu() { updateSettings(); } }, + 'HID Gestures': { + value: settings.HIDGestures, + format: boolFormat, + onchange: () => { + settings.HIDGestures = !settings.HIDGestures; + updateSettings(); + } + }, 'Debug': { value: settings.debug, format: boolFormat,