From 09f13c242ad389851f0cc102a0608840cee256ef Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Mon, 7 Jun 2021 13:02:11 -0500 Subject: [PATCH 01/44] Create FD6FDetect.app.js --- apps/fd6fdetect/FD6FDetect.app.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 apps/fd6fdetect/FD6FDetect.app.js diff --git a/apps/fd6fdetect/FD6FDetect.app.js b/apps/fd6fdetect/FD6FDetect.app.js new file mode 100644 index 000000000..67e4d2c02 --- /dev/null +++ b/apps/fd6fdetect/FD6FDetect.app.js @@ -0,0 +1,25 @@ +//Bangle.setLCDPower(1); //debugging purposes +//Bangle.setLCDTimeout(0); // debugging purposes +g.clear(); // clear screen +let amount = 'global value'; // make amount global +function FindCOVIDAwareBeacons() { // function for finding COVID beacons +NRF.findDevices(function(devices) { // function for searching for devices with the UUID of FD6F + g.setFont('Vector', 75); // set size of font to 75x + g.setFontAlign(0,0); // align font + var amount = devices.length; // get amount of devices matching FD6F + g.clear(); // clear screen + g.drawString(amount, 125, 100); // draw amount of devices matching FD6F + if (amount == 1) { // check to see if we need to use the word users or user + g.setFont('Vector', 25); // set size of font to 25x + g.drawString('COVIDAwareMN', 125, 150); // draw string + g.drawString('user', 125, 175); // draw string + g.drawString('nearby', 125, 200); // draw string + } else{ // if more than one change user to users + g.setFont('Vector', 25); // set size of font to 25x + g.drawString('COVIDAwareMN', 125, 150); // draw string + g.drawString('users', 125, 175); // draw string + g.drawString('nearby', 125, 200); // draw string + } +}, {timeout : 1000, filters : [{services: ['fd6f'] }] }); // set filters to target only FD6F beacons +} +setInterval(FindCOVIDAwareBeacons, 2000); // poll for new devices From 72299583d4ce53a831f9d9964e5cf95b9f58d2a8 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Mon, 7 Jun 2021 13:02:25 -0500 Subject: [PATCH 02/44] Add files via upload --- apps/fd6fdetect/FD6FDetect.info | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/fd6fdetect/FD6FDetect.info diff --git a/apps/fd6fdetect/FD6FDetect.info b/apps/fd6fdetect/FD6FDetect.info new file mode 100644 index 000000000..dec8374ce --- /dev/null +++ b/apps/fd6fdetect/FD6FDetect.info @@ -0,0 +1 @@ +{"id":"fd6fdetect","name":"FD6FDetect","src":"FD6FDetect.app.js","icon":"FD6FDetect.img","version":"0.01","files":"FD6FDetect.info,FD6FDetect.img,FD6FDetect.app.js"} \ No newline at end of file From 48215e92651587da6475232ed7d7413598d879b1 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:36:44 -0500 Subject: [PATCH 03/44] Add files via upload --- apps/fd6fdetect/FD6FDetect.img | Bin 0 -> 10371 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/fd6fdetect/FD6FDetect.img diff --git a/apps/fd6fdetect/FD6FDetect.img b/apps/fd6fdetect/FD6FDetect.img new file mode 100644 index 0000000000000000000000000000000000000000..2e3442edc94eacf778694b9c81674fd455e069cd GIT binary patch literal 10371 zcmeI2P14&o42D&uOJ|c4Xykn-+ROjYHr#9_bZ6H&1#S{*CrVcx~TjbL4b$jAg&swpvjxTQc3jVo%T;$VK+8HcXIuQ zn^2Cc3j~bEK8zWL5II6tj(P$^APWVkwNF9788lcbu6Y*Y1&udftFxpc=p{KQ=tgq` za5^i(`)fL{a&YaD3mlI>-xdz+?enodf)g6&S5^yo%6U-^uGsX3@*w9c?MI(%-Cnot zS8eqcTB)Pm^Lc|~A2i~<>xhGxZCm{ORU2>X2ON^KZGTp=-T(|#e8ryS|f*w)mS><@FSYGNajF z8fA zut4CHIU<<^t9LwOtoLG8=7^vLM`OJ9+z>UkunPVehVqt5HEg{ru}Ug{+UuQ@pXF~_`m z98QBqxtU)V9CKdeTJ1xB1!h7C_FiqyD#19a?a1>Z%)r-NAC18=nN>}E4tEsv;v;cv zjnKWz30_T(g@$RpqA&q@5h&?7=3tb09l!7N-Uli21cww`9ZF(kKg(&{p{W?g>DI>- zu!jYxAT}p2WT!ft0-9I%zf$a@r5e78Tg_R;MI4eK%_Dh%bJin)8esYuuhUCn=2dg# zqSAnvS+TO9(y#RJyUkKOtft{kNLJ@nbKo+MzswlOhYiDB?wT@Vu1^u-T38&{Z8iIx zd-(ofv6r=6RAy|{S;tU=TMsqUdTPg=dwO{N7w5@M#JleqHs0fqe;pv(tLAq&;$Kyl z@r{H#oV6Wbd%*J1Mu#JqoS4e2bhh>(PVpv=>F0?-25$k=Q|*X$UXer56!{v5lSI&2 zPNe($ce;~JzW&>)2&%X{h&Cp<^C%Oa+=F=T2@w=XT9xm9SJjiGQrKq0zJ?C!v)oZM92^<-NL#7iYnE?5yD00QnYE94Le2hJT6#rl_#0r+pO2M*HGk&h2|PaNRwb-4C#NcoVd_K4RH QoN{uZsX6XN$FW5D58@LCkpKVy literal 0 HcmV?d00001 From aea2bcacaaa7890d10ea70eee6ac14ee0eb54bcf Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:37:33 -0500 Subject: [PATCH 04/44] Create ChangeLog --- apps/fd6fdetect/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/fd6fdetect/ChangeLog diff --git a/apps/fd6fdetect/ChangeLog b/apps/fd6fdetect/ChangeLog new file mode 100644 index 000000000..27a8806b2 --- /dev/null +++ b/apps/fd6fdetect/ChangeLog @@ -0,0 +1 @@ +0.01: Added source code From 607b83abdba4046fe6f94ab24b98a7aa1384da5f Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:43:19 -0500 Subject: [PATCH 05/44] Update FD6FDetect.info --- apps/fd6fdetect/FD6FDetect.info | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/fd6fdetect/FD6FDetect.info b/apps/fd6fdetect/FD6FDetect.info index dec8374ce..934589374 100644 --- a/apps/fd6fdetect/FD6FDetect.info +++ b/apps/fd6fdetect/FD6FDetect.info @@ -1 +1,14 @@ -{"id":"fd6fdetect","name":"FD6FDetect","src":"FD6FDetect.app.js","icon":"FD6FDetect.img","version":"0.01","files":"FD6FDetect.info,FD6FDetect.img,FD6FDetect.app.js"} \ No newline at end of file +}, +{ "id": "fd6fdetect", + "name": "FD6FDetect", + "shortName":"fd6fdetect", + "icon": "FD6FDetect.img", + "version":"0.1", + "description": "Allows you to see 0xFD6F beacons near you.", + "tags": "", + "storage": [ + {"name":"FD6FDetect.app.js","url":"FD6FDetect.app.js"}, + {"name":"FD6FDetect.img","url":"FD6FDetect.img","evaluate":true} + ] +} +] From dac8dbc38114f5f9ca9813a4b8d8d960d5d66f80 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:44:26 -0500 Subject: [PATCH 06/44] Update FD6FDetect.info --- apps/fd6fdetect/FD6FDetect.info | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/fd6fdetect/FD6FDetect.info b/apps/fd6fdetect/FD6FDetect.info index 934589374..cb36e2e5f 100644 --- a/apps/fd6fdetect/FD6FDetect.info +++ b/apps/fd6fdetect/FD6FDetect.info @@ -7,8 +7,8 @@ "description": "Allows you to see 0xFD6F beacons near you.", "tags": "", "storage": [ - {"name":"FD6FDetect.app.js","url":"FD6FDetect.app.js"}, - {"name":"FD6FDetect.img","url":"FD6FDetect.img","evaluate":true} + {"name":"FD6FDetect.app.js","url":"app.js"}, + {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} ] } ] From 3eafa9d4a13c4e644e23982711d536eb4fe57f9d Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:45:49 -0500 Subject: [PATCH 07/44] Add files via upload --- apps/fd6fdetect/icons8-coronavirus-48 (1).png | Bin 0 -> 1037 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/fd6fdetect/icons8-coronavirus-48 (1).png diff --git a/apps/fd6fdetect/icons8-coronavirus-48 (1).png b/apps/fd6fdetect/icons8-coronavirus-48 (1).png new file mode 100644 index 0000000000000000000000000000000000000000..cd0a92f7c52b9a7c48f23bc19a7673e79a877ad6 GIT binary patch literal 1037 zcmV+o1oHcdP)D z4n7Yo0$YX40=>YT;){(r;EL!XwiXrdH3>WTJTQfs#ctqd8G*YJ=@MI07UwOAu^8uX z9kS2BAaD?90_tTniEId%Ezwq9d{>O1J{O73QZQzL)0FmBO9N+sFEO^J#FuNIRg}aQ zacMBrfF z7<$8w6K)M2D{cj7Ra~pc0)AR?DZ(o;hglu(=p|h9cG)Zup2>@fyJT@omTm*^Rq;KZ zV<$s+_D?yU$tivr*rmALA`AEj4*j!)SHWwW)1i!ijxoL-=mYKpM;-i8;rirR8)?F? z*!>kptuUYr5BfB0VOaU;D@DQ8PP>}07RBog*Z}M#e$zF|aKWXkZEs&Cp5G{T9@vXH zUF}e^Px5aI@Bw%Oya%>fy0?LMGDa;fPWPjFW~cbxTO`H^bjGd`G+=iv`5k4W(V?eT zB2G73#CO>%@J~Xoz;oalu%Kj{<+&E%hsb^qEum4RGh%UZx=l)FL3}@Fl@%zKK%g+A zWQWwV^_W_X>xEX^#4g<<%FmNk;wc;b%E-`Kjg){9<>!V^!|lrOEb$+*eoT+l>EJts z>&N{e%Mfm{+bWJ)Ax)uX^O%0##zVy~W7>xRb}Nx{=$}*kR}y%^^e6{kh<>~(Y38!P zH^pD@96MkF)~hfu z!VOb6(4>G{%H9g5arBPhNLd5CCR`2^tnC1jB|P(a;HCKRdZg5c`bo>7-gIXvt%uKG zHmt6BJtpydsE@l=c}=*Sg8Cf>4rA_g8e}w!Y=r1-#0u~##)p?{71za94pYAe908Rx zW-&EiLv(c$y`9rni*=Y+W?V_cmE3s>Z<|D~7F|iW>N5rG!?XZTiC*qL6|RlwM=J5l z-2nge^?EtDOt^!cA^vx>ictNH>~ABJkX`RTr&du#6>j_j@buL5f;h({00000NkvXX Hu0mjf6gB3Y literal 0 HcmV?d00001 From fe16f49383e4a595ed5ba9db638708ad59777941 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:46:43 -0500 Subject: [PATCH 08/44] Delete icons8-coronavirus-48 (1).png --- apps/fd6fdetect/icons8-coronavirus-48 (1).png | Bin 1037 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/fd6fdetect/icons8-coronavirus-48 (1).png diff --git a/apps/fd6fdetect/icons8-coronavirus-48 (1).png b/apps/fd6fdetect/icons8-coronavirus-48 (1).png deleted file mode 100644 index cd0a92f7c52b9a7c48f23bc19a7673e79a877ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 zcmV+o1oHcdP)D z4n7Yo0$YX40=>YT;){(r;EL!XwiXrdH3>WTJTQfs#ctqd8G*YJ=@MI07UwOAu^8uX z9kS2BAaD?90_tTniEId%Ezwq9d{>O1J{O73QZQzL)0FmBO9N+sFEO^J#FuNIRg}aQ zacMBrfF z7<$8w6K)M2D{cj7Ra~pc0)AR?DZ(o;hglu(=p|h9cG)Zup2>@fyJT@omTm*^Rq;KZ zV<$s+_D?yU$tivr*rmALA`AEj4*j!)SHWwW)1i!ijxoL-=mYKpM;-i8;rirR8)?F? z*!>kptuUYr5BfB0VOaU;D@DQ8PP>}07RBog*Z}M#e$zF|aKWXkZEs&Cp5G{T9@vXH zUF}e^Px5aI@Bw%Oya%>fy0?LMGDa;fPWPjFW~cbxTO`H^bjGd`G+=iv`5k4W(V?eT zB2G73#CO>%@J~Xoz;oalu%Kj{<+&E%hsb^qEum4RGh%UZx=l)FL3}@Fl@%zKK%g+A zWQWwV^_W_X>xEX^#4g<<%FmNk;wc;b%E-`Kjg){9<>!V^!|lrOEb$+*eoT+l>EJts z>&N{e%Mfm{+bWJ)Ax)uX^O%0##zVy~W7>xRb}Nx{=$}*kR}y%^^e6{kh<>~(Y38!P zH^pD@96MkF)~hfu z!VOb6(4>G{%H9g5arBPhNLd5CCR`2^tnC1jB|P(a;HCKRdZg5c`bo>7-gIXvt%uKG zHmt6BJtpydsE@l=c}=*Sg8Cf>4rA_g8e}w!Y=r1-#0u~##)p?{71za94pYAe908Rx zW-&EiLv(c$y`9rni*=Y+W?V_cmE3s>Z<|D~7F|iW>N5rG!?XZTiC*qL6|RlwM=J5l z-2nge^?EtDOt^!cA^vx>ictNH>~ABJkX`RTr&du#6>j_j@buL5f;h({00000NkvXX Hu0mjf6gB3Y From 427f28d866ee8c8482a585993fe0692232a75fae Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:46:49 -0500 Subject: [PATCH 09/44] Add files via upload --- apps/fd6fdetect/app.png | Bin 0 -> 1037 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/fd6fdetect/app.png diff --git a/apps/fd6fdetect/app.png b/apps/fd6fdetect/app.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0a92f7c52b9a7c48f23bc19a7673e79a877ad6 GIT binary patch literal 1037 zcmV+o1oHcdP)D z4n7Yo0$YX40=>YT;){(r;EL!XwiXrdH3>WTJTQfs#ctqd8G*YJ=@MI07UwOAu^8uX z9kS2BAaD?90_tTniEId%Ezwq9d{>O1J{O73QZQzL)0FmBO9N+sFEO^J#FuNIRg}aQ zacMBrfF z7<$8w6K)M2D{cj7Ra~pc0)AR?DZ(o;hglu(=p|h9cG)Zup2>@fyJT@omTm*^Rq;KZ zV<$s+_D?yU$tivr*rmALA`AEj4*j!)SHWwW)1i!ijxoL-=mYKpM;-i8;rirR8)?F? z*!>kptuUYr5BfB0VOaU;D@DQ8PP>}07RBog*Z}M#e$zF|aKWXkZEs&Cp5G{T9@vXH zUF}e^Px5aI@Bw%Oya%>fy0?LMGDa;fPWPjFW~cbxTO`H^bjGd`G+=iv`5k4W(V?eT zB2G73#CO>%@J~Xoz;oalu%Kj{<+&E%hsb^qEum4RGh%UZx=l)FL3}@Fl@%zKK%g+A zWQWwV^_W_X>xEX^#4g<<%FmNk;wc;b%E-`Kjg){9<>!V^!|lrOEb$+*eoT+l>EJts z>&N{e%Mfm{+bWJ)Ax)uX^O%0##zVy~W7>xRb}Nx{=$}*kR}y%^^e6{kh<>~(Y38!P zH^pD@96MkF)~hfu z!VOb6(4>G{%H9g5arBPhNLd5CCR`2^tnC1jB|P(a;HCKRdZg5c`bo>7-gIXvt%uKG zHmt6BJtpydsE@l=c}=*Sg8Cf>4rA_g8e}w!Y=r1-#0u~##)p?{71za94pYAe908Rx zW-&EiLv(c$y`9rni*=Y+W?V_cmE3s>Z<|D~7F|iW>N5rG!?XZTiC*qL6|RlwM=J5l z-2nge^?EtDOt^!cA^vx>ictNH>~ABJkX`RTr&du#6>j_j@buL5f;h({00000NkvXX Hu0mjf6gB3Y literal 0 HcmV?d00001 From d716deeda69bcf5db964d4dd9809add2bf83d9cf Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:47:38 -0500 Subject: [PATCH 10/44] Update FD6FDetect.info --- apps/fd6fdetect/FD6FDetect.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fd6fdetect/FD6FDetect.info b/apps/fd6fdetect/FD6FDetect.info index cb36e2e5f..9e94798f8 100644 --- a/apps/fd6fdetect/FD6FDetect.info +++ b/apps/fd6fdetect/FD6FDetect.info @@ -2,7 +2,7 @@ { "id": "fd6fdetect", "name": "FD6FDetect", "shortName":"fd6fdetect", - "icon": "FD6FDetect.img", + "icon": "app.png", "version":"0.1", "description": "Allows you to see 0xFD6F beacons near you.", "tags": "", From 770ed00fb0933a992e7a915839a4a882fe224762 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:48:26 -0500 Subject: [PATCH 11/44] Delete FD6FDetect.info --- apps/fd6fdetect/FD6FDetect.info | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 apps/fd6fdetect/FD6FDetect.info diff --git a/apps/fd6fdetect/FD6FDetect.info b/apps/fd6fdetect/FD6FDetect.info deleted file mode 100644 index 9e94798f8..000000000 --- a/apps/fd6fdetect/FD6FDetect.info +++ /dev/null @@ -1,14 +0,0 @@ -}, -{ "id": "fd6fdetect", - "name": "FD6FDetect", - "shortName":"fd6fdetect", - "icon": "app.png", - "version":"0.1", - "description": "Allows you to see 0xFD6F beacons near you.", - "tags": "", - "storage": [ - {"name":"FD6FDetect.app.js","url":"app.js"}, - {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} - ] -} -] From e4c34bc6fd961f72b53b06e67969dbe9cbf6c912 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:49:13 -0500 Subject: [PATCH 12/44] Update apps.json --- apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps.json b/apps.json index 39f424b02..56fadbd49 100644 --- a/apps.json +++ b/apps.json @@ -3438,5 +3438,18 @@ {"name":"carcrazy.app.js","url":"app.js"}, {"name":"carcrazy.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "fd6fdetect", + "name": "FD6FDetect", + "shortName":"fd6fdetect", + "icon": "app.png", + "version":"0.1", + "description": "Allows you to see 0xFD6F beacons near you.", + "tags": "", + "storage": [ + {"name":"FD6FDetect.app.js","url":"app.js"}, + {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} + ] } ] +] From e95744718ed388c46536d9c8cbc95a505da68434 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:50:08 -0500 Subject: [PATCH 13/44] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 56fadbd49..c1b4deb6c 100644 --- a/apps.json +++ b/apps.json @@ -3451,5 +3451,5 @@ {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} ] } -] + ] From 12ee7f830323475b039b4307404d168397b61f4b Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:53:23 -0500 Subject: [PATCH 14/44] Update FD6FDetect.app.js --- apps/fd6fdetect/FD6FDetect.app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/fd6fdetect/FD6FDetect.app.js b/apps/fd6fdetect/FD6FDetect.app.js index 67e4d2c02..dc2649abc 100644 --- a/apps/fd6fdetect/FD6FDetect.app.js +++ b/apps/fd6fdetect/FD6FDetect.app.js @@ -2,7 +2,7 @@ //Bangle.setLCDTimeout(0); // debugging purposes g.clear(); // clear screen let amount = 'global value'; // make amount global -function FindCOVIDAwareBeacons() { // function for finding COVID beacons +function FindFD6FBeacons() { // function for finding COVID beacons NRF.findDevices(function(devices) { // function for searching for devices with the UUID of FD6F g.setFont('Vector', 75); // set size of font to 75x g.setFontAlign(0,0); // align font @@ -11,15 +11,15 @@ NRF.findDevices(function(devices) { // function for searching for devices with t g.drawString(amount, 125, 100); // draw amount of devices matching FD6F if (amount == 1) { // check to see if we need to use the word users or user g.setFont('Vector', 25); // set size of font to 25x - g.drawString('COVIDAwareMN', 125, 150); // draw string - g.drawString('user', 125, 175); // draw string + g.drawString('FD6F', 125, 150); // draw string + g.drawString('beacon', 125, 175); // draw string g.drawString('nearby', 125, 200); // draw string } else{ // if more than one change user to users g.setFont('Vector', 25); // set size of font to 25x - g.drawString('COVIDAwareMN', 125, 150); // draw string - g.drawString('users', 125, 175); // draw string + g.drawString('FD6F', 125, 150); // draw string + g.drawString('beacons', 125, 175); // draw string g.drawString('nearby', 125, 200); // draw string } }, {timeout : 1000, filters : [{services: ['fd6f'] }] }); // set filters to target only FD6F beacons } -setInterval(FindCOVIDAwareBeacons, 2000); // poll for new devices +setInterval(FindFD6FBeacons, 2000); // poll for new devices From 0720eb592918cc9736e22e4bf2534cc3015dbd70 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:53:40 -0500 Subject: [PATCH 15/44] Delete FD6FDetect.app.js --- apps/fd6fdetect/FD6FDetect.app.js | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 apps/fd6fdetect/FD6FDetect.app.js diff --git a/apps/fd6fdetect/FD6FDetect.app.js b/apps/fd6fdetect/FD6FDetect.app.js deleted file mode 100644 index dc2649abc..000000000 --- a/apps/fd6fdetect/FD6FDetect.app.js +++ /dev/null @@ -1,25 +0,0 @@ -//Bangle.setLCDPower(1); //debugging purposes -//Bangle.setLCDTimeout(0); // debugging purposes -g.clear(); // clear screen -let amount = 'global value'; // make amount global -function FindFD6FBeacons() { // function for finding COVID beacons -NRF.findDevices(function(devices) { // function for searching for devices with the UUID of FD6F - g.setFont('Vector', 75); // set size of font to 75x - g.setFontAlign(0,0); // align font - var amount = devices.length; // get amount of devices matching FD6F - g.clear(); // clear screen - g.drawString(amount, 125, 100); // draw amount of devices matching FD6F - if (amount == 1) { // check to see if we need to use the word users or user - g.setFont('Vector', 25); // set size of font to 25x - g.drawString('FD6F', 125, 150); // draw string - g.drawString('beacon', 125, 175); // draw string - g.drawString('nearby', 125, 200); // draw string - } else{ // if more than one change user to users - g.setFont('Vector', 25); // set size of font to 25x - g.drawString('FD6F', 125, 150); // draw string - g.drawString('beacons', 125, 175); // draw string - g.drawString('nearby', 125, 200); // draw string - } -}, {timeout : 1000, filters : [{services: ['fd6f'] }] }); // set filters to target only FD6F beacons -} -setInterval(FindFD6FBeacons, 2000); // poll for new devices From 5ec2135d7d7afaa4063f3393d816cfbc2fead444 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:53:49 -0500 Subject: [PATCH 16/44] Create app.js --- apps/fd6fdetect/app.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 apps/fd6fdetect/app.js diff --git a/apps/fd6fdetect/app.js b/apps/fd6fdetect/app.js new file mode 100644 index 000000000..dc2649abc --- /dev/null +++ b/apps/fd6fdetect/app.js @@ -0,0 +1,25 @@ +//Bangle.setLCDPower(1); //debugging purposes +//Bangle.setLCDTimeout(0); // debugging purposes +g.clear(); // clear screen +let amount = 'global value'; // make amount global +function FindFD6FBeacons() { // function for finding COVID beacons +NRF.findDevices(function(devices) { // function for searching for devices with the UUID of FD6F + g.setFont('Vector', 75); // set size of font to 75x + g.setFontAlign(0,0); // align font + var amount = devices.length; // get amount of devices matching FD6F + g.clear(); // clear screen + g.drawString(amount, 125, 100); // draw amount of devices matching FD6F + if (amount == 1) { // check to see if we need to use the word users or user + g.setFont('Vector', 25); // set size of font to 25x + g.drawString('FD6F', 125, 150); // draw string + g.drawString('beacon', 125, 175); // draw string + g.drawString('nearby', 125, 200); // draw string + } else{ // if more than one change user to users + g.setFont('Vector', 25); // set size of font to 25x + g.drawString('FD6F', 125, 150); // draw string + g.drawString('beacons', 125, 175); // draw string + g.drawString('nearby', 125, 200); // draw string + } +}, {timeout : 1000, filters : [{services: ['fd6f'] }] }); // set filters to target only FD6F beacons +} +setInterval(FindFD6FBeacons, 2000); // poll for new devices From 895b8d3d218b480c522fb85a7e21b727b2410dd7 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:53:58 -0500 Subject: [PATCH 17/44] Delete FD6FDetect.img --- apps/fd6fdetect/FD6FDetect.img | Bin 10371 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/fd6fdetect/FD6FDetect.img diff --git a/apps/fd6fdetect/FD6FDetect.img b/apps/fd6fdetect/FD6FDetect.img deleted file mode 100644 index 2e3442edc94eacf778694b9c81674fd455e069cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10371 zcmeI2P14&o42D&uOJ|c4Xykn-+ROjYHr#9_bZ6H&1#S{*CrVcx~TjbL4b$jAg&swpvjxTQc3jVo%T;$VK+8HcXIuQ zn^2Cc3j~bEK8zWL5II6tj(P$^APWVkwNF9788lcbu6Y*Y1&udftFxpc=p{KQ=tgq` za5^i(`)fL{a&YaD3mlI>-xdz+?enodf)g6&S5^yo%6U-^uGsX3@*w9c?MI(%-Cnot zS8eqcTB)Pm^Lc|~A2i~<>xhGxZCm{ORU2>X2ON^KZGTp=-T(|#e8ryS|f*w)mS><@FSYGNajF z8fA zut4CHIU<<^t9LwOtoLG8=7^vLM`OJ9+z>UkunPVehVqt5HEg{ru}Ug{+UuQ@pXF~_`m z98QBqxtU)V9CKdeTJ1xB1!h7C_FiqyD#19a?a1>Z%)r-NAC18=nN>}E4tEsv;v;cv zjnKWz30_T(g@$RpqA&q@5h&?7=3tb09l!7N-Uli21cww`9ZF(kKg(&{p{W?g>DI>- zu!jYxAT}p2WT!ft0-9I%zf$a@r5e78Tg_R;MI4eK%_Dh%bJin)8esYuuhUCn=2dg# zqSAnvS+TO9(y#RJyUkKOtft{kNLJ@nbKo+MzswlOhYiDB?wT@Vu1^u-T38&{Z8iIx zd-(ofv6r=6RAy|{S;tU=TMsqUdTPg=dwO{N7w5@M#JleqHs0fqe;pv(tLAq&;$Kyl z@r{H#oV6Wbd%*J1Mu#JqoS4e2bhh>(PVpv=>F0?-25$k=Q|*X$UXer56!{v5lSI&2 zPNe($ce;~JzW&>)2&%X{h&Cp<^C%Oa+=F=T2@w=XT9xm9SJjiGQrKq0zJ?C!v)oZM92^<-NL#7iYnE?5yD00QnYE94Le2hJT6#rl_#0r+pO2M*HGk&h2|PaNRwb-4C#NcoVd_K4RH QoN{uZsX6XN$FW5D58@LCkpKVy From de5d096a5c73ec978ec1351f2634f8394d29791f Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:54:11 -0500 Subject: [PATCH 18/44] Add files via upload --- apps/fd6fdetect/app.img | Bin 0 -> 10371 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/fd6fdetect/app.img diff --git a/apps/fd6fdetect/app.img b/apps/fd6fdetect/app.img new file mode 100644 index 0000000000000000000000000000000000000000..2e3442edc94eacf778694b9c81674fd455e069cd GIT binary patch literal 10371 zcmeI2P14&o42D&uOJ|c4Xykn-+ROjYHr#9_bZ6H&1#S{*CrVcx~TjbL4b$jAg&swpvjxTQc3jVo%T;$VK+8HcXIuQ zn^2Cc3j~bEK8zWL5II6tj(P$^APWVkwNF9788lcbu6Y*Y1&udftFxpc=p{KQ=tgq` za5^i(`)fL{a&YaD3mlI>-xdz+?enodf)g6&S5^yo%6U-^uGsX3@*w9c?MI(%-Cnot zS8eqcTB)Pm^Lc|~A2i~<>xhGxZCm{ORU2>X2ON^KZGTp=-T(|#e8ryS|f*w)mS><@FSYGNajF z8fA zut4CHIU<<^t9LwOtoLG8=7^vLM`OJ9+z>UkunPVehVqt5HEg{ru}Ug{+UuQ@pXF~_`m z98QBqxtU)V9CKdeTJ1xB1!h7C_FiqyD#19a?a1>Z%)r-NAC18=nN>}E4tEsv;v;cv zjnKWz30_T(g@$RpqA&q@5h&?7=3tb09l!7N-Uli21cww`9ZF(kKg(&{p{W?g>DI>- zu!jYxAT}p2WT!ft0-9I%zf$a@r5e78Tg_R;MI4eK%_Dh%bJin)8esYuuhUCn=2dg# zqSAnvS+TO9(y#RJyUkKOtft{kNLJ@nbKo+MzswlOhYiDB?wT@Vu1^u-T38&{Z8iIx zd-(ofv6r=6RAy|{S;tU=TMsqUdTPg=dwO{N7w5@M#JleqHs0fqe;pv(tLAq&;$Kyl z@r{H#oV6Wbd%*J1Mu#JqoS4e2bhh>(PVpv=>F0?-25$k=Q|*X$UXer56!{v5lSI&2 zPNe($ce;~JzW&>)2&%X{h&Cp<^C%Oa+=F=T2@w=XT9xm9SJjiGQrKq0zJ?C!v)oZM92^<-NL#7iYnE?5yD00QnYE94Le2hJT6#rl_#0r+pO2M*HGk&h2|PaNRwb-4C#NcoVd_K4RH QoN{uZsX6XN$FW5D58@LCkpKVy literal 0 HcmV?d00001 From 3d2a10a51e66ddc381c9f98f4e8cae120362ab67 Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:56:12 -0500 Subject: [PATCH 19/44] Delete app.img --- apps/fd6fdetect/app.img | Bin 10371 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/fd6fdetect/app.img diff --git a/apps/fd6fdetect/app.img b/apps/fd6fdetect/app.img deleted file mode 100644 index 2e3442edc94eacf778694b9c81674fd455e069cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10371 zcmeI2P14&o42D&uOJ|c4Xykn-+ROjYHr#9_bZ6H&1#S{*CrVcx~TjbL4b$jAg&swpvjxTQc3jVo%T;$VK+8HcXIuQ zn^2Cc3j~bEK8zWL5II6tj(P$^APWVkwNF9788lcbu6Y*Y1&udftFxpc=p{KQ=tgq` za5^i(`)fL{a&YaD3mlI>-xdz+?enodf)g6&S5^yo%6U-^uGsX3@*w9c?MI(%-Cnot zS8eqcTB)Pm^Lc|~A2i~<>xhGxZCm{ORU2>X2ON^KZGTp=-T(|#e8ryS|f*w)mS><@FSYGNajF z8fA zut4CHIU<<^t9LwOtoLG8=7^vLM`OJ9+z>UkunPVehVqt5HEg{ru}Ug{+UuQ@pXF~_`m z98QBqxtU)V9CKdeTJ1xB1!h7C_FiqyD#19a?a1>Z%)r-NAC18=nN>}E4tEsv;v;cv zjnKWz30_T(g@$RpqA&q@5h&?7=3tb09l!7N-Uli21cww`9ZF(kKg(&{p{W?g>DI>- zu!jYxAT}p2WT!ft0-9I%zf$a@r5e78Tg_R;MI4eK%_Dh%bJin)8esYuuhUCn=2dg# zqSAnvS+TO9(y#RJyUkKOtft{kNLJ@nbKo+MzswlOhYiDB?wT@Vu1^u-T38&{Z8iIx zd-(ofv6r=6RAy|{S;tU=TMsqUdTPg=dwO{N7w5@M#JleqHs0fqe;pv(tLAq&;$Kyl z@r{H#oV6Wbd%*J1Mu#JqoS4e2bhh>(PVpv=>F0?-25$k=Q|*X$UXer56!{v5lSI&2 zPNe($ce;~JzW&>)2&%X{h&Cp<^C%Oa+=F=T2@w=XT9xm9SJjiGQrKq0zJ?C!v)oZM92^<-NL#7iYnE?5yD00QnYE94Le2hJT6#rl_#0r+pO2M*HGk&h2|PaNRwb-4C#NcoVd_K4RH QoN{uZsX6XN$FW5D58@LCkpKVy From 22ac4beb8c6c6415343f4fa901ff75edc9bf436e Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 10:56:23 -0500 Subject: [PATCH 20/44] Create app-icon.js --- apps/fd6fdetect/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/fd6fdetect/app-icon.js diff --git a/apps/fd6fdetect/app-icon.js b/apps/fd6fdetect/app-icon.js new file mode 100644 index 000000000..c18c93a9d --- /dev/null +++ b/apps/fd6fdetect/app-icon.js @@ -0,0 +1 @@ +var img = E.toArrayBuffer(atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAB+AAAAAAB+AAAAAIA8AQAAAcD/A4AAA8P/w8AAB8//8+AAD/+B//AAB/wAP+AAAPgAHwAAAPGBjwAAAePDx4AAAcPDw4AAA4PDwcAAA4GBgcAAB4AAAeAA9wAAAO8A9xw8OO8A/z48fP8A/z48fP8A/xw8OP8A9wAAAO8AB4AAAeAAA4GBgcAAA4PDwcAAAcPDw4AAAePDx4AAAPGBjwAAAPgAHwAAB/wAP+AAD/+B//AAB8//8+AAA8P/w8AAAcD/A4AAAIA8AQAAAAA8AAAAAAB+AAAAAAB+AAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")) From 9e5c41df80b034817081964570eb7a82c584f90c Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:00:03 -0500 Subject: [PATCH 21/44] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index c1b4deb6c..574ba06ee 100644 --- a/apps.json +++ b/apps.json @@ -3445,7 +3445,7 @@ "icon": "app.png", "version":"0.1", "description": "Allows you to see 0xFD6F beacons near you.", - "tags": "", + "tags": "tool", "storage": [ {"name":"FD6FDetect.app.js","url":"app.js"}, {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} From 4be76545e979efaef246014ffcf73145255681ea Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:04:17 -0500 Subject: [PATCH 22/44] Update app-icon.js --- apps/fd6fdetect/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fd6fdetect/app-icon.js b/apps/fd6fdetect/app-icon.js index c18c93a9d..e8868099f 100644 --- a/apps/fd6fdetect/app-icon.js +++ b/apps/fd6fdetect/app-icon.js @@ -1 +1 @@ -var img = E.toArrayBuffer(atob("MDCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAB+AAAAAAB+AAAAAIA8AQAAAcD/A4AAA8P/w8AAB8//8+AAD/+B//AAB/wAP+AAAPgAHwAAAPGBjwAAAePDx4AAAcPDw4AAA4PDwcAAA4GBgcAAB4AAAeAA9wAAAO8A9xw8OO8A/z48fP8A/z48fP8A/xw8OP8A9wAAAO8AB4AAAeAAA4GBgcAAA4PDwcAAAcPDw4AAAePDx4AAAPGBjwAAAPgAHwAAB/wAP+AAD/+B//AAB8//8+AAA8P/w8AAAcD/A4AAAIA8AQAAAAA8AAAAAAB+AAAAAAB+AAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")) +require("heatshrink").decompress(atob("mEwwIjgg/gAp0IgfAiAFBjkP+E4AoM8n/8ngFBvn//8+AoP//Ef/4FBv/Agf+AoMPwEB+AFCjEYAoUenk8vAvCAoIvCnAFBjgFCC4IFCCgUeEQNwAoMO+EPuPD4eOAoPz8fH54FH+IRBx4FBDogpFGoxBFJopZFMopxFPoqJFSoqhFVoq5FgAFBa6gAW")) From c283f81af297574cdbeea878b6118f997773f3fd Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:09:15 -0500 Subject: [PATCH 23/44] Update app.js --- apps/fd6fdetect/app.js | 44 ++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/apps/fd6fdetect/app.js b/apps/fd6fdetect/app.js index dc2649abc..a7ef71994 100644 --- a/apps/fd6fdetect/app.js +++ b/apps/fd6fdetect/app.js @@ -1,25 +1,23 @@ -//Bangle.setLCDPower(1); //debugging purposes -//Bangle.setLCDTimeout(0); // debugging purposes -g.clear(); // clear screen -let amount = 'global value'; // make amount global -function FindFD6FBeacons() { // function for finding COVID beacons -NRF.findDevices(function(devices) { // function for searching for devices with the UUID of FD6F - g.setFont('Vector', 75); // set size of font to 75x - g.setFontAlign(0,0); // align font - var amount = devices.length; // get amount of devices matching FD6F - g.clear(); // clear screen - g.drawString(amount, 125, 100); // draw amount of devices matching FD6F - if (amount == 1) { // check to see if we need to use the word users or user - g.setFont('Vector', 25); // set size of font to 25x - g.drawString('FD6F', 125, 150); // draw string - g.drawString('beacon', 125, 175); // draw string - g.drawString('nearby', 125, 200); // draw string - } else{ // if more than one change user to users - g.setFont('Vector', 25); // set size of font to 25x - g.drawString('FD6F', 125, 150); // draw string - g.drawString('beacons', 125, 175); // draw string - g.drawString('nearby', 125, 200); // draw string +g.clear(); +let amount = 'global value'; +function FindFD6FBeacons() { +NRF.findDevices(function(devices) { + g.setFont('Vector', 75); + g.setFontAlign(0,0); + var amount = devices.length; + g.clear(); + g.drawString(amount, 125, 100); + if (amount == 1) { + g.setFont('Vector', 25); + g.drawString('FD6F', 125, 150); + g.drawString('beacon', 125, 175); + g.drawString('nearby', 125, 200); + } else{ + g.setFont('Vector', 25); + g.drawString('FD6F', 125, 150); + g.drawString('beacons', 125, 175); + g.drawString('nearby', 125, 200); } -}, {timeout : 1000, filters : [{services: ['fd6f'] }] }); // set filters to target only FD6F beacons +}, {timeout : 1000, filters : [{services: ['fd6f'] }] }); } -setInterval(FindFD6FBeacons, 2000); // poll for new devices +setInterval(FindFD6FBeacons, 2000); From 39d94076c01ba775d5b24253b92961749988695c Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:11:10 -0500 Subject: [PATCH 24/44] Update apps.json --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 574ba06ee..a50447cbd 100644 --- a/apps.json +++ b/apps.json @@ -3447,8 +3447,8 @@ "description": "Allows you to see 0xFD6F beacons near you.", "tags": "tool", "storage": [ - {"name":"FD6FDetect.app.js","url":"app.js"}, - {"name":"FD6FDetect.img","url":"app-icon.js","evaluate":true} + {"name":"fd6fdetect.app.js","url":"app.js"}, + {"name":"fd6fdetect.img","url":"app-icon.js","evaluate":true} ] } From 41dbc7bb24c870eec4a344954e5735de27f5804b Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:18:51 -0500 Subject: [PATCH 25/44] Update ChangeLog --- apps/fd6fdetect/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fd6fdetect/ChangeLog b/apps/fd6fdetect/ChangeLog index 27a8806b2..3c82c3ca7 100644 --- a/apps/fd6fdetect/ChangeLog +++ b/apps/fd6fdetect/ChangeLog @@ -1 +1 @@ -0.01: Added source code +0.1: Added source code From 171b7d1fcefb6a66ddbfae40b808836e1a8aa2bf Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 10:45:05 -0400 Subject: [PATCH 26/44] change default value --- apps.json | 2 +- apps/hourstrike/ChangeLog | 1 + apps/hourstrike/app.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 560d6505b..54621f81b 100644 --- a/apps.json +++ b/apps.json @@ -3265,7 +3265,7 @@ "name": "Hour Strike", "shortName": "Hour Strike", "icon": "app-icon.png", - "version": "0.07", + "version": "0.08", "description": "Strike the clock on the hour. A great tool to remind you an hour has passed!", "tags": "tool,alarm", "readme": "README.md", diff --git a/apps/hourstrike/ChangeLog b/apps/hourstrike/ChangeLog index 73b8cb168..15a8b9a35 100644 --- a/apps/hourstrike/ChangeLog +++ b/apps/hourstrike/ChangeLog @@ -5,3 +5,4 @@ 0.05: Add display for the next strike time 0.06: Move the next strike time to the first row of display 0.07: Change the boot function to avoid reloading the entire watch +0.08: Default to no strikes. diff --git a/apps/hourstrike/app.js b/apps/hourstrike/app.js index c70fa2d41..3d47b7b44 100644 --- a/apps/hourstrike/app.js +++ b/apps/hourstrike/app.js @@ -7,7 +7,7 @@ function updateSettings() { function resetSettings() { settings = { - interval: 3600, + interval: -1, start: 9, end: 21, vlevel: 0.5, From 56ea00dc3159bc77ae108f03b7df11b9c2a295e7 Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 10:55:33 -0400 Subject: [PATCH 27/44] fix file-not-found issue during the first boot --- apps/hourstrike/ChangeLog | 2 +- apps/hourstrike/boot.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/hourstrike/ChangeLog b/apps/hourstrike/ChangeLog index 15a8b9a35..d0b064565 100644 --- a/apps/hourstrike/ChangeLog +++ b/apps/hourstrike/ChangeLog @@ -5,4 +5,4 @@ 0.05: Add display for the next strike time 0.06: Move the next strike time to the first row of display 0.07: Change the boot function to avoid reloading the entire watch -0.08: Default to no strikes. +0.08: Default to no strikes. Fix file-not-found issue during the first boot. diff --git a/apps/hourstrike/boot.js b/apps/hourstrike/boot.js index 8ddad31af..0c71f03a6 100644 --- a/apps/hourstrike/boot.js +++ b/apps/hourstrike/boot.js @@ -1,6 +1,7 @@ (function() { function setup () { var settings = require('Storage').readJSON('hourstrike.json',1)||[]; + if (!settings) resetSettings(); var t = new Date(); var t_min_sec = t.getMinutes()*60+t.getSeconds(); var wait_msec = settings.interval>0?(settings.interval-t_min_sec%settings.interval)*1000:-1; From 284092738852fb08dc8ff11b88ae26fbbedda75d Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 11:03:20 -0400 Subject: [PATCH 28/44] specify the data file --- apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps.json b/apps.json index 54621f81b..32d11394a 100644 --- a/apps.json +++ b/apps.json @@ -3273,6 +3273,9 @@ {"name":"hourstrike.app.js","url":"app.js"}, {"name":"hourstrike.boot.js","url":"boot.js"}, {"name":"hourstrike.img","url":"app-icon.js","evaluate":true} + ], + "data": [ + {"name":"hourstrike.json"} ] }, { "id": "whereworld", From fc9c529dc5783990841281efc6acfbf17c1e30f7 Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 11:11:57 -0400 Subject: [PATCH 29/44] remove or operation at the end. Deal with file-not-found properly --- apps/hourstrike/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/hourstrike/boot.js b/apps/hourstrike/boot.js index 0c71f03a6..b8d44c961 100644 --- a/apps/hourstrike/boot.js +++ b/apps/hourstrike/boot.js @@ -1,6 +1,6 @@ (function() { function setup () { - var settings = require('Storage').readJSON('hourstrike.json',1)||[]; + var settings = require('Storage').readJSON('hourstrike.json',1); if (!settings) resetSettings(); var t = new Date(); var t_min_sec = t.getMinutes()*60+t.getSeconds(); From 7ad0ca6acb9848488fd945c6208cf1334910b51e Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 11:24:24 -0400 Subject: [PATCH 30/44] add default data file as json --- apps.json | 6 ++---- apps/hourstrike/ChangeLog | 2 +- apps/hourstrike/app.js | 17 +---------------- apps/hourstrike/boot.js | 1 - apps/hourstrike/hourstrike.json | 1 + 5 files changed, 5 insertions(+), 22 deletions(-) create mode 100644 apps/hourstrike/hourstrike.json diff --git a/apps.json b/apps.json index 32d11394a..9cf55d1a1 100644 --- a/apps.json +++ b/apps.json @@ -3272,10 +3272,8 @@ "storage": [ {"name":"hourstrike.app.js","url":"app.js"}, {"name":"hourstrike.boot.js","url":"boot.js"}, - {"name":"hourstrike.img","url":"app-icon.js","evaluate":true} - ], - "data": [ - {"name":"hourstrike.json"} + {"name":"hourstrike.img","url":"app-icon.js","evaluate":true}, + {"name":"hourstrike.json","url":"hourstrike.json"} ] }, { "id": "whereworld", diff --git a/apps/hourstrike/ChangeLog b/apps/hourstrike/ChangeLog index d0b064565..09eb45b36 100644 --- a/apps/hourstrike/ChangeLog +++ b/apps/hourstrike/ChangeLog @@ -5,4 +5,4 @@ 0.05: Add display for the next strike time 0.06: Move the next strike time to the first row of display 0.07: Change the boot function to avoid reloading the entire watch -0.08: Default to no strikes. Fix file-not-found issue during the first boot. +0.08: Default to no strikes. Fix file-not-found issue during the first boot. Add data file. diff --git a/apps/hourstrike/app.js b/apps/hourstrike/app.js index 3d47b7b44..7dc62d440 100644 --- a/apps/hourstrike/app.js +++ b/apps/hourstrike/app.js @@ -1,25 +1,10 @@ const storage = require('Storage'); -let settings; +var settings = storage.readJSON('hourstrike.json', 1); function updateSettings() { storage.write('hourstrike.json', settings); } -function resetSettings() { - settings = { - interval: -1, - start: 9, - end: 21, - vlevel: 0.5, - next_hour: -1, - next_minute: -1, - }; - updateSettings(); -} - -settings = storage.readJSON('hourstrike.json', 1); -if (!settings) resetSettings(); - function showMainMenu() { var mode_txt = ['Off','1 min','5 min','10 min','1/4 h','1/2 h','1 h']; var mode_interval = [-1,60,300,600,900,1800,3600]; diff --git a/apps/hourstrike/boot.js b/apps/hourstrike/boot.js index b8d44c961..027b8bb5b 100644 --- a/apps/hourstrike/boot.js +++ b/apps/hourstrike/boot.js @@ -1,7 +1,6 @@ (function() { function setup () { var settings = require('Storage').readJSON('hourstrike.json',1); - if (!settings) resetSettings(); var t = new Date(); var t_min_sec = t.getMinutes()*60+t.getSeconds(); var wait_msec = settings.interval>0?(settings.interval-t_min_sec%settings.interval)*1000:-1; diff --git a/apps/hourstrike/hourstrike.json b/apps/hourstrike/hourstrike.json new file mode 100644 index 000000000..09b17dc8e --- /dev/null +++ b/apps/hourstrike/hourstrike.json @@ -0,0 +1 @@ +{"interval":-1,"start":9,"end":21,"vlevel":0.5,"next_hour":-1,"next_minute":-1} From 28733a400eabb03c8ca1c7f33f7893440a0d1b61 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 13 Sep 2021 11:14:12 -0400 Subject: [PATCH 31/44] Add vector clock --- apps.json | 13 +++++ apps/vectorclock/Changelog | 1 + apps/vectorclock/app-icon.js | 1 + apps/vectorclock/app.js | 93 +++++++++++++++++++++++++++++++++++ apps/vectorclock/app.png | Bin 0 -> 12820 bytes 5 files changed, 108 insertions(+) create mode 100644 apps/vectorclock/Changelog create mode 100644 apps/vectorclock/app-icon.js create mode 100644 apps/vectorclock/app.js create mode 100644 apps/vectorclock/app.png diff --git a/apps.json b/apps.json index 560d6505b..7632d9a47 100644 --- a/apps.json +++ b/apps.json @@ -3442,5 +3442,18 @@ "data": [ {"name":"app.json"} ] +}, +{ "id": "vectorclock", + "name": "Vector Clock", + "icon": "app.png", + "version": "0.01", + "description": "A digital clock that uses the built-in vector font.", + "tags": "clock", + "type": "clock", + "allow_emulator": true, + "storage": [ + {"name":"vectorclock.app.js","url":"app.js"}, + {"name":"vectorclock.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/vectorclock/Changelog b/apps/vectorclock/Changelog new file mode 100644 index 000000000..a483abca9 --- /dev/null +++ b/apps/vectorclock/Changelog @@ -0,0 +1 @@ +0.1: New watch face \ No newline at end of file diff --git a/apps/vectorclock/app-icon.js b/apps/vectorclock/app-icon.js new file mode 100644 index 000000000..14933670b --- /dev/null +++ b/apps/vectorclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkEIf4AxgMhgUAiIHCmYKCmcgBAUCmQDEgUzkcg+QJBl//AYfzDgX///wAYcCmMzmQXC+c/AYM/kU/iEAgfzkfyAYcCAYM/HIUwC4QxCkEhgcwEYIDDgUwgcSC4QsBLQf/iATEAYcBiB3FC4cvKAIvINAMxgSGDC4UT/4ICC5EDkcjI40/mIHCgaNBC4IDCBAMDmUiXwU/mcQ/8zAYMyQ4M/RYQDBC4yxBIgIDDE4M//5FBAYasBifxf5QA/AC0iAALFDA4ICBgMhC5SBB//wA4gCBUoIXLXYKaBAAUjC54KJC6Ejmcxe4MAiczC4IJBmEjNwILBL4b5Bl7vCD4IEB+cCNgUP+A3EL4MyC4IkBiE/BoMD+cP+MvCoPygfxI4wXBA4UD+QZBh8wgacB/4ODC5YvC+EfC4JVBiAXLgP/n5JBZgcPSwgXIRYPz+cBQoIXBLwgARgU/c4gAQJYJeDF6TXBAH5OMmUBmcQkcgicxBQMTkBbDBIMCSAcTl8jmcxmXymczBQIECCIQEBkbDBAAUfFgMwgPymUDiUg+EjiUwgUhBIMQC4cCfgIXBeAINBicwC4JBBgY7BgcAC4cfkEDkUx+UAmUjBQPxmZZDBIQXDl//kQBC+UvDQIKBmM//4FCBYP/bX4A/ACIA=")) diff --git a/apps/vectorclock/app.js b/apps/vectorclock/app.js new file mode 100644 index 000000000..b9e5f7bef --- /dev/null +++ b/apps/vectorclock/app.js @@ -0,0 +1,93 @@ +const is12Hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]; +const locale = require("locale"); + +function padNum(n, l) { + return ("0".repeat(l)+n).substr(-l); +} + +let rects = {}; +let rectsToClear = {}; +let commands = []; + +function pushCommand(command) { + let hash = E.CRC32(E.toJS(arguments)); + if (!delete rectsToClear[hash]) { + commands.push({hash: hash, command: Function.apply.bind(command, null, arguments.slice(1))}); + } +} + +function executeCommands() { + "ram"; + for (let hash in rectsToClear) delete rects[hash]; + for (let r of rectsToClear) if (r) g.clearRect(r.x1, r.y1, r.x2, r.y2); + g.getModified(true); + for (let c of commands) { + c.command(); + rects[c.hash] = g.getModified(true); + } + rectsToClear = Object.assign({}, rects); + commands = []; +} + +function drawVectorText(text, size, x, y, alignX, alignY) { + g.setFont("Vector", size).setFontAlign(alignX, alignY).drawString(text, x, y); +} + +function draw() { + g.reset(); + + let d = new Date(); + let hours = is12Hour ? ((d.getHours() + 11) % 12) + 1 : d.getHours(); + let timeText = `${hours}:${padNum(d.getMinutes(), 2)}`; + let meridian = is12Hour ? ((d.getHours() < 12) ? "AM" : "PM") : ""; + let secondsText = padNum(d.getSeconds(), 2); + let dowText = locale.dow(d); + let dateText = locale.date(d, true); + + g.setFont("Vector", 256); + let timeFontSize = g.getWidth() / ((g.stringWidth(timeText) / 256) + (Math.max(g.stringWidth(meridian), g.stringWidth(secondsText)) / 512 * 9 / 10)); + let dowFontSize = g.getWidth() / (g.stringWidth(dowText) / 256); + let dateFontSize = g.getWidth() / (g.stringWidth(dateText) / 256); + + let timeHeight = g.setFont("Vector", timeFontSize).getFontHeight() * 9 / 10; + let dowHeight = g.setFont("Vector", dowFontSize).getFontHeight(); + let dateHeight = g.setFont("Vector", dateFontSize).getFontHeight(); + + let remainingHeight = g.getHeight() - 24 - timeHeight - dowHeight - dateHeight; + let spacer = remainingHeight / 4; + + let y = 24 + spacer; + + pushCommand(drawVectorText, timeText, timeFontSize, 0, y, -1, -1); + pushCommand(drawVectorText, meridian, timeFontSize*9/20, g.getWidth(), y, 1, -1); + pushCommand(drawVectorText, secondsText, timeFontSize*9/20, g.getWidth(), y + timeHeight, 1, 1); + y += timeHeight + spacer; + + pushCommand(drawVectorText, dowText, dowFontSize, g.getWidth()/2, y, 0, -1); + y += dowHeight + spacer; + + pushCommand(drawVectorText, dateText, dateFontSize, g.getWidth()/2, y, 0, -1); + + executeCommands(); +} + +let timeout; + +function tick() { + draw(); + timeout = setTimeout(tick, 1000 - getTime() % 1 * 1000); +} + +Bangle.on('lcdPower', function(on) { + if (timeout) clearTimeout(timeout); + timeout = null; + if (on) tick(); +}); + +g.clear(); +tick(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +// Show launcher when middle button pressed +setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); diff --git a/apps/vectorclock/app.png b/apps/vectorclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..00723fce9c09e01ffb7a0371e27fa499a6e106e0 GIT binary patch literal 12820 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 m+ddOl5?RH7iUA*x0sjK3*Kz*WhXSeq0000 Date: Mon, 13 Sep 2021 12:45:24 -0400 Subject: [PATCH 32/44] add configuration for text direction --- apps.json | 18 ++++-------------- apps/largeclock/ChangeLog | 1 + apps/largeclock/README.md | 1 + apps/largeclock/largeclock.js | 9 ++++++--- apps/largeclock/largeclock.json | 3 ++- apps/largeclock/settings.js | 16 +++++++++++++--- 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/apps.json b/apps.json index 9cf55d1a1..a0384b159 100644 --- a/apps.json +++ b/apps.json @@ -1944,26 +1944,16 @@ "id": "largeclock", "name": "Large Clock", "icon": "largeclock.png", - "version": "0.09", + "version": "0.10", "description": "A readable and informational digital watch, with date, seconds and moon phase", "readme": "README.md", "tags": "clock", "type": "clock", "allow_emulator": true, "storage": [ - { - "name": "largeclock.app.js", - "url": "largeclock.js" - }, - { - "name": "largeclock.img", - "url": "largeclock-icon.js", - "evaluate": true - }, - { - "name": "largeclock.settings.js", - "url": "settings.js" - } + {"name": "largeclock.app.js", "url": "largeclock.js"}, + {"name": "largeclock.img", "url": "largeclock-icon.js", "evaluate": true}, + {"name": "largeclock.settings.js", "url": "settings.js"} ], "data": [ {"name":"largeclock.json"} diff --git a/apps/largeclock/ChangeLog b/apps/largeclock/ChangeLog index 6fa9297d8..8c9b24be9 100644 --- a/apps/largeclock/ChangeLog +++ b/apps/largeclock/ChangeLog @@ -7,3 +7,4 @@ 0.07: Don't clear all intervals during initialisation 0.08: Use Bangle.setUI for button/launcher handling 0.09: fix font size for latest firmwares +0.10: Configure the side text direction based on the wrist on which you wear your watch diff --git a/apps/largeclock/README.md b/apps/largeclock/README.md index 5c2ad42c2..b6e6a640f 100644 --- a/apps/largeclock/README.md +++ b/apps/largeclock/README.md @@ -7,6 +7,7 @@ A readable and informational digital watch, with date, seconds and moon phase an - Readable - Informative: hours, minutes, secondsa, date, year and moon phase - Pairs nicely with any other apps: in setting > large clock any installed app can be assigned to BTN1 and BTN3 in order to open it easily directly from the watch, without the hassle of passing trough the launcher. For example BTN1 can be assigned to alarm and BTN3 to chronometer. +- Configure the text direction on the side depending on the wrist on which you wear your watch. ## How to use it diff --git a/apps/largeclock/largeclock.js b/apps/largeclock/largeclock.js index 6e1efeb4c..cbe5341f0 100644 --- a/apps/largeclock/largeclock.js +++ b/apps/largeclock/largeclock.js @@ -14,6 +14,9 @@ const settings = require("Storage").readJSON("largeclock.json", 1)||{}; const BTN1app = settings.BTN1 || ""; const BTN3app = settings.BTN3 || ""; +const right_hand = (require("Storage").readJSON("largeclock.json",1)||{}).right_hand; +const rotation = right_hand ? 3 : 1; + function drawMoon(d) { const BLACK = 0, MOON = 0x41f, @@ -145,9 +148,9 @@ function drawTime(d) { g.setColor(1, 50, 1); g.drawString(minutes, 40, 130, true); g.setFont("Vector", 20); - g.setRotation(3); - g.drawString(`${dow} ${day} ${month}`, 60, 10, true); - g.drawString(year, is12Hour ? 46 : 75, 205, true); + g.setRotation(rotation); + g.drawString(`${dow} ${day} ${month}`, 60, right_hand?10:205, true); + g.drawString(year, is12Hour?(right_hand?56:120):(right_hand?85:115), right_hand?205:10, true); lastMinutes = minutes; } g.setRotation(0); diff --git a/apps/largeclock/largeclock.json b/apps/largeclock/largeclock.json index 58c981197..8df84b2de 100644 --- a/apps/largeclock/largeclock.json +++ b/apps/largeclock/largeclock.json @@ -1,4 +1,5 @@ { "BTN1": "", - "BTN3": "" + "BTN3": "", + "right_hand": true } diff --git a/apps/largeclock/settings.js b/apps/largeclock/settings.js index 293f66677..f996666ab 100644 --- a/apps/largeclock/settings.js +++ b/apps/largeclock/settings.js @@ -28,7 +28,8 @@ const settings = s.readJSON("largeclock.json", 1) || { BTN1: "", - BTN3: "" + BTN3: "", + right_hand: false }; function showApps(btn) { @@ -67,10 +68,19 @@ } const mainMenu = { - "": { title: "Large Clock Settings" }, + "": { title: "Large Clock" }, "< Back": back, "BTN1 app": () => showApps("BTN1"), - "BTN3 app": () => showApps("BTN3") + "BTN3 app": () => showApps("BTN3"), + "On right hand": { + value: !!settings.right_hand, + format: v=>v?"Yes":"No", + onchange: v=>{ + settings.right_hand = v; + s.writeJSON("largeclock.json", settings); + } + } }; + E.showMenu(mainMenu); }); From 3e5b429e855fcf8dc140bde93442a974c9c27a7a Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 13 Sep 2021 13:41:19 -0400 Subject: [PATCH 33/44] Update vectorclock to use setUI --- apps.json | 2 +- apps/vectorclock/Changelog | 3 ++- apps/vectorclock/app.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 7632d9a47..03efe79e7 100644 --- a/apps.json +++ b/apps.json @@ -3446,7 +3446,7 @@ { "id": "vectorclock", "name": "Vector Clock", "icon": "app.png", - "version": "0.01", + "version": "0.02", "description": "A digital clock that uses the built-in vector font.", "tags": "clock", "type": "clock", diff --git a/apps/vectorclock/Changelog b/apps/vectorclock/Changelog index a483abca9..43190331b 100644 --- a/apps/vectorclock/Changelog +++ b/apps/vectorclock/Changelog @@ -1 +1,2 @@ -0.1: New watch face \ No newline at end of file +0.1: New watch face +0.2: Use Bangle.setUI for button/launcher handling diff --git a/apps/vectorclock/app.js b/apps/vectorclock/app.js index b9e5f7bef..a98c9f97b 100644 --- a/apps/vectorclock/app.js +++ b/apps/vectorclock/app.js @@ -90,4 +90,4 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); // Show launcher when middle button pressed -setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); +Bangle.setUI("clock"); From 79d4d38baaa4f8ea262bfab07812266fa959480b Mon Sep 17 00:00:00 2001 From: Weiming Hu Date: Mon, 13 Sep 2021 14:17:25 -0400 Subject: [PATCH 34/44] remove extra read --- apps/largeclock/largeclock.js | 2 +- apps/largeclock/largeclock.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/largeclock/largeclock.js b/apps/largeclock/largeclock.js index cbe5341f0..e1afd5949 100644 --- a/apps/largeclock/largeclock.js +++ b/apps/largeclock/largeclock.js @@ -14,7 +14,7 @@ const settings = require("Storage").readJSON("largeclock.json", 1)||{}; const BTN1app = settings.BTN1 || ""; const BTN3app = settings.BTN3 || ""; -const right_hand = (require("Storage").readJSON("largeclock.json",1)||{}).right_hand; +const right_hand = !!settings.right_hand; const rotation = right_hand ? 3 : 1; function drawMoon(d) { diff --git a/apps/largeclock/largeclock.json b/apps/largeclock/largeclock.json index 8df84b2de..7fff2f438 100644 --- a/apps/largeclock/largeclock.json +++ b/apps/largeclock/largeclock.json @@ -1,5 +1,5 @@ { "BTN1": "", "BTN3": "", - "right_hand": true + "right_hand": false } From 152e9be521e00fae86e49b2911e681deedf6ae55 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 13 Sep 2021 15:08:28 -0400 Subject: [PATCH 35/44] Add shortcuts app --- apps.json | 17 ++++++++++ apps/shortcuts/ChangeLog | 1 + apps/shortcuts/README.md | 7 ++++ apps/shortcuts/app.png | Bin 0 -> 767 bytes apps/shortcuts/boot.js | 16 +++++++++ apps/shortcuts/settings.js | 66 +++++++++++++++++++++++++++++++++++++ 6 files changed, 107 insertions(+) create mode 100644 apps/shortcuts/ChangeLog create mode 100644 apps/shortcuts/README.md create mode 100644 apps/shortcuts/app.png create mode 100644 apps/shortcuts/boot.js create mode 100644 apps/shortcuts/settings.js diff --git a/apps.json b/apps.json index 560d6505b..1d7852250 100644 --- a/apps.json +++ b/apps.json @@ -3442,5 +3442,22 @@ "data": [ {"name":"app.json"} ] +}, +{ "id": "shortcuts", + "name": "Shortcuts", + "shortName":"Shortcuts", + "icon": "app.png", + "version":"0.01", + "description": "Quickly load your favourite apps from (almost) any watch face.", + "tags": "tool", + "type": "bootloader", + "readme": "README.md", + "storage": [ + {"name":"shortcuts.boot.js","url":"boot.js"}, + {"name":"shortcuts.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"shortcuts.json"} + ] } ] diff --git a/apps/shortcuts/ChangeLog b/apps/shortcuts/ChangeLog new file mode 100644 index 000000000..2286a7f70 --- /dev/null +++ b/apps/shortcuts/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/shortcuts/README.md b/apps/shortcuts/README.md new file mode 100644 index 000000000..d8965cf15 --- /dev/null +++ b/apps/shortcuts/README.md @@ -0,0 +1,7 @@ +# Shortcuts + +Any installed app can be assigned to BTN1 and BTN3 and launched directly from compatible watch faces. This works with any watch face that uses `Bangle.setUI("clock")`. + +## Credits + +Shortcut icon by Icons8 \ No newline at end of file diff --git a/apps/shortcuts/app.png b/apps/shortcuts/app.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc8b9d3a558fe90b893b151eb86925952a15883 GIT binary patch literal 767 zcmVLVrYm zll%x16Ey~7A~$FPCXx^n5YR>_ZNa1!NNJ$$dVy(D-7Q_uX^~`~yFF+2J@aOEW@l#s z0|Ntt(?n<`o}`p1MZvTJxSQD_6*eIdf9@2o)sm9dU1bGN|AWp0fCmbuwUU|!0C*bE znSaHrm8fOlOmOB6v~UT1eD)HV^+et6Ep2uTOx{7~)gDq^wh`#?ICZrz?CoP|<{h~% zn*m>V1i@HD*FA;3eR5saInWy()@_0c`y_6*iH58~rDCxWvZ}Bf_`0x&)wy|YSxs0C zq?T8)JUhoJc_M5EvRi2^zIqEqQMe@Qg2ljLp@2^>-k@A6ameX{#lX_cEDnC|)@*Yn z;DbMMlcQV}Xm(NSvI3ZxOpr83BEWi<0vM>|FyKY%35RdIiG6rx2&HkqcB2S7Bi^Xw;w9D1V?DH(4zRjE_;I>xN`NQOc@u z?_fX9ShVB`#xAM627c2$bPWz?7qZDTF6caR)JrV`n;`rnaCEW0 xjWwS~?KvP2$FYgiW { + let settings = require("Storage").readJSON("shortcuts.json", 1)||{}; + console.log(settings); + if (dir == -1) { + if (settings.BTN1) load(settings.BTN1); + } else if (dir == 1) { + if (settings.BTN3) load(settings.BTN3); + } + }); + }; +})(); + \ No newline at end of file diff --git a/apps/shortcuts/settings.js b/apps/shortcuts/settings.js new file mode 100644 index 000000000..419b186d6 --- /dev/null +++ b/apps/shortcuts/settings.js @@ -0,0 +1,66 @@ +(function(back) { + const s = require("Storage"); + const apps = s + .list(/\.info$/) + .map(app => { + var a = s.readJSON(app, 1); + return a && (a.type=="app" || a.type=="clock" || !a.type) && {n: a.name, src: a.src}; + }) + .filter(Boolean); + apps.sort((a, b) => { + if (a.n < b.n) return -1; + if (a.n > b.n) return 1; + return 0; + }); + apps.push({n: "NONE", src: null}); + + const settings = s.readJSON("shortcuts.json", 1) || { + BTN1: null, + BTN3: null + }; + + function showApps(btn) { + function format(v) { + return v === settings[btn] ? "*" : ""; + } + + function onchange(v) { + settings[btn] = v; + s.writeJSON("shortcuts.json", settings); + } + + const btnMenu = { + "": { + title: `Apps for ${btn}` + }, + "< Back": () => E.showMenu(mainMenu) + }; + + if (apps.length > 0) { + for (let a of apps) { + btnMenu[a.n] = { + value: a.src, + format: format, + onchange: onchange + }; + } + } else { + btnMenu["...No Apps..."] = { + value: undefined, + format: () => "", + onchange: () => {} + }; + } + + E.showMenu(btnMenu); + } + + const mainMenu = { + "": { title: "Shortcuts Settings" }, + "< Back": back, + "BTN1 app": () => showApps("BTN1"), + "BTN3 app": () => showApps("BTN3") + }; + E.showMenu(mainMenu); +}); + \ No newline at end of file From c90aa5371f7a279db00997f3667e9f3bc5d84f7c Mon Sep 17 00:00:00 2001 From: James Stanley Date: Tue, 14 Sep 2021 11:09:09 +0100 Subject: [PATCH 36/44] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9797e2243..49f616964 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ easily distinguish between file types, we use the following: ## Adding your app to the menu -* Come up with a unique (all lowercase, nu spaces) name, we'll assume `7chname`. Bangle.js +* Come up with a unique (all lowercase, no spaces) name, we'll assume `7chname`. Bangle.js is limited to 28 char filenames and appends a file extension (eg `.js`) so please try and keep filenames short to avoid overflowing the buffer. * Create a folder called `apps/`, lets assume `apps/7chname` From 55a929e71c70ae16b02742f162710e8700c318e1 Mon Sep 17 00:00:00 2001 From: dapgo Date: Tue, 14 Sep 2021 13:06:18 +0200 Subject: [PATCH 37/44] adding a bottom widget clock --- apps.json | 13 +++++++++++ apps/widclkbttm/Changelog | 4 ++++ apps/widclkbttm/README.md | 28 +++++++++++++++++++++++ apps/widclkbttm/widTextBottom_ss1.jpg | Bin 0 -> 6337 bytes apps/widclkbttm/widclkbttm.wid.js | 31 ++++++++++++++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 apps/widclkbttm/Changelog create mode 100644 apps/widclkbttm/README.md create mode 100644 apps/widclkbttm/widTextBottom_ss1.jpg create mode 100644 apps/widclkbttm/widclkbttm.wid.js diff --git a/apps.json b/apps.json index 560d6505b..72480be4c 100644 --- a/apps.json +++ b/apps.json @@ -3443,4 +3443,17 @@ {"name":"app.json"} ] } + { "id": "widclkbttm", + "name": "Digital clock (Bottom) widget", + "shortName":"Digital clock Bottom Widget", + "icon": "widclkbttm.png", + "version":"0.03", + "description": "Displays time in the bottom area.", + "readme": "README.md", + "tags": "widget", + "type": "widget", + "storage": [ + {"name":"widclkbttm.wid.js","url":"widclkbttm.wid.js"} + ] + }, ] diff --git a/apps/widclkbttm/Changelog b/apps/widclkbttm/Changelog new file mode 100644 index 000000000..326169af5 --- /dev/null +++ b/apps/widclkbttm/Changelog @@ -0,0 +1,4 @@ +0.01: Fork of widclk v0.04 github.com/espruino/BangleApps/tree/master/apps/widclk +0.02: Modification for bottom widget area and text color +0.03: based in widclk v0.05 compatible at same time, bottom area and color + diff --git a/apps/widclkbttm/README.md b/apps/widclkbttm/README.md new file mode 100644 index 000000000..5e386a757 --- /dev/null +++ b/apps/widclkbttm/README.md @@ -0,0 +1,28 @@ +# Digital clock widget (bottom widget area) +This very basic widget clock allows to test the unfrequently used widget bottom area. + +forked from +https://github.com/espruino/BangleApps/tree/master/apps/widclk + +## Photo + +Example of usage + +![](widTextBottom_ss1.jpg) + + + + +## Usage + +Upload the widget file +Open an app that supports displaying widgets + + + + +## Support + +This app is so basic that probably the easiest is to just edit the code ;) + +Otherwise you can contact me [here](https://github.com/dapgo) \ No newline at end of file diff --git a/apps/widclkbttm/widTextBottom_ss1.jpg b/apps/widclkbttm/widTextBottom_ss1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc1afe5228aaf7f39dbb46f610c31dc87803d060 GIT binary patch literal 6337 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 literal 0 HcmV?d00001 diff --git a/apps/widclkbttm/widclkbttm.wid.js b/apps/widclkbttm/widclkbttm.wid.js new file mode 100644 index 000000000..c27906786 --- /dev/null +++ b/apps/widclkbttm/widclkbttm.wid.js @@ -0,0 +1,31 @@ +(function() { + // don't show widget if we know we have a clock app running + if (Bangle.CLOCK) return; + + let intervalRef = null; + var width = 5 * 6*2; + var text_color=0x07FF;//cyan + + function draw() { + g.reset().setFont("6x8", 2).setFontAlign(-1, 0).setColor(text_color); + var time = require("locale").time(new Date(),1); + g.drawString(time, this.x, this.y+11, true); // 5 * 6*2 = 60 + } + function clearTimers(){ + if(intervalRef) { + clearInterval(intervalRef); + intervalRef = null; + } + } + function startTimers(){ + intervalRef = setInterval(()=>WIDGETS["wdclkbttm"].draw(), 60*1000); + WIDGETS["wdclkbttm"].draw(); + } + Bangle.on('lcdPower', (on) => { + clearTimers(); + if (on) startTimers(); + }); + + WIDGETS["wdclkbttm"]={area:"br",width:width,draw:draw}; + if (Bangle.isLCDOn) intervalRef = setInterval(()=>WIDGETS["wdclkbttm"].draw(), 60*1000); +})() From 8291b89804c084a2049e51f3af862c2f6ea01ddb Mon Sep 17 00:00:00 2001 From: James Stanley Date: Tue, 14 Sep 2021 11:18:29 +0100 Subject: [PATCH 38/44] Add choozi --- apps.json | 12 +++ apps/choozi/ChangeLog | 1 + apps/choozi/app-icon.js | 1 + apps/choozi/app.js | 208 ++++++++++++++++++++++++++++++++++++++++ apps/choozi/app.png | Bin 0 -> 7307 bytes 5 files changed, 222 insertions(+) create mode 100644 apps/choozi/ChangeLog create mode 100644 apps/choozi/app-icon.js create mode 100644 apps/choozi/app.js create mode 100644 apps/choozi/app.png diff --git a/apps.json b/apps.json index 3758356dd..e3b6a73fa 100644 --- a/apps.json +++ b/apps.json @@ -3463,5 +3463,17 @@ {"name":"vectorclock.app.js","url":"app.js"}, {"name":"vectorclock.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "choozi", + "name": "Choozi", + "icon": "app.png", + "version":"0.01", + "description": "Choose people or things at random using Bangle.js.", + "tags": "tool", + "allow_emulator":true, + "storage": [ + {"name":"choozi.app.js","url":"app.js"}, + {"name":"choozi.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/choozi/ChangeLog b/apps/choozi/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/choozi/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/choozi/app-icon.js b/apps/choozi/app-icon.js new file mode 100644 index 000000000..51b3bead3 --- /dev/null +++ b/apps/choozi/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwggLIrnM4uqAAIhPgvMAAPFzIABzWgCxkMCweqC4QABDBYtC5QVFDBoWCCo5KLOQIWKDARFICxhJIFwOpC5owFFyAwGUYIuOGAwuRC4guSJAgXBCyIwDIyQXF5IXSzJeVMAReUAAOQhheTMAVcC6yOUC4aOUC7GZUyoXXzWqhQXVxGqC9mYC7OqC9eoxEKC6uBC6uIwAXBPCSmBwEAC6Z2BiAXBJCR2BgEAjQXSlGBC4JgSLwYABJCJGBLwJIDGB+IIwRIDGByNBIwZIDGBhdBRoQwSLoIuFGAYYKCwIuGGAgYI1QWBRgYYJMYmaFoSMEAAyrBAAgVCCxgYGjAWQAAMBC4UILZQA==")) diff --git a/apps/choozi/app.js b/apps/choozi/app.js new file mode 100644 index 000000000..1a5b2f17e --- /dev/null +++ b/apps/choozi/app.js @@ -0,0 +1,208 @@ + +/* Choozi - Choose people or things at random using Bangle.js. + * Inspired by the "Chwazi" Android app + * + * James Stanley 2021 + */ + +var colours = ['#ff0000', '#ff8080', '#00ff00', '#80ff80', '#0000ff', '#8080ff', '#ffff00', '#00ffff', '#ff00ff', '#ff8000', '#ff0080', '#8000ff', '#0080ff']; + +var stepAngle = 0.18; // radians - resolution of polygon +var gapAngle = 0.035; // radians - gap between segments +var perimMin = 110; // px - min. radius of perimeter +var perimMax = 120; // px - max. radius of perimeter + +var segmentMax = 106; // px - max radius of filled-in segment +var segmentStep = 5; // px - step size of segment fill animation +var circleStep = 4; // px - step size of circle fill animation + +// rolling ball animation: +var maxSpeed = 0.08; // rad/sec +var minSpeed = 0.001; // rad/sec +var animStartSteps = 300; // how many steps before it can start slowing? +var accel = 0.0002; // rad/sec/sec - acc-/deceleration rate +var ballSize = 3; // px - ball radius +var ballTrack = 100; // px - radius of ball path + +var centreX = 120; // px - centre of screen +var centreY = 120; // px - centre of screen + +var fontSize = 50; // px + +var radians = 2*Math.PI; // radians per circle + +var defaultN = 3; // default value for N +var minN = 2; +var maxN = colours.length; +var N; +var arclen; + +// https://www.frankmitchell.org/2015/01/fisher-yates/ +function shuffle (array) { + var i = 0 + , j = 0 + , temp = null; + + for (i = array.length - 1; i > 0; i -= 1) { + j = Math.floor(Math.random() * (i + 1)); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } +} + +// draw an arc between radii minR and maxR, and between +// angles minAngle and maxAngle +function arc(minR, maxR, minAngle, maxAngle) { + var step = stepAngle; + var angle = minAngle; + var inside = []; + var outside = []; + var c, s; + while (angle < maxAngle) { + c = Math.cos(angle); + s = Math.sin(angle); + inside.push(centreX+c*minR); // x + inside.push(centreY+s*minR); // y + // outside coordinates are built up in reverse order + outside.unshift(centreY+s*maxR); // y + outside.unshift(centreX+c*maxR); // x + angle += step; + } + c = Math.cos(maxAngle); + s = Math.sin(maxAngle); + inside.push(centreX+c*minR); + inside.push(centreY+s*minR); + outside.unshift(centreY+s*maxR); + outside.unshift(centreX+c*maxR); + + var vertices = inside.concat(outside); + g.fillPoly(vertices, true); +} + +// draw the arc segments around the perimeter +function drawPerimeter() { + g.clear(); + for (var i = 0; i < N; i++) { + g.setColor(colours[i%colours.length]); + var minAngle = (i/N)*radians; + arc(perimMin,perimMax,minAngle,minAngle+arclen); + } +} + +// animate a ball rolling around and settling at "target" radians +function animateChoice(target) { + var angle = 0; + var speed = 0; + var oldx = -10; + var oldy = -10; + var decelFromAngle = -1; + var allowDecel = false; + for (var i = 0; true; i++) { + angle = angle + speed; + if (angle > radians) angle -= radians; + if (i < animStartSteps || (speed < maxSpeed && !allowDecel)) { + speed = speed + accel; + if (speed > maxSpeed) { + speed = maxSpeed; + /* when we reach max speed, we know how long it takes + * to accelerate, and therefore how long to decelerate, so + * we can work out what angle to start decelerating from */ + if (decelFromAngle < 0) { + decelFromAngle = target-angle; + while (decelFromAngle < 0) decelFromAngle += radians; + while (decelFromAngle > radians) decelFromAngle -= radians; + } + } + } else { + if (!allowDecel && (angle < decelFromAngle) && (angle+speed >= decelFromAngle)) allowDecel = true; + if (allowDecel) speed = speed - accel; + if (speed < minSpeed) speed = minSpeed; + if (speed == minSpeed && angle < target && angle+speed >= target) return; + } + + var r = i/2; + if (r > ballTrack) r = ballTrack; + var x = centreX+Math.cos(angle)*r; + var y = centreY+Math.sin(angle)*r; + g.setColor('#000000'); + g.fillCircle(oldx,oldy,ballSize+1); + g.setColor('#ffffff'); + g.fillCircle(x, y, ballSize); + oldx=x; + oldy=y; + } +} + +// choose a winning segment and animate its selection +function choose() { + var chosen = Math.floor(Math.random()*N); + var minAngle = (chosen/N)*radians; + var maxAngle = minAngle + arclen; + animateChoice((minAngle+maxAngle)/2); + g.setColor(colours[chosen%colours.length]); + for (var i = segmentMax-segmentStep; i >= 0; i -= segmentStep) + arc(i, perimMax, minAngle, maxAngle); + arc(0, perimMax, minAngle, maxAngle); + for (var r = 1; r < segmentMax; r += circleStep) + g.fillCircle(centreX,centreY,r); + g.fillCircle(centreX,centreY,segmentMax); +} + +// draw the current value of N in the middle of the screen, with +// up/down arrows +function drawN() { + g.setColor('#ffffff'); + g.setFont("Vector",fontSize); + g.drawString(N,centreX-g.stringWidth(N)/2+4,centreY-fontSize/2); + if (N < maxN) + g.fillPoly([centreX-6,centreY-fontSize/2-7, centreX+6,centreY-fontSize/2-7, centreX, centreY-fontSize/2-14]); + if (N > minN) + g.fillPoly([centreX-6,centreY+fontSize/2+5, centreX+6,centreY+fontSize/2+5, centreX, centreY+fontSize/2+12]); +} + +// update number of segments, with min/max limit, "arclen" update, +// and screen reset +function setN(n) { + N = n; + if (N < minN) N = minN; + if (N > maxN) N = maxN; + arclen = radians/N - gapAngle; + drawPerimeter(); +} + +// save N to choozi.txt +function writeN() { + var file = require("Storage").open("choozi.txt","w"); + file.write(N); +} + +// load N from choozi.txt +function readN() { + var file = require("Storage").open("choozi.txt","r"); + var n = file.readLine(); + if (n !== undefined) setN(parseInt(n)); + else setN(defaultN); +} + +shuffle(colours); // is this really best? +Bangle.setLCDMode("direct"); +Bangle.setLCDTimeout(0); // keep screen on +readN(); +drawN(); + +setWatch(() => { + setN(N+1); + drawN(); +}, BTN1, {repeat:true}); + +setWatch(() => { + writeN(); + drawPerimeter(); + choose(); +}, BTN2, {repeat:true}); + +setWatch(() => { + setN(N-1); + drawN(); +}, BTN3, {repeat:true}); diff --git a/apps/choozi/app.png b/apps/choozi/app.png new file mode 100644 index 0000000000000000000000000000000000000000..99c9fa07a55195ec45adbc70cc6e3521cdccaeda GIT binary patch literal 7307 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 Date: Tue, 14 Sep 2021 13:24:59 +0200 Subject: [PATCH 39/44] Create widclkbttm.png --- apps/widclkbttm/widclkbttm.png | Bin 0 -> 660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/widclkbttm/widclkbttm.png diff --git a/apps/widclkbttm/widclkbttm.png b/apps/widclkbttm/widclkbttm.png new file mode 100644 index 0000000000000000000000000000000000000000..e34745e1cdc8168f454adff463876b8448f72849 GIT binary patch literal 660 zcmV;F0&D$=P)R5-$iLf)EfiO0=-l$_Uzvrm*k> zC|FslNo5&JzkrR67IxZrY1Bd@*jdI)5gR?nVrP@t&2F-rV>~GHhvDqbJo~)w?3taN zSrUmvB9TZ8jxDA0efazr;vT}D==^nyYuC*22PQU{R2$~ei%L@_WH~O=DG9cPayXPB zoDFSL*d5ALs5=)lZT0W~C!*L*{PX;3JCJi4r!b6}P+$beHBgo*QJNa zCc-|M4`oujA+$t=%*9(}Cl7gljczWYcaB4_o?9DL(8S*}h?1_75%7PY1SG89Fgt zD_=WaXt(34^X*1$1^OLA>#^y(yZ>?;T?)VZO7;7rHnQ(Cqa}|{s4INCX{rBF6Fbgr zO*(k0xE9Gv{K}ui*9y%S9INncs-LZi{Y1qLU-eK#oj8K+QQaawm2|sgGehpvlg-uN uYkZsP#}t Date: Tue, 14 Sep 2021 14:57:57 -0400 Subject: [PATCH 40/44] Update weather to use setUI, for shortcuts compatibility --- apps.json | 2 +- apps/weather/ChangeLog | 3 ++- apps/weather/app.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 3758356dd..bed74b208 100644 --- a/apps.json +++ b/apps.json @@ -571,7 +571,7 @@ { "id": "weather", "name": "Weather", "icon": "icon.png", - "version":"0.05", + "version":"0.06", "description": "Show Gadgetbridge weather report", "readme": "readme.md", "tags": "widget,outdoors", diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index 8d8585db9..04e49e460 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -1,4 +1,5 @@ 0.02: Make minor adjustments to widget, and discard stale weather data after a configurable period. 0.03: Fix flickering last updated time. 0.04: Adjust "weather unknown" message according to Bluetooth connection. -0.05: Add wind direction. \ No newline at end of file +0.05: Add wind direction. +0.06: Use setUI for launcher. \ No newline at end of file diff --git a/apps/weather/app.js b/apps/weather/app.js index 6ea043467..0e0010249 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -88,7 +88,7 @@ update(); // Show launcher when middle button pressed - setWatch(Bangle.showLauncher, BTN2, {repeat: false, edge: 'falling'}); + Bangle.setUI("clock"); Bangle.loadWidgets(); Bangle.drawWidgets(); From 75431c6fc82e97617e1371ebf9aabfed5a349b0b Mon Sep 17 00:00:00 2001 From: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Tue, 14 Sep 2021 14:11:59 -0500 Subject: [PATCH 41/44] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index a50447cbd..9b37f1601 100644 --- a/apps.json +++ b/apps.json @@ -3440,7 +3440,7 @@ ] }, { "id": "fd6fdetect", - "name": "FD6FDetect", + "name": "fd6fdetect", "shortName":"fd6fdetect", "icon": "app.png", "version":"0.1", From 9e955703ddad7caf865873e87dac2d7ff4d7d716 Mon Sep 17 00:00:00 2001 From: James Stanley Date: Wed, 15 Sep 2021 13:59:36 +0100 Subject: [PATCH 42/44] Add choozi readme --- apps.json | 1 + apps/choozi/README.md | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 apps/choozi/README.md diff --git a/apps.json b/apps.json index e3b6a73fa..0622dfcae 100644 --- a/apps.json +++ b/apps.json @@ -3470,6 +3470,7 @@ "version":"0.01", "description": "Choose people or things at random using Bangle.js.", "tags": "tool", + "readme": "README.md", "allow_emulator":true, "storage": [ {"name":"choozi.app.js","url":"app.js"}, diff --git a/apps/choozi/README.md b/apps/choozi/README.md new file mode 100644 index 000000000..f1e4255bc --- /dev/null +++ b/apps/choozi/README.md @@ -0,0 +1,27 @@ +# Choozi + +Choose people or things at random using Bangle.js. + + + +## Usage + +You can use Choozi to pick a person to play first in a board game. With all +the players seated in a circle, set the number of segments equal to the number +of players, ensure that each person knows which colour represents them, and then +choose a segment. After a short animation, the chosen segment will fill the screen. + +You can use Choozi to randomly select an element from any set with 2 to 13 members, +as long as you can define a bijection between members of the set and coloured +segments on the Bangle.js display. + +## Controls + +BTN1: increase the number of segments +BTN2: choose a segment at random +BTN3: decrease the number of segments + +## Creator + +James Stanley +September 2021 From 0ad6642411fa64dd694a6839c226d5876b3456ad Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 15 Sep 2021 16:40:34 +0100 Subject: [PATCH 43/44] openstmap 0.09: Use current theme cols when drawing GPS info --- apps.json | 6 +++--- apps/openstmap/ChangeLog | 1 + apps/openstmap/app.js | 5 +---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps.json b/apps.json index 963edb7e3..aad5a07be 100644 --- a/apps.json +++ b/apps.json @@ -1517,7 +1517,7 @@ "name": "OpenStreetMap", "shortName":"OpenStMap", "icon": "app.png", - "version":"0.08", + "version":"0.09", "description": "[BETA] Loads map tiles from OpenStreetMap onto your Bangle.js and displays a map of where you are", "tags": "outdoors,gps,b2", "custom": "custom.html", "customConnect":true, @@ -3491,8 +3491,8 @@ }, { "id": "widclkbttm", "name": "Digital clock (Bottom) widget", - "shortName":"Digital clock Bottom Widget", - "icon": "widclkbttm.png", + "shortName":"Digital clock Bottom Widget", + "icon": "widclkbttm.png", "version":"0.03", "description": "Displays time in the bottom area.", "readme": "README.md", diff --git a/apps/openstmap/ChangeLog b/apps/openstmap/ChangeLog index fb5776351..60b9d9ae3 100644 --- a/apps/openstmap/ChangeLog +++ b/apps/openstmap/ChangeLog @@ -6,3 +6,4 @@ 0.06: Add support for scrolling, option for 3 bit maps 0.07: Move to 96px tiles - less files (64 -> 25) and speed up rendering 0.08: Update for drag event refactor +0.09: Use current theme cols when drawing GPS info diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 18c8df74b..99f6d0c73 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -24,10 +24,7 @@ function drawMarker() { var fix; Bangle.on('GPS',function(f) { fix=f; - g.clearRect(0,y1,240,y1+8); - g.setColor(1,1,1); - g.setFont("6x8"); - g.setFontAlign(0,0); + g.reset().clearRect(0,y1,240,y1+8).setFont("6x8").setFontAlign(0,0); var txt = fix.satellites+" satellites"; if (!fix.fix) txt += " - NO FIX"; From c7be79530b2b56a586eb74e86e7f04d6e7c9b79d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 15 Sep 2021 16:40:50 +0100 Subject: [PATCH 44/44] typo --- apps/gbridge/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/gbridge/ChangeLog b/apps/gbridge/ChangeLog index 764d3251b..fddb1eb80 100644 --- a/apps/gbridge/ChangeLog +++ b/apps/gbridge/ChangeLog @@ -23,4 +23,4 @@ 0.21: Fix HRM setting 0.22: Respect Quiet Mode 0.23: Allow notification dismiss to remove from phone too -0.24: tag HRM power requests to allow this ot work alongside other widgets/apps (fix #799) +0.24: tag HRM power requests to allow this to work alongside other widgets/apps (fix #799)