From 537842a32109bcc0ab69d5cd2474a87518bbcd41 Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Tue, 16 Nov 2021 08:05:41 -0500 Subject: [PATCH 01/35] Added emojuino v0.01 --- apps.json | 15 ++++ apps/emojuino/ChangeLog | 1 + apps/emojuino/README.md | 23 ++++++ apps/emojuino/emojuino-icon.js | 1 + apps/emojuino/emojuino.js | 145 +++++++++++++++++++++++++++++++++ apps/emojuino/emojuino.png | Bin 0 -> 1966 bytes 6 files changed, 185 insertions(+) create mode 100644 apps/emojuino/ChangeLog create mode 100644 apps/emojuino/README.md create mode 100644 apps/emojuino/emojuino-icon.js create mode 100644 apps/emojuino/emojuino.js create mode 100644 apps/emojuino/emojuino.png diff --git a/apps.json b/apps.json index f307a6feb..a0d543cd8 100644 --- a/apps.json +++ b/apps.json @@ -4215,5 +4215,20 @@ { "name": "qalarm.wid.js", "url": "widget.js" } ], "data": [{ "name": "qalarm.json" }] + }, + { + "id": "emojuno", + "name": "Emoji Broadcaster", + "shortName": "Emojuino", + "version": "0.01", + "description": "Emojis & Espruino: advertise Unicode emojis via BLE", + "icon": "emojuino.png", + "tags": "emoji", + "supports" : [ "BANGLEJS2" ], + "readme": "README.md", + "storage": [ + { "name": "emojuno.app.js", "url": "emojuino.js" }, + { "name": "emojuno.img", "url": "emojuino-icon.js", "evaluate": true } + ] } ] diff --git a/apps/emojuino/ChangeLog b/apps/emojuino/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/emojuino/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/emojuino/README.md b/apps/emojuino/README.md new file mode 100644 index 000000000..13879437e --- /dev/null +++ b/apps/emojuino/README.md @@ -0,0 +1,23 @@ +# Emojuino + +Emojis & Espruino! + +## Usage + +Select an emoji and then tap to transmit! + +## Features + +Currently implements a tiny subset of possible Unicode emojis. + +## Controls + +Swipe left/right to select the emoji to broadcast. Tap the screen to initiate the broadcast. Emoji will flash while broadcasting. + +## Requests + +[Contact reelyActive](https://www.reelyactive.com/contact/) for support/updates. + +## Creator + +Developed by [jeffyactive](https://github.com/jeffyactive) of [reelyActive](https://www.reelyactive.com) diff --git a/apps/emojuino/emojuino-icon.js b/apps/emojuino/emojuino-icon.js new file mode 100644 index 000000000..d56749250 --- /dev/null +++ b/apps/emojuino/emojuino-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBiIAHkUoxGIwUiBxAAGiQVCAAeCkIWNCooADDBYWKDBYWEkc////+cyDBhxDCoQAD+YLDCw0YBQQVFAAYYCwIXFHQRDElGCJYgOCFw8vBwPyOgoJFGAg4BIoQWGDAhJCIwoLBHgYAGJQIjCIwguCnCRFRoeDGAZICAgOPFwaRGDAQfB/AwDBAYuCX44wDAgTrDBoIDBGYP/manBmYFBFYQPDwJeBD4iRGRoQ/FC4QqBEYIbERooTBCAeBNAIjBBQIDDAAggBG4IDDwQXBEQIDDUAgcCHASaBAYQTFMQpcFDYp+EEII9DAARRDFIIfDHIwXBVISlDC4YzD9wA0osFpwIF8lQqgWK8kAgEEBItABIIhGAAfgBoMABIoIChwX0jwED8oNBgoXFqAJBrwHD8IXEBwQNEEIYgFC4wAQ8MRC6sRC+BgULwIwHSINVpwuLC43kaAQABqgaHC4bZHAAkFqhGHGAovFAAYyDCwgwFL4IwGFxAwNFxIwG8lVCoSTEFw7bPCxAYNCxT0LIpIxMCpoyHFhI")) \ No newline at end of file diff --git a/apps/emojuino/emojuino.js b/apps/emojuino/emojuino.js new file mode 100644 index 000000000..3de92fa6c --- /dev/null +++ b/apps/emojuino/emojuino.js @@ -0,0 +1,145 @@ +/** + * Copyright reelyActive 2021 + * We believe in an open Internet of Things + */ + + +// Emojis are integer pairs with the form [ image, Unicode code point ] +// For code points see https://unicode.org/emoji/charts/emoji-list.html +const EMOJIS = [ + [ ':)', 0x1f642 ], // Slightly smiling + [ ':|', 0x1f610 ], // Neutral + [ ':(', 0x1f641 ], // Slightly frowning + [ '+1', 0x1f44d ], // Thumbs up + [ '-1', 0x1f44e ], // Thumbs down + [ '<3', 0x02764 ], // Heart +]; +const EMOJI_TRANSMISSION_MILLISECONDS = 5000; +const BLINK_PERIOD_MILLISECONDS = 500; +const TRANSMIT_BUZZ_MILLISECONDS = 200; +const CYCLE_BUZZ_MILLISECONDS = 50; + +// Non-user-configurable constants +const IMAGE_INDEX = 0; +const CODE_POINT_INDEX = 1; +const BTN_WATCH_OPTIONS = { repeat: true, debounce: 20, edge: "falling" }; +const UNICODE_CODE_POINT_ELIDED_UUID = [ 0x49, 0x6f, 0x49, 0x44, 0x55, + 0x54, 0x46, 0x2d, 0x33, 0x32 ]; + + +// Global variables +let emojiIndex = 0; +let isToggleOn = false; +let isTransmitting = false; +let lastDragX = 0; +let lastDragY = 0; + + +// Cycle through emojis +function cycleEmoji(isForward) { + if(isTransmitting) { return; } + + if(isForward) { + emojiIndex = (emojiIndex + 1) % EMOJIS.length; + } + else if(--emojiIndex < 0) { + emojiIndex = EMOJIS.length - 1; + } + + drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]); + Bangle.buzz(CYCLE_BUZZ_MILLISECONDS); +} + + +// Handle a touch: transmit displayed emoji +function handleTouch(zone, event) { + if(isTransmitting) { return; } + + let emoji = EMOJIS[emojiIndex]; + transmitEmoji(emoji[IMAGE_INDEX], emoji[CODE_POINT_INDEX], + EMOJI_TRANSMISSION_MILLISECONDS); + Bangle.buzz(TRANSMIT_BUZZ_MILLISECONDS); +} + + +// Transmit the given code point for the given duration in milliseconds, +// blinking the image once per second. +function transmitEmoji(image, codePoint, duration) { + let instance = [ 0x00, 0x00, (codePoint >> 24) & 0xff, + (codePoint >> 16) & 0xff, (codePoint >> 8) & 0xff, + codePoint & 0xff ]; + + require('ble_eddystone_uid').advertise(UNICODE_CODE_POINT_ELIDED_UUID, + instance); + isTransmitting = true; + + let displayIntervalId = setInterval(toggleImage, BLINK_PERIOD_MILLISECONDS, + image); + + setTimeout(terminateEmoji, duration, displayIntervalId); +} + + +// Terminate the emoji transmission +function terminateEmoji(displayIntervalId) { + NRF.setAdvertising({ }); + isTransmitting = false; + clearInterval(displayIntervalId); + drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]); +} + + +// Toggle the display between image/off +function toggleImage(image) { + if(isToggleOn) { + drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]); + } + else { + g.clear(); + } + isToggleOn = !isToggleOn; +} + + +// Draw the given emoji +function drawImage(image) { + g.clear(); + g.drawString(image, g.getWidth() / 2, g.getHeight() / 2); + g.flip(); +} + + +// Handle a drag event +function handleDrag(event) { + let isFingerReleased = (event.b === 0); + + if(isFingerReleased) { + let isHorizontalDrag = (Math.abs(lastDragX) >= Math.abs(lastDragY)) && + (lastDragX !== 0); + + if(isHorizontalDrag) { + cycleEmoji(lastDragX > 0); + } + } + else { + lastDragX = event.dx; + lastDragY = event.dy; + } +} + + +// Special function to handle display switch on +Bangle.on('lcdPower', (on) => { + if(on) { + drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]); + } +}); + + +// On start: display the first emoji and handle drag and touch events +g.clear(); +g.setFont('Vector', 80); +g.setFontAlign(0, 0); +drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]); +Bangle.on('touch', handleTouch); +Bangle.on('drag', handleDrag); diff --git a/apps/emojuino/emojuino.png b/apps/emojuino/emojuino.png new file mode 100644 index 0000000000000000000000000000000000000000..614cc025ea17ad4bb68c1530e7d6b62022c908fd GIT binary patch literal 1966 zcmV;f2T}NmP)LJKHJpZ9o4v%hLat-R-v2z)RjTneY4Fdow%p&un4r31H@y zrNicKUz;%@IsV@vQ7PsAVX4*rp{e9G-Din61uZJhvzO?@M=O-}>hp74uh7s#me>E^N;h`F)z8tX1 za(~$Bm19-ECx)I88+!Kp-kPr(KWX-fh|TL564_1luRBJjHR``SHo<#lyk_R0_sj(P zV9kCC%{Wb4PG6%7w;s^dyM_ZJb=*5hxQ=@04zDw6{g0~vSGX%u6>ai#; zM>TM8P}E*ZIh9KVWfkNpFoW5_Ttn4$@Xhd;OUR(csujGZ#C7gC-&&}Of*-EkPp7Wu ztC{MIlUxg$st?#9IPM{`sQFx?*^EscI|RoUsba5wmrk2cUse4LlvLPg?_dAWj4dbV z<8=qCBCL^jYjL)G{zpGj_%oW+fUkm{pNiP-=Qv@q@UHY-(N&T|z9!)#0%T zN2#)^S~AMXFQkzh4{1i85*oQ&O9Z^&srGgZ-grdKE1~tAxLNAZXv?o;Q^IdObB)@} zP1X!lzQlW4&vD-eEoh2>C%n~OpIIBHtGNv{pPbyzXI8vTY<_oT236RqBw;LrswjwM z5oa^zw@Z|j_khZUIc#GYMGZYIoGhWx76ET$kPpCWLsm6E>k<~XRcveSgXaRbw{%# zA*>M10%Sw1FvoIkOMRXIv;JH|)P#q+(yc#wQR*?Wic4$Pu(-8iL-$47q?`7BNjYDS z(@z!9X!KmNUDAfvgVLIZBeEcq*wa2} z!zz3FkdWuv&r2u~i?PSD1q(9PcCn5#f8#;1)Prk$Nc29b&y46nuLx*CQ|yDMh`7vb zsorj$r3l$sv+0(%#X_suNz$vq?ZQ&+TE)Xi#IAFH8*^${XGHIAJ|hB}Vh=pw?Eo^V z9>~t#Sz(P7cYYpsSdi7PzfWU+mg*<2-Z6cMVWsICv6K2N-C_FThKCtuML=8Zfwu@` z6YE{W)+}IyBIB=!JEIR@kcM#miuFCh*~hhskYXJ-WzxwU>Df`uHqS(!=U zSz#H&he^RHlad(q?#-x03;VyRsd`UsnUcb&PoEksXsbPLXdFPTFQLdtM*P{Wam^aN z*Bw`{)^)(BD81JO@9od-XUUgn1ywn*d%;2AFrAa|!NeQFIjde4yX;Vg}rTUCBq8Br&4hRo; zsWVQvl7F&MCIwSYo~#>!)28XY?uZ#x2ZV>(>w=^BCu_r5ZBo>TGY8{FjcU$TKmemM ztOX|hu80}TI=)qCLfeCH5}DgDfNx})G&m(pE?n@)%qi=km1%^3bO4h~8lHAe5)Ysi zXOT(M(@JEO|7OZ}EH`Ob|L6ePaTc01yJU4Wqk{(-W#f@zQf~kvqyBdxfENNy z2AmQr$?)MdOQ5$mqkjDuO`OOmI-1duBaH6f*XQcVKsEPc@M06rKTL*986K{$<7VvC z$$p@7<}gZ2V|4Z`qpB)huNFkMCXWM~fj9VbJ~SEDICQ8Uwzl;0V$`b_qcLL`tysb6 z#0gzrAu{=9{RfV6=EKqt>nUVD9Ma%P1nkui^?Z3k~=G``C~m z`;Q|0vcu2Q-DLkm!A&73wy_U2^q|-NW2Bz=507j4%;>`Us{jB107*qoM6N<$f~a%V AC;$Ke literal 0 HcmV?d00001 From a0837cbecf58a4732e7ea1e17623e8940bed2ede Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Tue, 16 Nov 2021 08:12:12 -0500 Subject: [PATCH 02/35] Changed id from emojuno to emojuino to make links work --- apps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index a0d543cd8..560e3d949 100644 --- a/apps.json +++ b/apps.json @@ -4217,7 +4217,7 @@ "data": [{ "name": "qalarm.json" }] }, { - "id": "emojuno", + "id": "emojuino", "name": "Emoji Broadcaster", "shortName": "Emojuino", "version": "0.01", @@ -4227,8 +4227,8 @@ "supports" : [ "BANGLEJS2" ], "readme": "README.md", "storage": [ - { "name": "emojuno.app.js", "url": "emojuino.js" }, - { "name": "emojuno.img", "url": "emojuino-icon.js", "evaluate": true } + { "name": "emojuino.app.js", "url": "emojuino.js" }, + { "name": "emojuino.img", "url": "emojuino-icon.js", "evaluate": true } ] } ] From 2d76d0bd132e992068ad322a51393c1593e54c68 Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Tue, 16 Nov 2021 10:04:55 -0500 Subject: [PATCH 03/35] Improved naming/documentation --- apps.json | 4 ++-- apps/emojuino/README.md | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index 560e3d949..b02517aea 100644 --- a/apps.json +++ b/apps.json @@ -4218,10 +4218,10 @@ }, { "id": "emojuino", - "name": "Emoji Broadcaster", + "name": "Emojuino", "shortName": "Emojuino", "version": "0.01", - "description": "Emojis & Espruino: advertise Unicode emojis via BLE", + "description": "Emojis & Espruino: broadcast Unicode emojis via Bluetooth Low Energy.", "icon": "emojuino.png", "tags": "emoji", "supports" : [ "BANGLEJS2" ], diff --git a/apps/emojuino/README.md b/apps/emojuino/README.md index 13879437e..568d06dfb 100644 --- a/apps/emojuino/README.md +++ b/apps/emojuino/README.md @@ -2,22 +2,27 @@ Emojis & Espruino! + ## Usage -Select an emoji and then tap to transmit! +Select an emoji and then tap to transmit! The emoji will be recognised by [Pareto Anywhere](https://www.reelyactive.com/pareto/anywhere/) open source middleware and any other program which observes the [InteroperaBLE Identifier](https://reelyactive.github.io/interoperable-identifier/) open standard. + ## Features -Currently implements a tiny subset of possible Unicode emojis. +Currently implements a tiny subset of possible [Unicode emojis](https://unicode.org/emoji/charts/full-emoji-list.html) which are advertised as an [InteroperaBLE Identifier](https://reelyactive.github.io/interoperable-identifier/) encapsulated as Eddystone UID. + ## Controls -Swipe left/right to select the emoji to broadcast. Tap the screen to initiate the broadcast. Emoji will flash while broadcasting. +Swipe left/right to select the emoji to broadcast. Tap the screen to initiate the broadcast. Emoji will flash while broadcasting, which lasts for 5 seconds. + ## Requests [Contact reelyActive](https://www.reelyactive.com/contact/) for support/updates. + ## Creator Developed by [jeffyactive](https://github.com/jeffyactive) of [reelyActive](https://www.reelyactive.com) From 0464ebb1e17d1cfd2c389ba31c14b44098b5d089 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 17 Nov 2021 11:02:15 +0000 Subject: [PATCH 04/35] fix polyfill: fix https://github.com/espruino/Espruino/issues/2095 --- apps/boot/bootupdate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index 5cb6421a5..d642426c2 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -103,7 +103,7 @@ if (Bangle.swipeHandler) { Bangle.removeListener("swipe", Bangle.swipeHandler); delete Bangle.swipeHandler; } -if (Bangle.touchandler) { +if (Bangle.touchHandler) { Bangle.removeListener("touch", Bangle.touchHandler); delete Bangle.touchHandler; } From 598fe001d75d6664ff13776a5825c440df72345d Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:43:08 +0000 Subject: [PATCH 05/35] Create cliclockJS2Enhanced --- apps/cliclockJS2Enhanced | 217 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 apps/cliclockJS2Enhanced diff --git a/apps/cliclockJS2Enhanced b/apps/cliclockJS2Enhanced new file mode 100644 index 000000000..9cc0ab87c --- /dev/null +++ b/apps/cliclockJS2Enhanced @@ -0,0 +1,217 @@ +var fontsize = g.getWidth()>200 ? 3 : 2; +var fontsizeTime = g.getWidth()>200 ? 4 : 4; + +var fontheight = 10*fontsize; +var fontheightTime = 10*fontsizeTime; +var locale = require("locale"); +var marginTop = 40; +var flag = false; + +var hrtOn = false; +var hrtStr = "Hrt: ??? bpm"; + +const NONE_MODE = "none"; +const ID_MODE = "id"; +const VER_MODE = "ver"; +const BATT_MODE = "batt"; +const MEM_MODE = "mem"; +const STEPS_MODE = "step"; +const HRT_MODE = "hrt"; +const NONE_FN_MODE = "no_fn"; +const HRT_FN_MODE = "fn_hrt"; + +let infoMode = NONE_MODE; +let functionMode = NONE_FN_MODE; + +let textCol = g.theme.dark ? "#0f0" : "#080"; + +function drawAll(){ + updateTime(); + updateRest(new Date()); +} + +function updateRest(now){ + writeLine(locale.dow(now),1); + writeLine(locale.date(now,1),2); + drawInfo(5); +} +function updateTime(){ + if (!Bangle.isLCDOn()) return; + let now = new Date(); + writeLine(locale.time(now,1),0); + writeLine(flag?" ":"_",3); + flag = !flag; + if(now.getMinutes() == 0) + updateRest(now); +} +function writeLineStart(line){ + if (line==0){ + g.drawString(">",0,marginTop+(line)*fontheight); + } else { + g.drawString(">",4,marginTop+(line-1)*fontheight + fontheightTime); + + } +} + +function writeLine(str,line){ + if (line == 0){ + var y = marginTop+line*fontheightTime; + g.setFont("6x8",fontsizeTime); + g.setColor(textCol).setFontAlign(-1,-1); + g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); + writeLineStart(line); + g.drawString(str,25,y); + } else { + var y = marginTop+(line-1)*fontheight+fontheightTime; + g.setFont("6x8",fontsize); + g.setColor(textCol).setFontAlign(-1,-1); + g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); + writeLineStart(line); + g.drawString(str,25,y); + } + +} + +function drawInfo(line) { + let val; + let str = ""; + let col = textCol; // green + + //console.log("drawInfo(), infoMode=" + infoMode + " funcMode=" + functionMode); + + switch(functionMode) { + case NONE_FN_MODE: + break; + case HRT_FN_MODE: + col = g.theme.dark ? "#0ff": "#088"; // cyan + str = "HRM: " + (hrtOn ? "ON" : "OFF"); + drawModeLine(line,str,col); + return; + } + + switch(infoMode) { + case NONE_MODE: + col = g.theme.bg; + str = ""; + break; + case HRT_MODE: + str = hrtStr; + break; + case STEPS_MODE: + str = "Steps: " + stepsWidget().getSteps(); + break; + case ID_MODE: + val = NRF.getAddress().split(":"); + str = "Id: " + val[4] + val[5]; + break; + case VER_MODE: + str = "Fw: " + process.env.VERSION; + break; + case MEM_MODE: + val = process.memory(); + str = "Memory: " + Math.round(val.usage*100/val.total) + "%"; + break; + case BATT_MODE: + default: + str = "Battery: " + E.getBattery() + "%"; + } + + drawModeLine(line,str,col); +} + +function drawModeLine(line, str, col) { + g.setColor(col); + var y = marginTop+line*fontheight; + g.fillRect(0, y, 239, y+fontheight-1); + g.setColor(g.theme.bg).setFontAlign(0, 0); + g.drawString(str, g.getWidth()/2, y+fontheight/2); +} + +function changeInfoMode() { + switch(functionMode) { + case NONE_FN_MODE: + break; + case HRT_FN_MODE: + hrtOn = !hrtOn; + Bangle.buzz(); + Bangle.setHRMPower(hrtOn ? 1 : 0); + if (hrtOn) infoMode = HRT_MODE; + return; + } + + switch(infoMode) { + case NONE_MODE: + if (stepsWidget() !== undefined) + infoMode = hrtOn ? HRT_MODE : STEPS_MODE; + else + infoMode = VER_MODE; + break; + case HRT_MODE: + if (stepsWidget() !== undefined) + infoMode = STEPS_MODE; + else + infoMode = VER_MODE; + break; + case STEPS_MODE: + infoMode = ID_MODE; + break; + case ID_MODE: + infoMode = VER_MODE; + break; + case VER_MODE: + infoMode = BATT_MODE; + break; + case BATT_MODE: + infoMode = MEM_MODE; + break; + case MEM_MODE: + default: + infoMode = NONE_MODE; + } +} + +function changeFunctionMode() { + //console.log("changeFunctionMode()"); + switch(functionMode) { + case NONE_FN_MODE: + functionMode = HRT_FN_MODE; + break; + case HRT_FN_MODE: + default: + functionMode = NONE_FN_MODE; + } + //console.log(functionMode); + +} + +function stepsWidget() { + if (WIDGETS.activepedom !== undefined) { + return WIDGETS.activepedom; + } else if (WIDGETS.wpedom !== undefined) { + return WIDGETS.wpedom; + } + return undefined; +} + +Bangle.on('HRM', function(hrm) { + if(hrm.confidence > 90){ + hrtStr = "Hrt: " + hrm.bpm + " bpm"; + } else { + hrtStr = "Hrt: ??? bpm"; + } +}); + +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +drawAll(); +Bangle.on('lcdPower',function(on) { + if (on) drawAll(); +}); +var click = setInterval(updateTime, 1000); +// Show launcher when button pressed +Bangle.setUI("clockupdown", btn=>{ + if (btn<0) changeInfoMode(); + if (btn>0) changeFunctionMode(); + drawAll(); +}); From 4fc0a059afb27a5fff2de5ffdf9ef8c8ebe51e98 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:43:47 +0000 Subject: [PATCH 06/35] Delete cliclockJS2Enhanced --- apps/cliclockJS2Enhanced | 217 --------------------------------------- 1 file changed, 217 deletions(-) delete mode 100644 apps/cliclockJS2Enhanced diff --git a/apps/cliclockJS2Enhanced b/apps/cliclockJS2Enhanced deleted file mode 100644 index 9cc0ab87c..000000000 --- a/apps/cliclockJS2Enhanced +++ /dev/null @@ -1,217 +0,0 @@ -var fontsize = g.getWidth()>200 ? 3 : 2; -var fontsizeTime = g.getWidth()>200 ? 4 : 4; - -var fontheight = 10*fontsize; -var fontheightTime = 10*fontsizeTime; -var locale = require("locale"); -var marginTop = 40; -var flag = false; - -var hrtOn = false; -var hrtStr = "Hrt: ??? bpm"; - -const NONE_MODE = "none"; -const ID_MODE = "id"; -const VER_MODE = "ver"; -const BATT_MODE = "batt"; -const MEM_MODE = "mem"; -const STEPS_MODE = "step"; -const HRT_MODE = "hrt"; -const NONE_FN_MODE = "no_fn"; -const HRT_FN_MODE = "fn_hrt"; - -let infoMode = NONE_MODE; -let functionMode = NONE_FN_MODE; - -let textCol = g.theme.dark ? "#0f0" : "#080"; - -function drawAll(){ - updateTime(); - updateRest(new Date()); -} - -function updateRest(now){ - writeLine(locale.dow(now),1); - writeLine(locale.date(now,1),2); - drawInfo(5); -} -function updateTime(){ - if (!Bangle.isLCDOn()) return; - let now = new Date(); - writeLine(locale.time(now,1),0); - writeLine(flag?" ":"_",3); - flag = !flag; - if(now.getMinutes() == 0) - updateRest(now); -} -function writeLineStart(line){ - if (line==0){ - g.drawString(">",0,marginTop+(line)*fontheight); - } else { - g.drawString(">",4,marginTop+(line-1)*fontheight + fontheightTime); - - } -} - -function writeLine(str,line){ - if (line == 0){ - var y = marginTop+line*fontheightTime; - g.setFont("6x8",fontsizeTime); - g.setColor(textCol).setFontAlign(-1,-1); - g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); - writeLineStart(line); - g.drawString(str,25,y); - } else { - var y = marginTop+(line-1)*fontheight+fontheightTime; - g.setFont("6x8",fontsize); - g.setColor(textCol).setFontAlign(-1,-1); - g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); - writeLineStart(line); - g.drawString(str,25,y); - } - -} - -function drawInfo(line) { - let val; - let str = ""; - let col = textCol; // green - - //console.log("drawInfo(), infoMode=" + infoMode + " funcMode=" + functionMode); - - switch(functionMode) { - case NONE_FN_MODE: - break; - case HRT_FN_MODE: - col = g.theme.dark ? "#0ff": "#088"; // cyan - str = "HRM: " + (hrtOn ? "ON" : "OFF"); - drawModeLine(line,str,col); - return; - } - - switch(infoMode) { - case NONE_MODE: - col = g.theme.bg; - str = ""; - break; - case HRT_MODE: - str = hrtStr; - break; - case STEPS_MODE: - str = "Steps: " + stepsWidget().getSteps(); - break; - case ID_MODE: - val = NRF.getAddress().split(":"); - str = "Id: " + val[4] + val[5]; - break; - case VER_MODE: - str = "Fw: " + process.env.VERSION; - break; - case MEM_MODE: - val = process.memory(); - str = "Memory: " + Math.round(val.usage*100/val.total) + "%"; - break; - case BATT_MODE: - default: - str = "Battery: " + E.getBattery() + "%"; - } - - drawModeLine(line,str,col); -} - -function drawModeLine(line, str, col) { - g.setColor(col); - var y = marginTop+line*fontheight; - g.fillRect(0, y, 239, y+fontheight-1); - g.setColor(g.theme.bg).setFontAlign(0, 0); - g.drawString(str, g.getWidth()/2, y+fontheight/2); -} - -function changeInfoMode() { - switch(functionMode) { - case NONE_FN_MODE: - break; - case HRT_FN_MODE: - hrtOn = !hrtOn; - Bangle.buzz(); - Bangle.setHRMPower(hrtOn ? 1 : 0); - if (hrtOn) infoMode = HRT_MODE; - return; - } - - switch(infoMode) { - case NONE_MODE: - if (stepsWidget() !== undefined) - infoMode = hrtOn ? HRT_MODE : STEPS_MODE; - else - infoMode = VER_MODE; - break; - case HRT_MODE: - if (stepsWidget() !== undefined) - infoMode = STEPS_MODE; - else - infoMode = VER_MODE; - break; - case STEPS_MODE: - infoMode = ID_MODE; - break; - case ID_MODE: - infoMode = VER_MODE; - break; - case VER_MODE: - infoMode = BATT_MODE; - break; - case BATT_MODE: - infoMode = MEM_MODE; - break; - case MEM_MODE: - default: - infoMode = NONE_MODE; - } -} - -function changeFunctionMode() { - //console.log("changeFunctionMode()"); - switch(functionMode) { - case NONE_FN_MODE: - functionMode = HRT_FN_MODE; - break; - case HRT_FN_MODE: - default: - functionMode = NONE_FN_MODE; - } - //console.log(functionMode); - -} - -function stepsWidget() { - if (WIDGETS.activepedom !== undefined) { - return WIDGETS.activepedom; - } else if (WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom; - } - return undefined; -} - -Bangle.on('HRM', function(hrm) { - if(hrm.confidence > 90){ - hrtStr = "Hrt: " + hrm.bpm + " bpm"; - } else { - hrtStr = "Hrt: ??? bpm"; - } -}); - -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); -drawAll(); -Bangle.on('lcdPower',function(on) { - if (on) drawAll(); -}); -var click = setInterval(updateTime, 1000); -// Show launcher when button pressed -Bangle.setUI("clockupdown", btn=>{ - if (btn<0) changeInfoMode(); - if (btn>0) changeFunctionMode(); - drawAll(); -}); From 6c24624da58340a816cc85852fd9faf27dd9c731 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:44:17 +0000 Subject: [PATCH 07/35] Create app.js --- apps/cliclockJS2Enhanced/app.js | 217 ++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 apps/cliclockJS2Enhanced/app.js diff --git a/apps/cliclockJS2Enhanced/app.js b/apps/cliclockJS2Enhanced/app.js new file mode 100644 index 000000000..9cc0ab87c --- /dev/null +++ b/apps/cliclockJS2Enhanced/app.js @@ -0,0 +1,217 @@ +var fontsize = g.getWidth()>200 ? 3 : 2; +var fontsizeTime = g.getWidth()>200 ? 4 : 4; + +var fontheight = 10*fontsize; +var fontheightTime = 10*fontsizeTime; +var locale = require("locale"); +var marginTop = 40; +var flag = false; + +var hrtOn = false; +var hrtStr = "Hrt: ??? bpm"; + +const NONE_MODE = "none"; +const ID_MODE = "id"; +const VER_MODE = "ver"; +const BATT_MODE = "batt"; +const MEM_MODE = "mem"; +const STEPS_MODE = "step"; +const HRT_MODE = "hrt"; +const NONE_FN_MODE = "no_fn"; +const HRT_FN_MODE = "fn_hrt"; + +let infoMode = NONE_MODE; +let functionMode = NONE_FN_MODE; + +let textCol = g.theme.dark ? "#0f0" : "#080"; + +function drawAll(){ + updateTime(); + updateRest(new Date()); +} + +function updateRest(now){ + writeLine(locale.dow(now),1); + writeLine(locale.date(now,1),2); + drawInfo(5); +} +function updateTime(){ + if (!Bangle.isLCDOn()) return; + let now = new Date(); + writeLine(locale.time(now,1),0); + writeLine(flag?" ":"_",3); + flag = !flag; + if(now.getMinutes() == 0) + updateRest(now); +} +function writeLineStart(line){ + if (line==0){ + g.drawString(">",0,marginTop+(line)*fontheight); + } else { + g.drawString(">",4,marginTop+(line-1)*fontheight + fontheightTime); + + } +} + +function writeLine(str,line){ + if (line == 0){ + var y = marginTop+line*fontheightTime; + g.setFont("6x8",fontsizeTime); + g.setColor(textCol).setFontAlign(-1,-1); + g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); + writeLineStart(line); + g.drawString(str,25,y); + } else { + var y = marginTop+(line-1)*fontheight+fontheightTime; + g.setFont("6x8",fontsize); + g.setColor(textCol).setFontAlign(-1,-1); + g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); + writeLineStart(line); + g.drawString(str,25,y); + } + +} + +function drawInfo(line) { + let val; + let str = ""; + let col = textCol; // green + + //console.log("drawInfo(), infoMode=" + infoMode + " funcMode=" + functionMode); + + switch(functionMode) { + case NONE_FN_MODE: + break; + case HRT_FN_MODE: + col = g.theme.dark ? "#0ff": "#088"; // cyan + str = "HRM: " + (hrtOn ? "ON" : "OFF"); + drawModeLine(line,str,col); + return; + } + + switch(infoMode) { + case NONE_MODE: + col = g.theme.bg; + str = ""; + break; + case HRT_MODE: + str = hrtStr; + break; + case STEPS_MODE: + str = "Steps: " + stepsWidget().getSteps(); + break; + case ID_MODE: + val = NRF.getAddress().split(":"); + str = "Id: " + val[4] + val[5]; + break; + case VER_MODE: + str = "Fw: " + process.env.VERSION; + break; + case MEM_MODE: + val = process.memory(); + str = "Memory: " + Math.round(val.usage*100/val.total) + "%"; + break; + case BATT_MODE: + default: + str = "Battery: " + E.getBattery() + "%"; + } + + drawModeLine(line,str,col); +} + +function drawModeLine(line, str, col) { + g.setColor(col); + var y = marginTop+line*fontheight; + g.fillRect(0, y, 239, y+fontheight-1); + g.setColor(g.theme.bg).setFontAlign(0, 0); + g.drawString(str, g.getWidth()/2, y+fontheight/2); +} + +function changeInfoMode() { + switch(functionMode) { + case NONE_FN_MODE: + break; + case HRT_FN_MODE: + hrtOn = !hrtOn; + Bangle.buzz(); + Bangle.setHRMPower(hrtOn ? 1 : 0); + if (hrtOn) infoMode = HRT_MODE; + return; + } + + switch(infoMode) { + case NONE_MODE: + if (stepsWidget() !== undefined) + infoMode = hrtOn ? HRT_MODE : STEPS_MODE; + else + infoMode = VER_MODE; + break; + case HRT_MODE: + if (stepsWidget() !== undefined) + infoMode = STEPS_MODE; + else + infoMode = VER_MODE; + break; + case STEPS_MODE: + infoMode = ID_MODE; + break; + case ID_MODE: + infoMode = VER_MODE; + break; + case VER_MODE: + infoMode = BATT_MODE; + break; + case BATT_MODE: + infoMode = MEM_MODE; + break; + case MEM_MODE: + default: + infoMode = NONE_MODE; + } +} + +function changeFunctionMode() { + //console.log("changeFunctionMode()"); + switch(functionMode) { + case NONE_FN_MODE: + functionMode = HRT_FN_MODE; + break; + case HRT_FN_MODE: + default: + functionMode = NONE_FN_MODE; + } + //console.log(functionMode); + +} + +function stepsWidget() { + if (WIDGETS.activepedom !== undefined) { + return WIDGETS.activepedom; + } else if (WIDGETS.wpedom !== undefined) { + return WIDGETS.wpedom; + } + return undefined; +} + +Bangle.on('HRM', function(hrm) { + if(hrm.confidence > 90){ + hrtStr = "Hrt: " + hrm.bpm + " bpm"; + } else { + hrtStr = "Hrt: ??? bpm"; + } +}); + +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +drawAll(); +Bangle.on('lcdPower',function(on) { + if (on) drawAll(); +}); +var click = setInterval(updateTime, 1000); +// Show launcher when button pressed +Bangle.setUI("clockupdown", btn=>{ + if (btn<0) changeInfoMode(); + if (btn>0) changeFunctionMode(); + drawAll(); +}); From 16fe8e4084739f96dd3e3f8ea0302c193d921d02 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:44:43 +0000 Subject: [PATCH 08/35] Add files via upload --- apps/cliclockJS2Enhanced/app-icon.js | 1 + apps/cliclockJS2Enhanced/app.js.png | Bin 0 -> 6100 bytes 2 files changed, 1 insertion(+) create mode 100644 apps/cliclockJS2Enhanced/app-icon.js create mode 100644 apps/cliclockJS2Enhanced/app.js.png diff --git a/apps/cliclockJS2Enhanced/app-icon.js b/apps/cliclockJS2Enhanced/app-icon.js new file mode 100644 index 000000000..b2974fe7a --- /dev/null +++ b/apps/cliclockJS2Enhanced/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4A8gAAKC8gKUC7Rf/C/PM5gDBjnBC6EcC4PBDIIbCC5/BAIIXVA4YXXAoRHUC6R3EC6KnEMAbv/C6oAKC8YA/AH4A/AH4Ax")) \ No newline at end of file diff --git a/apps/cliclockJS2Enhanced/app.js.png b/apps/cliclockJS2Enhanced/app.js.png new file mode 100644 index 0000000000000000000000000000000000000000..6d74fcf7166ce0affb3f1d1e3c017e5740909e19 GIT binary patch literal 6100 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 Date: Wed, 17 Nov 2021 17:45:53 +0000 Subject: [PATCH 09/35] Update apps.json --- apps.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b02517aea..2a24ca63d 100644 --- a/apps.json +++ b/apps.json @@ -4230,5 +4230,19 @@ { "name": "emojuino.app.js", "url": "emojuino.js" }, { "name": "emojuino.img", "url": "emojuino-icon.js", "evaluate": true } ] - } + }, + { "id": "clijs2", + "name": "Commandline-Clock JS2 Enhanced", + "shortName":"CLI Clock JS2", + "version":"0.01", + "description": "An enchancement of the JS1 CLI clock with a easier to read time line and extra hard-to-use functionality removed", + "icon": "app.png", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"clijs2.app.js","url":"app.js"}, + {"name":"clijs2.img","url":"app-icon.js","evaluate":true} + ] +} ] From 3e51bf07707042834a41f44f66532112cc353ba8 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:52:06 +0000 Subject: [PATCH 10/35] Update apps.json --- apps.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps.json b/apps.json index 2a24ca63d..d55ddda33 100644 --- a/apps.json +++ b/apps.json @@ -4237,9 +4237,11 @@ "version":"0.01", "description": "An enchancement of the JS1 CLI clock with a easier to read time line and extra hard-to-use functionality removed", "icon": "app.png", + "type": "clock", "tags": "clock", "supports" : ["BANGLEJS2"], "readme": "README.md", + "allow_emulator": true, "storage": [ {"name":"clijs2.app.js","url":"app.js"}, {"name":"clijs2.img","url":"app-icon.js","evaluate":true} From 2e98a5f073ac83291dcedfae282611e5cf260f85 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:55:38 +0000 Subject: [PATCH 11/35] Update apps.json --- apps.json | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/apps.json b/apps.json index d55ddda33..c3fae7aca 100644 --- a/apps.json +++ b/apps.json @@ -4231,20 +4231,21 @@ { "name": "emojuino.img", "url": "emojuino-icon.js", "evaluate": true } ] }, - { "id": "clijs2", - "name": "Commandline-Clock JS2 Enhanced", - "shortName":"CLI Clock JS2", - "version":"0.01", - "description": "An enchancement of the JS1 CLI clock with a easier to read time line and extra hard-to-use functionality removed", - "icon": "app.png", - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "allow_emulator": true, - "storage": [ - {"name":"clijs2.app.js","url":"app.js"}, - {"name":"clijs2.img","url":"app-icon.js","evaluate":true} - ] + { + "id": "cliockJS2", + "name": "Commandline-Clock JS2 Enhanced", + "shortName": "CLI-Clock JS2", + "version": "0.1", + "description": "Simple CLI-Styled Clock with enhancements", + "icon": "app.png", + "screenshots": [{"url":"screengrab.png"}], + "type": "clock", + "tags": "clock,cli,command,bash,shell", + "supports": ["BANGLEJS","BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"cliockJS2.app.js","url":"app.js"}, + {"name":"cliockJS2.img","url":"app-icon.js","evaluate":true} + ] } ] From 1a4b20e3d5a7f67e8bda35e1e9697db3c7d681a5 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:56:52 +0000 Subject: [PATCH 12/35] Update apps.json --- apps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index c3fae7aca..bbe233134 100644 --- a/apps.json +++ b/apps.json @@ -4232,7 +4232,7 @@ ] }, { - "id": "cliockJS2", + "id": "cliclockJS2Enhanced", "name": "Commandline-Clock JS2 Enhanced", "shortName": "CLI-Clock JS2", "version": "0.1", @@ -4244,8 +4244,8 @@ "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ - {"name":"cliockJS2.app.js","url":"app.js"}, - {"name":"cliockJS2.img","url":"app-icon.js","evaluate":true} + {"name":"cliclockJS2Enhanced.app.js","url":"app.js"}, + {"name":"cliclockJS2Enhanced.img","url":"app-icon.js","evaluate":true} ] } ] From ac809c0f76927c37288c481f5133f949841df9a2 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 17:58:21 +0000 Subject: [PATCH 13/35] Add files via upload --- apps/cliclockJS2Enhanced/screengrab.png | Bin 0 -> 6100 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/cliclockJS2Enhanced/screengrab.png diff --git a/apps/cliclockJS2Enhanced/screengrab.png b/apps/cliclockJS2Enhanced/screengrab.png new file mode 100644 index 0000000000000000000000000000000000000000..6d74fcf7166ce0affb3f1d1e3c017e5740909e19 GIT binary patch literal 6100 zcmc&&eOS_GzyGzi+-a8Eo>VfGUY<4|vlq_NsU=iqroGKq%oiwm7AX~}nFA2t?gWAd(L(}*LBVxT-?8#`~JRu zzMt=x-EAJr0ZMV}^S&a9{IK`4$K6|Ft_vqwLUGXWLajj9{aAI}e9r$W3mUmXEQFkIr^$rA7E=mlzU{--n3C zHNV7ZFUEb2>F8~;e{_F1Af_WBaLMiT7hL0g?hnYM{kT~NvCqclyR?tK|HP{t1;woM zr{{0F67aSkbFV!#%hPT3vq}Heil-tz(+iH>5FT}t{#2F5j;f|w5*DaJ=+4+@J7!+ zpfVasdp9<;g$r3>M!$+T;;~WG&xVDVhu%Ohv05R$G=45D8M7&bq$J*-k;x)t#Bb~i z9O>Hm3K2v=Eaz?`KrhrO!$r)!)OSVxO!tbt_7zod5W0TKT{1+i3WFU!t!8}HD4XwS z475-}(tw~NJ3es8FVUXdG^fx*o^W{*rA8AYe{nEqmbPZIx7j_a8u)xKQ1fC+jR$<| zJ|gFOsPxV~;LI;m&U|JzoEZ8J1!4d8uVkTv)*=!`SQprzjB2aRpA<|d|MY4jh*~r0 zS;;e(rPHdm5#FfUBHb$Y=y6Zwx0Orxx&%IxZ#gp+xrLX6_z;1xup+gzih>j7IG5KFmmhsX$uKNbw}FhjhE@ZVkYp2D5pko zhJ$0zo}NKFBXBsiy06dIQ=WBLh^@O#udK_O4=J`tJNsZ6sZQ+(D1Nj5cZ!xUP!fV; zpawSzLGg^kSAJ7a3cHXq7TC%mqxsV}-uNSIUEhFBtdVJB>%DjM--I!=+P2GcU2ZYz~P9F~nB?hnUw^7c8 z7yd@=ze%rI(M_uTL`qE&gIy|9v-4arfu~;(n0dqLQ|jX?m8{l3N_<;a)+_FA`m~Nt zDr(qkUs_y-k*Xsto>FS^WUOA%Y3BM3^|Md-*M7WWSgKAGI;}}-ayH)SuWYKnRwfDY z8!AT~O573ufYl|TEI&Myx$?znNk|qsC4l)&>RkzDX?i%t>dJ{Qa9p+37E&uULQ_9f z!fd%0^30T0v%QO-+H`T0@2%a&Rh}X6?k~vw5R+4a&x`UZyI3r9($vOOilTK{Ub6!5 z@v{EK8tM4*!$o9Axd3s+`mh}__lE+BzW8NNVt^B~Q|^goNzSW)pYi{+WQrwiI&MG3 zDYsjEU01lMX%~|z90|8LEoSdGm}6V%A`V~aFX|dLXp347epXF?@3`zLC7ZhkqwJEC z-IU3r<_sxjsoOstnW}#b3M3RSr)qu_&7HYk<}4RnyJgnVnWY19AmFpOjEvR!xiyKp zwNTUqtq% zTCP{1Tq7?lH#`w=ad=LTEW==klh&URS|83K+lNj-iRc1u%%$Kjjd8=SN>3gU<-uOw zO{m?REtIJ05U(acxJ%(w%zIFfM=Ac*`PZR|qv3$%NV(v_w*;QSC2(w=*DS`WDnptF zcOb6XKvltd$pSW>%TK)pZtiaDU*R*!T?0u3A0ijLGMAcX{FmAnRU#&YcNUd3p=7SuuG&_gyqMRp- zBR`A99PRKIos1P{p!?JYgU`6B%j_wQU!DI&huN>VTgUA*3-vwGe13h8jNgs*8;a$j zJajV)OrAC68-y_85By+N_tRs}72^{?ejKtyUF`_}+Jf1JQ74e8pUoWR`0kW&dOCm+ z`iUtzL)h{@`hBJZT@s${N4Y+3=0uF&KZAdG5u;SY_*dU)?|Uf6m-e!|C)8+*DH^~a zJ<-uo{d_r(nDUJQ>umh7zj8v|uaBYK(sPSi?tK{*d8r<*hHc&WgkKz(-@N27Wdz+K zS-n4q*EfGsO?^D!7;@cR{!PynYj=S9d9Pb6F>^t|<*Grr>|-Zi0PA8Td8%i?jvMCs z7;#jMJn=IN99@m_A*FB;4RUfGUl?joJuNg?C>e3$u3&=b<#84T z)XVqQ<=tdQO&ubV5id);XU+&FJpJhp%^15_`8)D{SILhH0%D z7d0XhRCD6-rl@nW{z@BKY8HoSYo?xUHFVw#iii1x+fM_uRzji?-bLm}5|JCL(afK- zmU%Ns=)Pfdr&*wnPPTU2B!n7vZf%RJHpS_C_Q)@GvrFs4^)S;gLOs7P*eDddj7~v= z%)nHUs|G%MotUzRu)-zq$iKEvw{!NOMQH03m%+Zi_{fESXMyXVywMRqjM-C;dbD)zcMT61cQ+E6x0u%5K2kfqcHNp*J6V#H zNw{{~j_iomaJ&5JS2=P7M{isLwlgzb7^Ruu4mf&?8+li3lHcN- zAK7gb@h<7qjpZ#IO@Rxaw=B7-QE@rl+N~=%gHOQ1CL3IST#SswVS+oy8*ff%4Q2SG zQpVwIF6ad|`ovTiPdn5WZz!na5tL9LzZSg?BC^HJ*|M& zbRcEbn^<0ULu%oOs~bCj2R0_Yc{F=8otc|eX|o2H2eNS^9yF7Asa2!aOK`*!i9lSa zCi89`olx@X$edA3EO1tMOrw zfNYd4Gja}mH_441A3-@vYFay9T!!rSObu{a4D950`HNk|<_V#J#~7UmYZCiN zy{j^ORf7qGGk=)PHf&NiemIRdN!!|R`AHk5OS9(j0SsXvuSr`9`uiuCIIRh_iIS0q z!&wie*4*~=qCNe~R~1p{^Ps>sCt&->dO^ga;EVwO82hII4MP)a>Y>P3sE#$~^e>0+ zXVEuvZW{)Vb*3*Z;G0QDrBYn(tV5&no;$#R%=&3&9X zhas+VWiJwLahaJTA71G*VL6pb%YU`P&U+Sm;iJ@-N>1J_-TaOy)pnjp!cY@-dJH(A`l`a(O zVbj5_6uUH^Nl#=>6hhr<+DimuCEk^sa!};aMoj6L2z^eeGX?{&yGzEG&jt)K1#?yA ztK*~ewjq@>n-CSf`_iYXic%q6LrZCr+%T2RcnZA zsKRa&AU(KL4begs7R+UQxX0q8h$OB2!NkO(CnXY34_b-Z+|!2Rr=#Dnq}JqEN7riL z?kPuY>K(VqUCd`M375+bk5ah$YEY^CS7rDxjZp-+GCSRkP?_<4%TV9Nk%?7%e%7dt zbs7YvLY#({JfYSvd#yY<0iPg6JaemQFmdP$quT`{0cw(pJ&S20hTU>ZXJ`x_3ea$- z;UXRyQaLPIwBbxGRP^ZiX#6}? z{eyK59cRCqSmw2c=kh4V{)ceW~q~c2{9*{f@_` z-8G)_(-pw2AfbxI8(j+^EHRPf5k`4i#?>Cpz#?I;-&wKRZWmzKqM^{|mb$hw5WAFB ztbWif0Og85R0(`bmcebD2PXcxa6e926^u+GtM(nB*G_TsU%vU`@=9Mhp}k~Tol)*j zwff>ofZs@IRipH!ZSphAl4*Axy+uAO;E$hqGj%O7?Rgg({|ct;LR%XUs95?sz;9w7 zz~I<^8n>amMGE+mq~H7yf3|{kMN05F?d+fbd?Zc$xE7Oh%IdS%p8eC|l3eZ5QM-E` z%9isj&B!P3XED;62@GhtrSKjC9imXWjyyoF+rn5fkpe-YzdVPX+g Date: Wed, 17 Nov 2021 18:03:51 +0000 Subject: [PATCH 14/35] Add files via upload --- apps/cliclockJS2Enhanced/screengrab.png | Bin 6100 -> 2310 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/cliclockJS2Enhanced/screengrab.png b/apps/cliclockJS2Enhanced/screengrab.png index 6d74fcf7166ce0affb3f1d1e3c017e5740909e19..fd4556fb3cf24346de947102474887754bcbbb86 100644 GIT binary patch literal 2310 zcmds({Xf%<8ppS91nHNV&bb*N~RPd&-YQb zW|PE?>075PcX?QM)~yG2BO_{KmN5@!=a=&*oFC2)*Y)|~b6vlE-q-8O^YbCC*D}^Z zAQ0=lJlz6R%KcBFG*q3_I!;ju@@xR<5TdcqWD0>m!Cr0$gJ_g*6@s#9OKpv`k+quE z=)SPl27Pf!q3fplv|ZRdLFs;h!blbGFk)4S4CRzZF_nxITdyG)`;H)QKv!Ge8>YlM5uLEM&N%TNKvCE;K z8QD|dgCm)60O@b}(Sn!+sZudOg0rcfjoUaRUzZL5k$upk``; zm?tK37($Ma#OEzPS}^Qgo3$-la>?6HD;^Efc1Y}*bzTSYUJ(2Hzxz^C@4-e4LGAjG z>AErhV?nF&%WyjA5yS3htDB~{7^nyFDAt&aybxvJ81o8qbut6o=wj388`H9w-+O*@ zVN{@fRy8uKn7J%Sd3kiON)UUeF2w}e1vor+*mGTrDa1?lk$ZL?HLSB`y^r{zI90%O zaq4P;wJ49z8(GCX?j90W-DQ>}2R}9LpFHNTor$)k$^<4XHYrB-B^$Qu0{YDZy_0L8u>UJFZs2??= z#`4ZM!wf|&m((vje?;+PFB1s6%UB~X8hRtNT=>#e<)9ah=s(!A?=`)}Owv}yNq^A2 zOEq#4mcT6Z&K>#Tk}YJ}o$Aw_o<2vzcO`cdnl_A{j{FugpLd!a_m04n7a!JSb`N%; z`Fekz1y~+Yyz^h>mS|{g`B#3N_FZzEuv|xetD$?a@}2eN4PiGj#zu0 z9sDw}DKkehAG796QXa~}#S!n%o1K+cCb1*JgsSYCCF?1gsTAUtT*8&c#cf0BITVNs z1k3uYO66`z?C4Cs`I4apS=n^P&#c0lsP-~5@tM-lyk)AG%6pELMgzh<2XWHPv3uQ~ z>~oDW5Qe{VP9h91iZdUicPc~VG}#G$pwi3ay)UlQW_aU$M401owtKHkI99=cg$0+z zr=W~Z{oovT^|l21bf9|b!G?@)X_8CChVd^(!ndXfh~%8h)yjs?oz03n4Y8$!2DU9* zR?FGIn+qKa7gsEtm)pBl3{+BDB1OXrXc6`4EtZu$B*Q4&<+lA0hhjX)D-A|SG-ufS z15eWkWOJ5&Sj8{mks)p$S>~id$*N6oIeZU1sZJ%JZhHz=n2Igk3B)6P!&ifE&vcS! zPqO0Pb)o05$-0xMPZz&_EM4;c#0~HSkuFH^hh6MTHxNUsJ?VF?3IQnZHc`!0$oSiB zd+CdSR^Ei#>Ol^sb>86ZfNm9mO`Sc(KgYZw_4K&w>j3MJV0UhW{y@^GB6ME3p2DMn z6yCqCOMKCEglH=zGB+bp7m^G)GFL6C)hEW?i}N(G(igoo_TJh2_%b~^OUrCn-|@;@ zdnECQFu&B+7713i{dButbJ8)zNy857r-JzPK+%2`^KpJ#J&cgx?!&&L+5qa_!JC^- zsB)xD$g@LXlQrC_w^e}eo!{E0ItE4tdH(<3i&EVI$E@8qjYrc}j}5}h-N&u*P)yFh E0Tf0*ZU6uP literal 6100 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 Date: Wed, 17 Nov 2021 18:06:36 +0000 Subject: [PATCH 15/35] Delete app-icon.js --- apps/cliclockJS2Enhanced/app-icon.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/cliclockJS2Enhanced/app-icon.js diff --git a/apps/cliclockJS2Enhanced/app-icon.js b/apps/cliclockJS2Enhanced/app-icon.js deleted file mode 100644 index b2974fe7a..000000000 --- a/apps/cliclockJS2Enhanced/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4A8gAAKC8gKUC7Rf/C/PM5gDBjnBC6EcC4PBDIIbCC5/BAIIXVA4YXXAoRHUC6R3EC6KnEMAbv/C6oAKC8YA/AH4A/AH4Ax")) \ No newline at end of file From dd920440a462417a41718ecdfd5cde43c265be64 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 18:07:33 +0000 Subject: [PATCH 16/35] Add files via upload --- apps/cliclockJS2Enhanced/app.icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/cliclockJS2Enhanced/app.icon.js diff --git a/apps/cliclockJS2Enhanced/app.icon.js b/apps/cliclockJS2Enhanced/app.icon.js new file mode 100644 index 000000000..b2974fe7a --- /dev/null +++ b/apps/cliclockJS2Enhanced/app.icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4A8gAAKC8gKUC7Rf/C/PM5gDBjnBC6EcC4PBDIIbCC5/BAIIXVA4YXXAoRHUC6R3EC6KnEMAbv/C6oAKC8YA/AH4A/AH4Ax")) \ No newline at end of file From c062916766185aa3a6224d7c8fb7e2faf588af67 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 18:13:14 +0000 Subject: [PATCH 17/35] Add files via upload --- apps/cliclockJS2Enhanced/app.png | Bin 0 -> 421 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/cliclockJS2Enhanced/app.png diff --git a/apps/cliclockJS2Enhanced/app.png b/apps/cliclockJS2Enhanced/app.png new file mode 100644 index 0000000000000000000000000000000000000000..e7069203431ae7c22d262413dd1f309613b0815f GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=G`DAk4@xYmNj^gO#U?V@QVc+o^_rhaCi5=ZZ{Rv4bIf0lO8S zgXdw}9gHn9Elrb{3pma(EL^t8`C?&k`Z)i~7USL1%HKq)&ow+Ik=&Cx zz4e&k8+d|GCN*xQVOX-TssBhjfNuJ#+D<^X407tmf5Hx*Psj;n}MLTzL=J z?;P6t%qvcj+xG2d=7UVXwu>^>H0(Z9ePZhg$@^OOG~SE4M)hwAWGUc|ydh~5e#Ua$ zQ~m;`{ST#Mvh*}ARW0dNYN(vJ|0h%B+tf3iO0vfk>ssYZ?`8ZczBIdw;h5l~k2?eY z@a+sMdoEFT(7)n{=Q=O`|B{{A&z!u!dP=)8giqi<==b65 z=8AJquRn=%v^!v2yl`pZkN!2TYFn!qCcoQ#UT{@w{{)C%o7VkiJS%f@zioglBQR(g NJYD@<);T3K0RXYytegM< literal 0 HcmV?d00001 From 287114895e159ccc2ff25d746ebc46715a040375 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 18:15:46 +0000 Subject: [PATCH 18/35] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index bbe233134..bd6c9931b 100644 --- a/apps.json +++ b/apps.json @@ -4236,7 +4236,7 @@ "name": "Commandline-Clock JS2 Enhanced", "shortName": "CLI-Clock JS2", "version": "0.1", - "description": "Simple CLI-Styled Clock with enhancements", + "description": "Simple CLI-Styled Clock with enhancements, credit to hughbarney for the original code and design", "icon": "app.png", "screenshots": [{"url":"screengrab.png"}], "type": "clock", From a7a8588db071887ffe110d10b05698a21fde9e57 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 18:20:30 +0000 Subject: [PATCH 19/35] Update app.js --- apps/cliclockJS2Enhanced/app.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps/cliclockJS2Enhanced/app.js b/apps/cliclockJS2Enhanced/app.js index 9cc0ab87c..485ba7917 100644 --- a/apps/cliclockJS2Enhanced/app.js +++ b/apps/cliclockJS2Enhanced/app.js @@ -210,8 +210,3 @@ Bangle.on('lcdPower',function(on) { }); var click = setInterval(updateTime, 1000); // Show launcher when button pressed -Bangle.setUI("clockupdown", btn=>{ - if (btn<0) changeInfoMode(); - if (btn>0) changeFunctionMode(); - drawAll(); -}); From 61882b5d82864219bc57d864729e08bd907f1544 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 18:21:19 +0000 Subject: [PATCH 20/35] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index bd6c9931b..35f2fbd95 100644 --- a/apps.json +++ b/apps.json @@ -4236,7 +4236,7 @@ "name": "Commandline-Clock JS2 Enhanced", "shortName": "CLI-Clock JS2", "version": "0.1", - "description": "Simple CLI-Styled Clock with enhancements, credit to hughbarney for the original code and design", + "description": "Simple CLI-Styled Clock with enhancements. Modes that are hard to use and unneded are removed (BPM, battery info, memory ect) credit to hughbarney for the original code and design", "icon": "app.png", "screenshots": [{"url":"screengrab.png"}], "type": "clock", From c36f409641e94007e10788c1865ede6b5e558746 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 19:04:16 +0000 Subject: [PATCH 21/35] Update app.js --- apps/cliclockJS2Enhanced/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/cliclockJS2Enhanced/app.js b/apps/cliclockJS2Enhanced/app.js index 485ba7917..451e70dfc 100644 --- a/apps/cliclockJS2Enhanced/app.js +++ b/apps/cliclockJS2Enhanced/app.js @@ -58,7 +58,7 @@ function writeLine(str,line){ var y = marginTop+line*fontheightTime; g.setFont("6x8",fontsizeTime); g.setColor(textCol).setFontAlign(-1,-1); - g.clearRect(0,y,((str.length+1)*20),y+fontheight-1); + g.clearRect(0,y,((str.length+1)*40),y+fontheightTime-1); writeLineStart(line); g.drawString(str,25,y); } else { From 418de289c706d09d994a0a5263f126a5f460508f Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 19:54:44 +0000 Subject: [PATCH 22/35] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 35f2fbd95..c5890cbd4 100644 --- a/apps.json +++ b/apps.json @@ -4245,7 +4245,7 @@ "allow_emulator": true, "storage": [ {"name":"cliclockJS2Enhanced.app.js","url":"app.js"}, - {"name":"cliclockJS2Enhanced.img","url":"app-icon.js","evaluate":true} + {"name":"cliclockJS2Enhanced.img","url":"app.icon.js","evaluate":true} ] } ] From 1b6671f3651d109fe2a659a5aa5a078fa237c452 Mon Sep 17 00:00:00 2001 From: weeurey Date: Wed, 17 Nov 2021 21:26:29 +0000 Subject: [PATCH 23/35] Update app.js --- apps/cliclockJS2Enhanced/app.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/cliclockJS2Enhanced/app.js b/apps/cliclockJS2Enhanced/app.js index 451e70dfc..314e32375 100644 --- a/apps/cliclockJS2Enhanced/app.js +++ b/apps/cliclockJS2Enhanced/app.js @@ -210,3 +210,7 @@ Bangle.on('lcdPower',function(on) { }); var click = setInterval(updateTime, 1000); // Show launcher when button pressed +Bangle.setUI("clockupdown", btn=>{ + if (btn<0) changeInfoMode(); + drawAll(); +}); From 6bd548d4094ea425d94c9199a018865e6989935a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 18 Nov 2021 10:27:26 +0000 Subject: [PATCH 24/35] setting 0.32: Fix 'beep' menu on Bangle.js 2 --- apps.json | 4 ++-- apps/setting/ChangeLog | 1 + apps/setting/settings.js | 51 +++++++++++++++++++++++++++------------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/apps.json b/apps.json index c5890cbd4..238c928be 100644 --- a/apps.json +++ b/apps.json @@ -115,7 +115,7 @@ { "id": "setting", "name": "Settings", - "version": "0.31", + "version": "0.32", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", @@ -4224,7 +4224,7 @@ "description": "Emojis & Espruino: broadcast Unicode emojis via Bluetooth Low Energy.", "icon": "emojuino.png", "tags": "emoji", - "supports" : [ "BANGLEJS2" ], + "supports" : [ "BANGLEJS2" ], "readme": "README.md", "storage": [ { "name": "emojuino.app.js", "url": "emojuino.js" }, diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 0890cf510..63f77edcf 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -34,3 +34,4 @@ 0.29: Add Customize to Theme menu 0.30: Move '< Back' to the top of menus 0.31: Remove Bangle 1 settings when running on Bangle 2 +0.32: Fix 'beep' menu on Bangle.js 2 diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 0decb5313..395fdef00 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -72,8 +72,37 @@ if (!('qmOptions' in settings)) settings.qmOptions = {}; // easier if this alway const boolFormat = v => v ? "On" : "Off"; function showMainMenu() { - var beepV = BANGLEJS2 ? [false,true] : [false, true, "vib"]; - var beepN = BANGLEJS2 ? ["Off","On"] : ["Off", "Piezo", "Vibrate"]; + var beepMenuItem; + if (BANGLEJS2) { // Bangle.js 2 is simply on/off + beepMenuItem = { + value: settings.beep, + format: boolFormat, + onchange: v => { + settings.beep = v; + updateSettings(); + if (settings.beep) { + analogWrite(VIBRATE,0.1,{freq:2000}); + setTimeout(()=>VIBRATE.reset(),200); + } // beep with vibration moter + } + } + } else { // Bangle.js 1 has different options + var beepV = [false, true, "vib"]; + var beepN = ["Off", "Piezo", "Vibrate"]; + beepMenuItem = { + value: Math.max(0 | beepV.indexOf(settings.beep),0), + min: 0, max: beepV.length-1, + format: v => beepN[v], + onchange: v => { + settings.beep = beepV[v]; + if (v==1) { analogWrite(D18,0.5,{freq:2000});setTimeout(()=>D18.reset(),200); } // piezo on Bangle.js 1 + else if (v==2) { analogWrite(VIBRATE,0.1,{freq:2000});setTimeout(()=>VIBRATE.reset(),200); } // vibrate + updateSettings(); + } + }; + } + + const mainmenu = { '': { 'title': 'Settings' }, '< Back': ()=>load(), @@ -88,22 +117,12 @@ function showMainMenu() { updateSettings(); } }, - 'Beep': { - value: 0 | beepV.indexOf(settings.beep), - min: 0, max: 2, - format: v => beepN[v], - onchange: v => { - settings.beep = beepV[v]; - if (v==1) { analogWrite(D18,0.5,{freq:2000});setTimeout(()=>D18.reset(),200); } // piezo - else if (v==2) { analogWrite(D13,0.1,{freq:2000});setTimeout(()=>D13.reset(),200); } // vibrate - updateSettings(); - } - }, + 'Beep': beepMenuItem, 'Vibration': { value: settings.vibrate, format: boolFormat, - onchange: () => { - settings.vibrate = !settings.vibrate; + onchange: v => { + settings.vibrate = v; updateSettings(); if (settings.vibrate) { VIBRATE.write(1); @@ -146,7 +165,7 @@ function showBLEMenu() { } }, 'HID': { - value: 0 | hidV.indexOf(settings.HID), + value: Math.max(0,0 | hidV.indexOf(settings.HID)), min: 0, max: 3, format: v => hidN[v], onchange: v => { From 5f9eca02264771743f6c1de150334339931ffae6 Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 13:14:45 +0000 Subject: [PATCH 25/35] Create Cube Scramble app --- apps.json | 13 ++++++++++++ apps/cubescramble/ChangeLog | 1 + apps/cubescramble/README.md | 25 ++++++++++++++++++++++++ apps/cubescramble/cube-scramble-icon.js | 1 + apps/cubescramble/cube-scramble.js | 1 + apps/cubescramble/cube-scramble.png | Bin 0 -> 3107 bytes 6 files changed, 41 insertions(+) create mode 100644 apps/cubescramble/ChangeLog create mode 100644 apps/cubescramble/README.md create mode 100644 apps/cubescramble/cube-scramble-icon.js create mode 100644 apps/cubescramble/cube-scramble.js create mode 100644 apps/cubescramble/cube-scramble.png diff --git a/apps.json b/apps.json index b02517aea..44375189f 100644 --- a/apps.json +++ b/apps.json @@ -245,6 +245,19 @@ ], "data": [{"name":"mywelcome.json"}] }, + { + "id": "cubescramble", + "name": "Cube Scramble", + "version":"0.01", + "description": "A random scramble generator for the 3x3 Rubik's cube", + "icon": "cube-scramble.png", + "tags": "", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"cubescramble.app.js","url":"cube-scramble.js"}, + {"name":"cubescramble.img","url":"cube-scramble-icon.js","evaluate":true} + ] + }, { "id": "gbridge", "name": "Gadgetbridge", diff --git a/apps/cubescramble/ChangeLog b/apps/cubescramble/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/cubescramble/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/cubescramble/README.md b/apps/cubescramble/README.md new file mode 100644 index 000000000..1be3a4571 --- /dev/null +++ b/apps/cubescramble/README.md @@ -0,0 +1,25 @@ +# Cube Scramble + +Describe the app... + +Add screen shots (if possible) to the app folder and link then into this file with ![](.png) + +## Usage + +Describe how to use it + +## Features + +Name the function + +## Controls + +Name the buttons and what they are used for + +## Requests + +Name who should be contacted for support/update requests + +## Creator + +Your name diff --git a/apps/cubescramble/cube-scramble-icon.js b/apps/cubescramble/cube-scramble-icon.js new file mode 100644 index 000000000..993034af6 --- /dev/null +++ b/apps/cubescramble/cube-scramble-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("ABkBiASRuUiwITPiUiAAMhEpsVqIUDkQ/KCQNVAAMRCgexCZEdiITCqoqClERiIqGj8zmeRFIdRCIMdBQQ5EiYIBmcxHwkRBQgUImY/BCQIPBBQg/DgIMBCgcRyYFDBQehCgdRI4QTBjIPDyPTmc/NQpfCi1mswkEmIKBiOHu9xCgRNBCQIABsJPD6MRi93AAN4FQQUFtg/BIgMUoIUDu4UEHoQ/CCQNEAAMRCgY/CisUCgVuCYoUBKQN3vZqCgtUoImC81siIUDH4QLBjYUBgIUBiPGH4YUECQMYkUiCgMRqlEKglhH4QTC4QTBCgMNJgR/EKwIHBiOyiITCCgMDRINEmI+DNYUSB4OxCgrxBokzH4XhCYkiwIUDiIUBmMUycR9gSBqtRB4YUEuMJmc9inTegMVqoUJjFxhryBiMTmITCCgOCEgYWBX4NxgIUB24UG2RODiL+Cc4MTmfHuc9CghoCCYNRCgYGBmcXvc/CguxNwYUD45RBAwPZCgYRBCYQUDvUQEwJFCwYUCCYaDDBoMUoADBuICCioSDiOxIgcXewIUCu8Ru94+fBCYW3DYIUCCYIUBg4UBj0XvHDn6LDCgcRCgUQgIUBi1hw6XByJ1DCgNRswUBoMAgAMBi1mQIMzmITBCgVR8wUBCYQABCgVhCg0R41mCgMQCgcMCgNmj4UGBII1BCYYABjwJBsPTCgV7iXBBIQTFgEBBQUbnqaCkWxBII8EAAcOCgNEj+HiNykWBFBAACSgKHBiMSkQUBtwoIIAQUBCoITBkUhCZQVCCgNECgWwCZYABbgQUCCZoqDCYI8MCouCkITPIAUSCaIqBHhQ=")) diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js new file mode 100644 index 000000000..614c8368d --- /dev/null +++ b/apps/cubescramble/cube-scramble.js @@ -0,0 +1 @@ +E.showMessage("Cube\nScramble","3x3"); diff --git a/apps/cubescramble/cube-scramble.png b/apps/cubescramble/cube-scramble.png new file mode 100644 index 0000000000000000000000000000000000000000..34db342f6f7ad128e6484e0c242e4f57d8cb47e4 GIT binary patch literal 3107 zcmV+;4BYdHP)Px=-AP12RA@uJnR$Fo*A~ZrXT0a!L`0-yXd;zpwJ$|ts49Ji(o!`ilqRj=QKH(S zhG+O_DJfElK3YvFc}k_`p=fxiP$@N*Co~9(B*YN+p6T9u-sha_-sI#C3GL_Yf4KXs zz4mvnz4qE`?GX4sHHKtH(lng`73Ty+X!fwv5)V6|rt&Ps_GB1lY37Q|@Z|oEg?n%rLo%Cc-cZKtDEO5J{6xDSHxt@`os$5D2-ELIf73pIuPGoZm7 z!|haqBU?*Ji}m@q)o+22%29Z+5MkkAei>?+Yr!H~C;*O{z&;cx$8g_)r20v(e?h3` z5U=|Aulnl!7SZB&{@y)%WB0Dz5M-f741R@7jA>L@ePq1YM&+_MX^RJhVc+{VfNBSy z>Ga8}up|C40$HoG+~WfSRg{@gsOyLw+xkcw0J5*`cH)wyMBqPJEUkNbk4DfenE9h41eP(WGB zo_r!o!RaHut!j4wwdy-TUG1AMWhC{sdo_e80wGaO`RZV&enjKb#f;CxrGs)Tw^kgs zp}%%wZ(bH)uEer7o5IjhEL5kF(1;Ac?+y#JpIg>Tc&WYr=(6s63WMKf(c@J+)~=Kd z3tF{?!rSk%RTt?HWWjlID>bJ@S+=h{Y*RLUI19{)jRt|*1dUAoS%eWLLw{S#p&D6A z6RPt#4@m+@Qv0RC;c%W|o*}VhKs0(a4R-6kW3?l8`YAz>1+xdJenXAgp_|4P2Xh0S z1Lf!9QlO%PB_9+8l;7~}+g*FJ$jvhv=<1v%I;5|*@%SAKU3GDmXcMQoWGcebs2%#| z@|pdh?Q>p0YoCf-AEt=skZUhPR;G+TJ)C};dw@jhFczgZovKw64SC3mAj>RZ*5&I< zzd679oTS;uXHaxUjFTj(P}5TZI%2b`g&cn6KsbUKFgGpGtXf@jxqwSfb)? zd7k|?CW!?e6A4RFs-2vFZw+9xW9!H`w22M$kXP&~#&5WSto$CtO{~g|{T765yrMN73qD(b;Uk6{7HTq?7AT4`)&*+f8U88= zgvxD4z}~kUU?@>f-FpQgKAnXTp|$PlG7E6 zv-&~}Hbd_7C9DDv9?N^R>Pq=4GL@_Pm0G!(&1RIAmHJ#)+Q>AlT(PoR&}Sm*py-yI zql2D3La0wQa!#eWQ0?#s8PbvzY_64w9^LF{oXFww6#_F%jj%;2#!<&TH-t*FP}-%z z9@`ewnIFI&T#f@jA3(DN-+_JVl&M&dvA{3rjT<*`_siFiIQxt<;AgL*)V@6{GN4`q zSnSTBpuCoVZk8k1yv`YxTq&OJEaR2->z!6 zfnU)dlm9sxQ>Rb$DW`3_w*BWXoJT}N1ZI9X6LUYAi-r9nF{o8t!#Fo6&+r-6o5I-2 zU*G5)f#q*B&{yLEjcCN-R;}icU-n;;Yl%&VjvcUV$2Om!p>;wb2*zaQmX92u?)c-X zGau!+PNYiwXep@}m=IqF2R~@6PgL6R5Tc`0B&V|2w#x)z$U5H^eUO29J4`!w>_opl z{oG@1@vlN@J;a@{`2iJ)V6$13Y!zp=@;18$4$msW>OI%6co~g}(@hYDuCEqU6S(}x zWsDg;2AeiIZ#q|Vm_r~9T<-p@?SPi6md^D&d=3?;JMQRQqFa1DHG6ohzQwMl!D{|k zd4xu|O)iP7qpQ z=K>nBrU=UhtX&-YJI0T(A@Kzh&YtsKPQ25;9%gip&~<1Fv_16_ zly)Qif(q$LK%hHH>ax^-{tNq>{RF{*>sYoZA*ZSaP5ErollZ4}4yUL84PikHj$N_h z{hYJN-zVwfOTVHqZn81$dm_|?Ba@yssMB;gLSrHIn(G0|>|ctA^FN`)A;VjWsHK|P z`;;D@>eUKVFMa&1hjLflq@{0LM#dqgE{o>rXK?p=MHoBz8-dmxoL2A^Ug}La0UJn& zL%ws*LH=<9rkx*QvpEs92?p&g`36wpo&augc8Q<}^|e9n#F=OK8@Do=>7B0as$Af; zvm63T6R@eON7Y$1LR2+dSiNtl_;i{|~veY44uE=Q;!s6|vN{P4?z7XlcKI zygd^7zsX|Z^UV;?%20?p9iS6L*=ry+E?dl1!7`i zxGtr%FoKQJC)Bb6?O~5F`=vVh}YoEP5mBc^M6HjgJ_TW z4<0y(&Ye1g1_4EO#E1}!Y6_{zJrt-mASo${+O}z1vG93{F%8$QyZk~Z%lCMl|CKJU zAn&KVURK$<`C$NEvJVaF8pyM}MOczzc$gv!OJJL`!GmMthK)!anA+4LTTVU-Mo3kG7Elc^EO^+`+{36yk0npZx(CWOVx_{p_m`pqOMtj5ELSGj=iNM zwbW52oDW9&+;shO02gpokOgPB_>=8VgSzJD_y9#*IEao-&%wO;^U!}l|Ivz~c&Vo! xjrcDE)u!iZ{vb#^FUW%SkmdbPC6C65{{eatz(r0D4-^0Z002ovPDHLkV1m0C1<3#a literal 0 HcmV?d00001 From fc8cd41c631af790b54ed8767133211aa38d46cf Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 13:45:11 +0000 Subject: [PATCH 26/35] Give this a go --- apps.json | 26 +++++++++++++------------- apps/cubescramble/ChangeLog | 2 +- apps/cubescramble/README.md | 25 ------------------------- apps/cubescramble/cube-scramble.js | 8 +++++++- 4 files changed, 21 insertions(+), 40 deletions(-) delete mode 100644 apps/cubescramble/README.md diff --git a/apps.json b/apps.json index 44375189f..213ceb882 100644 --- a/apps.json +++ b/apps.json @@ -245,19 +245,6 @@ ], "data": [{"name":"mywelcome.json"}] }, - { - "id": "cubescramble", - "name": "Cube Scramble", - "version":"0.01", - "description": "A random scramble generator for the 3x3 Rubik's cube", - "icon": "cube-scramble.png", - "tags": "", - "supports" : ["BANGLEJS2"], - "storage": [ - {"name":"cubescramble.app.js","url":"cube-scramble.js"}, - {"name":"cubescramble.img","url":"cube-scramble-icon.js","evaluate":true} - ] - }, { "id": "gbridge", "name": "Gadgetbridge", @@ -553,6 +540,19 @@ ], "data": [{"name":"trex.score","storageFile":true}] }, + { + "id": "cubescramble", + "name": "Cube Scramble", + "version":"0.01", + "description": "A random scramble generator for the 3x3 Rubik's cube", + "icon": "cube-scramble.png", + "tags": "", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"cubescramble.app.js","url":"cube-scramble.js"}, + {"name":"cubescramble.img","url":"cube-scramble-icon.js","evaluate":true} + ] + }, { "id": "astroid", "name": "Asteroids!", diff --git a/apps/cubescramble/ChangeLog b/apps/cubescramble/ChangeLog index 5560f00bc..7d48be036 100644 --- a/apps/cubescramble/ChangeLog +++ b/apps/cubescramble/ChangeLog @@ -1 +1 @@ -0.01: New App! +0.01: Cube Scramble! diff --git a/apps/cubescramble/README.md b/apps/cubescramble/README.md deleted file mode 100644 index 1be3a4571..000000000 --- a/apps/cubescramble/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Cube Scramble - -Describe the app... - -Add screen shots (if possible) to the app folder and link then into this file with ![](.png) - -## Usage - -Describe how to use it - -## Features - -Name the function - -## Controls - -Name the buttons and what they are used for - -## Requests - -Name who should be contacted for support/update requests - -## Creator - -Your name diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js index 614c8368d..b70ef3e67 100644 --- a/apps/cubescramble/cube-scramble.js +++ b/apps/cubescramble/cube-scramble.js @@ -1 +1,7 @@ -E.showMessage("Cube\nScramble","3x3"); +g.clear(); + +function appStart() { + E.showMessage("Loading..."); +} + +appStart(); From 646011afaadf6057f7bd5d515073991d477b7c4b Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 13:52:08 +0000 Subject: [PATCH 27/35] resize canvas --- apps/cubescramble/cube-scramble.png | Bin 3107 -> 3124 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/cubescramble/cube-scramble.png b/apps/cubescramble/cube-scramble.png index 34db342f6f7ad128e6484e0c242e4f57d8cb47e4..9d0a7c65247b75825247bc15e67b6a3680334ea8 100644 GIT binary patch literal 3124 zcmV-449oM0P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 From 816635eaf7833fb7c3afb793d96ab1a6859e6312 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 18 Nov 2021 14:08:12 +0000 Subject: [PATCH 28/35] 0.33: Really fix 'beep' menu on Bangle.js 2 this timeproper fix for beep switching --- apps.json | 2 +- apps/setting/ChangeLog | 1 + apps/setting/settings.js | 14 +++++++------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/apps.json b/apps.json index 238c928be..a5307daa8 100644 --- a/apps.json +++ b/apps.json @@ -115,7 +115,7 @@ { "id": "setting", "name": "Settings", - "version": "0.32", + "version": "0.33", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 63f77edcf..faa50405f 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -35,3 +35,4 @@ 0.30: Move '< Back' to the top of menus 0.31: Remove Bangle 1 settings when running on Bangle 2 0.32: Fix 'beep' menu on Bangle.js 2 +0.33: Really fix 'beep' menu on Bangle.js 2 this time diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 395fdef00..fcf651b6f 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -38,7 +38,7 @@ function resetSettings() { quiet: 0, // quiet mode: 0: off, 1: priority only, 2: total silence timeout: 10, // Default LCD timeout in seconds vibrate: true, // Vibration enabled by default. App must support - beep: "vib", // Beep enabled by default. App must support + beep: BANGLEJS2?true:"vib", // Beep enabled by default. App must support timezone: 0, // Set the timezone for the device HID: false, // BLE HID mode, off by default clock: null, // a string for the default clock's name @@ -73,9 +73,9 @@ const boolFormat = v => v ? "On" : "Off"; function showMainMenu() { var beepMenuItem; - if (BANGLEJS2) { // Bangle.js 2 is simply on/off + if (BANGLEJS2) { beepMenuItem = { - value: settings.beep, + value: settings.beep!=false, format: boolFormat, onchange: v => { settings.beep = v; @@ -85,8 +85,8 @@ function showMainMenu() { setTimeout(()=>VIBRATE.reset(),200); } // beep with vibration moter } - } - } else { // Bangle.js 1 has different options + }; + } else { // Bangle.js 1 var beepV = [false, true, "vib"]; var beepN = ["Off", "Piezo", "Vibrate"]; beepMenuItem = { @@ -121,8 +121,8 @@ function showMainMenu() { 'Vibration': { value: settings.vibrate, format: boolFormat, - onchange: v => { - settings.vibrate = v; + onchange: () => { + settings.vibrate = !settings.vibrate; updateSettings(); if (settings.vibrate) { VIBRATE.write(1); From d7ebc1438de42c6c644006fab29bfb146e6c156a Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 14:09:44 +0000 Subject: [PATCH 29/35] Create scramble generator --- apps/cubescramble/cube-scramble.js | 69 +++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js index b70ef3e67..c73ebc00e 100644 --- a/apps/cubescramble/cube-scramble.js +++ b/apps/cubescramble/cube-scramble.js @@ -1,7 +1,66 @@ -g.clear(); -function appStart() { - E.showMessage("Loading..."); -} +// Scramble code from: https://raw.githubusercontent.com/bjcarlson42/blog-post-sample-code/master/Rubik's%20Cube%20JavaScript%20Scrambler/part_two.js +const makeScramble = () => { + const options = ["F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'"]; + const numOptions = [0, 1, 2, 3, 4, 5]; // 0 = F, 1 = R, 2 = U, 3 = B, 4 = L, 5 = D + const scrambleMoves = []; + let bad = true; -appStart(); + while (bad) { + let scramble = []; + for (let i = 0; i < 20; i++) { + scramble.push(numOptions[getRandomInt(6)]); + } + // check if moves directly next to each other involve the same letter + for (let i = 0; i < 20 - 1; i++) { + if (scramble[i] == scramble[i + 1]) { + bad = true; + break; + } else { + bad = false; + } + } + } + // switch numbers to letters + let move; + for (let i = 0; i < 20; i++) { + switch (scramble[i]) { + case 0: + move = options[getRandomInt(3)]; // 0,1,2 + scrambleMoves.push(move); + break; + case 1: + move = options[getRandomIntBetween(3, 6)]; // 3,4,5 + scrambleMoves.push(move); + break; + case 2: + move = options[getRandomIntBetween(6, 9)]; // 6,7,8 + scrambleMoves.push(move); + break; + case 3: + move = options[getRandomIntBetween(9, 12)]; // 9,10,11 + scrambleMoves.push(move); + break; + case 4: + move = options[getRandomIntBetween(12, 15)]; // 12,13,14 + scrambleMoves.push(move); + break; + case 5: + move = options[getRandomIntBetween(15, 18)]; // 15,16,17 + scrambleMoves.push(move); + break; + } + } + return scrambleMoves; +}; + +const getRandomInt = max => Math.floor(Math.random() * Math.floor(max)); // returns up to max - 1 + +const getRandomIntBetween = (min, max) => Math.floor(Math.random() * (max - min) + min); + +const presentScramble = () => { + g.clear(); + E.showMessage(makeScramble().join(" ")); +}; + +presentScramble(); From fe27b58f97df5e6c623690374225aca16c54970d Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 14:17:26 +0000 Subject: [PATCH 30/35] New scramble on btn press --- apps/cubescramble/cube-scramble.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js index c73ebc00e..72ed6c7e3 100644 --- a/apps/cubescramble/cube-scramble.js +++ b/apps/cubescramble/cube-scramble.js @@ -64,3 +64,8 @@ const presentScramble = () => { }; presentScramble(); + +setWatch(() => { + Bangle.buzz(); + presentScramble(); +}, BTN1, {repeat:true}); From 0e0086c5d8fec372d52285393da1ebeb3ac2d72c Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 14:25:32 +0000 Subject: [PATCH 31/35] Try to get scramble reset to work --- apps/cubescramble/cube-scramble.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/cubescramble/cube-scramble.js b/apps/cubescramble/cube-scramble.js index 72ed6c7e3..c0b1d11c3 100644 --- a/apps/cubescramble/cube-scramble.js +++ b/apps/cubescramble/cube-scramble.js @@ -63,9 +63,12 @@ const presentScramble = () => { E.showMessage(makeScramble().join(" ")); }; -presentScramble(); - -setWatch(() => { - Bangle.buzz(); +const init = () => { presentScramble(); -}, BTN1, {repeat:true}); + + setWatch(() => { + presentScramble(); + }, BTN1, {repeat:true}); +}; + +init(); From c630eaee8c9c998847522101ae90b5af1677ea74 Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 14:44:33 +0000 Subject: [PATCH 32/35] Update icon --- apps/cubescramble/cube-scramble-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/cubescramble/cube-scramble-icon.js b/apps/cubescramble/cube-scramble-icon.js index 993034af6..69672b0b0 100644 --- a/apps/cubescramble/cube-scramble-icon.js +++ b/apps/cubescramble/cube-scramble-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("ABkBiASRuUiwITPiUiAAMhEpsVqIUDkQ/KCQNVAAMRCgexCZEdiITCqoqClERiIqGj8zmeRFIdRCIMdBQQ5EiYIBmcxHwkRBQgUImY/BCQIPBBQg/DgIMBCgcRyYFDBQehCgdRI4QTBjIPDyPTmc/NQpfCi1mswkEmIKBiOHu9xCgRNBCQIABsJPD6MRi93AAN4FQQUFtg/BIgMUoIUDu4UEHoQ/CCQNEAAMRCgY/CisUCgVuCYoUBKQN3vZqCgtUoImC81siIUDH4QLBjYUBgIUBiPGH4YUECQMYkUiCgMRqlEKglhH4QTC4QTBCgMNJgR/EKwIHBiOyiITCCgMDRINEmI+DNYUSB4OxCgrxBokzH4XhCYkiwIUDiIUBmMUycR9gSBqtRB4YUEuMJmc9inTegMVqoUJjFxhryBiMTmITCCgOCEgYWBX4NxgIUB24UG2RODiL+Cc4MTmfHuc9CghoCCYNRCgYGBmcXvc/CguxNwYUD45RBAwPZCgYRBCYQUDvUQEwJFCwYUCCYaDDBoMUoADBuICCioSDiOxIgcXewIUCu8Ru94+fBCYW3DYIUCCYIUBg4UBj0XvHDn6LDCgcRCgUQgIUBi1hw6XByJ1DCgNRswUBoMAgAMBi1mQIMzmITBCgVR8wUBCYQABCgVhCg0R41mCgMQCgcMCgNmj4UGBII1BCYYABjwJBsPTCgV7iXBBIQTFgEBBQUbnqaCkWxBII8EAAcOCgNEj+HiNykWBFBAACSgKHBiMSkQUBtwoIIAQUBCoITBkUhCZQVCCgNECgWwCZYABbgQUCCZoqDCYI8MCouCkITPIAUSCaIqBHhQ=")) +require("heatshrink").decompress(atob("3YANB54AFgf/+ULCqOw/4ACC6EAxEAC4fwCp2YxGIwEPC4XxGBewqEICwIABGAUQRJWwp3u9xFBAAQUCr3u8gwHgAVBC4ugCwIKDC5nghGAgEODoIKEC44PBBgUAggFDBQZIHhAMB8j4CMgQHBgoDBoB5H3BuC5nM4AqDJAIABgnd7owF3GAhgWBAAJbD8oWBCoIABoAXLqBIBCoNmC4nQC4xGCJAQVBs93u9ghoYDJAmwwFwFwYWBCoIABuBeC7oLBGAmBu0MFgMFDIMHDAZIB6AhBiCoFBgIVBJAQXFAAMv//wI4kBKoJgDSIIVBuwVBgP/AAIXEJoNnuCRFg9gCoPwh4XHTwMHvxHDPQc///xC5PgC4PgCoPFLIQSC+QXEVAb9CunggpYCwMDC4/9C4bnBqFldQWIAAIXH+FNC4deJAMAC4IWCxECC4nybQQXDh3u8vQC4qiEHILxCC4ewF4PdJQIXDO4UwgEYC42wgEOC4NeoAXE+IsBhAFBC4u16EAC4PV8AWCwCpCCwIXDoBGD7rPB7vUC4UQCwRmDBoPQuwXE6ghCgAVEgsBC4fQu4XFD4MN7tE8oWD7oXEu4XE3YXCqHdovuoCgDI4WBC4VwC4YsB6HMgjBBYQKHCC4OKhnAC4K+DJAQXB4DxB9wfBC4cFBYN3tYWDAAO9C4PMC48ABQPAIogADqAMCpwXFhgKCIohJErgNBgoXDqHxC4QWIAAINCg1errmBh4XC4AWJAAIwBg9gonQgf/+QXBFxRJCC4N2OYP/C4VQCxZJCg61Bh4XB+cACxoABC4VvC4PxCx5JBC4k7C6AwCuf/+AWRAANnuX/RZhJIuBFSAAaLMA=")); From fc4bfed8480c44f2b458c706f0806b9a453c724f Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 14:57:18 +0000 Subject: [PATCH 33/35] Add readme and bangle js 1 support --- apps.json | 4 +++- apps/cubescramble/ChangeLog | 2 +- apps/cubescramble/README.md | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 apps/cubescramble/README.md diff --git a/apps.json b/apps.json index 213ceb882..3f91aba99 100644 --- a/apps.json +++ b/apps.json @@ -547,7 +547,9 @@ "description": "A random scramble generator for the 3x3 Rubik's cube", "icon": "cube-scramble.png", "tags": "", - "supports" : ["BANGLEJS2"], + "supports" : ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "allow_emulator": true, "storage": [ {"name":"cubescramble.app.js","url":"cube-scramble.js"}, {"name":"cubescramble.img","url":"cube-scramble-icon.js","evaluate":true} diff --git a/apps/cubescramble/ChangeLog b/apps/cubescramble/ChangeLog index 7d48be036..46b4dab7c 100644 --- a/apps/cubescramble/ChangeLog +++ b/apps/cubescramble/ChangeLog @@ -1 +1 @@ -0.01: Cube Scramble! +0.01: Cube Scramble has arrived! diff --git a/apps/cubescramble/README.md b/apps/cubescramble/README.md new file mode 100644 index 000000000..eb1f8138c --- /dev/null +++ b/apps/cubescramble/README.md @@ -0,0 +1,14 @@ +# Cube Scramble + +A random scramble generator for the 3x3 Rubik's cube + +## Future features + +I'm keen to complete this project with + +* Add a timer +* Add the ability for times to be stored and exported + +## Author + +Nathan Lisgo https://github.com/nlisgo From c729b4f232aba96344d6cfd5566df2c34d36677b Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 15:03:03 +0000 Subject: [PATCH 34/35] Ready for release --- apps/cubescramble/ChangeLog | 2 +- apps/cubescramble/README.md | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/cubescramble/ChangeLog b/apps/cubescramble/ChangeLog index 46b4dab7c..28f11c1c7 100644 --- a/apps/cubescramble/ChangeLog +++ b/apps/cubescramble/ChangeLog @@ -1 +1 @@ -0.01: Cube Scramble has arrived! +0.01: Initial Release diff --git a/apps/cubescramble/README.md b/apps/cubescramble/README.md index eb1f8138c..779e32489 100644 --- a/apps/cubescramble/README.md +++ b/apps/cubescramble/README.md @@ -9,6 +9,10 @@ I'm keen to complete this project with * Add a timer * Add the ability for times to be stored and exported -## Author +## Requests -Nathan Lisgo https://github.com/nlisgo +Please reach out if you have feature requests or notice bugs. + +## Creator + +Made by [Nathan Lisgo](https://github.com/nlisgo) From 5761aa35b7371a21e1b83cb20279f1269466af38 Mon Sep 17 00:00:00 2001 From: nlisgo Date: Thu, 18 Nov 2021 15:15:04 +0000 Subject: [PATCH 35/35] Remove semi-colon --- apps/cubescramble/cube-scramble-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/cubescramble/cube-scramble-icon.js b/apps/cubescramble/cube-scramble-icon.js index 69672b0b0..32ea10836 100644 --- a/apps/cubescramble/cube-scramble-icon.js +++ b/apps/cubescramble/cube-scramble-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("3YANB54AFgf/+ULCqOw/4ACC6EAxEAC4fwCp2YxGIwEPC4XxGBewqEICwIABGAUQRJWwp3u9xFBAAQUCr3u8gwHgAVBC4ugCwIKDC5nghGAgEODoIKEC44PBBgUAggFDBQZIHhAMB8j4CMgQHBgoDBoB5H3BuC5nM4AqDJAIABgnd7owF3GAhgWBAAJbD8oWBCoIABoAXLqBIBCoNmC4nQC4xGCJAQVBs93u9ghoYDJAmwwFwFwYWBCoIABuBeC7oLBGAmBu0MFgMFDIMHDAZIB6AhBiCoFBgIVBJAQXFAAMv//wI4kBKoJgDSIIVBuwVBgP/AAIXEJoNnuCRFg9gCoPwh4XHTwMHvxHDPQc///xC5PgC4PgCoPFLIQSC+QXEVAb9CunggpYCwMDC4/9C4bnBqFldQWIAAIXH+FNC4deJAMAC4IWCxECC4nybQQXDh3u8vQC4qiEHILxCC4ewF4PdJQIXDO4UwgEYC42wgEOC4NeoAXE+IsBhAFBC4u16EAC4PV8AWCwCpCCwIXDoBGD7rPB7vUC4UQCwRmDBoPQuwXE6ghCgAVEgsBC4fQu4XFD4MN7tE8oWD7oXEu4XE3YXCqHdovuoCgDI4WBC4VwC4YsB6HMgjBBYQKHCC4OKhnAC4K+DJAQXB4DxB9wfBC4cFBYN3tYWDAAO9C4PMC48ABQPAIogADqAMCpwXFhgKCIohJErgNBgoXDqHxC4QWIAAINCg1errmBh4XC4AWJAAIwBg9gonQgf/+QXBFxRJCC4N2OYP/C4VQCxZJCg61Bh4XB+cACxoABC4VvC4PxCx5JBC4k7C6AwCuf/+AWRAANnuX/RZhJIuBFSAAaLMA=")); +require("heatshrink").decompress(atob("3YANB54AFgf/+ULCqOw/4ACC6EAxEAC4fwCp2YxGIwEPC4XxGBewqEICwIABGAUQRJWwp3u9xFBAAQUCr3u8gwHgAVBC4ugCwIKDC5nghGAgEODoIKEC44PBBgUAggFDBQZIHhAMB8j4CMgQHBgoDBoB5H3BuC5nM4AqDJAIABgnd7owF3GAhgWBAAJbD8oWBCoIABoAXLqBIBCoNmC4nQC4xGCJAQVBs93u9ghoYDJAmwwFwFwYWBCoIABuBeC7oLBGAmBu0MFgMFDIMHDAZIB6AhBiCoFBgIVBJAQXFAAMv//wI4kBKoJgDSIIVBuwVBgP/AAIXEJoNnuCRFg9gCoPwh4XHTwMHvxHDPQc///xC5PgC4PgCoPFLIQSC+QXEVAb9CunggpYCwMDC4/9C4bnBqFldQWIAAIXH+FNC4deJAMAC4IWCxECC4nybQQXDh3u8vQC4qiEHILxCC4ewF4PdJQIXDO4UwgEYC42wgEOC4NeoAXE+IsBhAFBC4u16EAC4PV8AWCwCpCCwIXDoBGD7rPB7vUC4UQCwRmDBoPQuwXE6ghCgAVEgsBC4fQu4XFD4MN7tE8oWD7oXEu4XE3YXCqHdovuoCgDI4WBC4VwC4YsB6HMgjBBYQKHCC4OKhnAC4K+DJAQXB4DxB9wfBC4cFBYN3tYWDAAO9C4PMC48ABQPAIogADqAMCpwXFhgKCIohJErgNBgoXDqHxC4QWIAAINCg1errmBh4XC4AWJAAIwBg9gonQgf/+QXBFxRJCC4N2OYP/C4VQCxZJCg61Bh4XB+cACxoABC4VvC4PxCx5JBC4k7C6AwCuf/+AWRAANnuX/RZhJIuBFSAAaLMA="))