From 8992ad545a8727cab6904a0442ce9ce0132be2a1 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 30 Jan 2020 17:05:53 +0000 Subject: [PATCH] Add demo app --- apps.json | 15 +++ apps/_example_app/app-icon.js | 2 +- apps/demoapp/app-icon.js | 1 + apps/demoapp/app.js | 168 ++++++++++++++++++++++++++++++++++ apps/demoapp/app.json | 5 + apps/demoapp/app.png | Bin 0 -> 1327 bytes bin/firmwaremaker.js | 1 + 7 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 apps/demoapp/app-icon.js create mode 100644 apps/demoapp/app.js create mode 100644 apps/demoapp/app.json create mode 100644 apps/demoapp/app.png diff --git a/apps.json b/apps.json index 24be2e83a..76151a627 100644 --- a/apps.json +++ b/apps.json @@ -736,5 +736,20 @@ {"name":"*ctrclk","url":"app-icon.js","evaluate":true} ], "sortorder" : -9 + }, + { "id": "demoapp", + "name": "Demo Loop", + "icon": "app.png", + "version":"0.01", + "description": "Simple demo app - displays Bangle.js, JS logo, graphics, and Bangle.js information", + "tags": "", + "type":"app", + "allow_emulator":true, + "storage": [ + {"name":"+demoapp","url":"app.json"}, + {"name":"-demoapp","url":"app.js"}, + {"name":"*demoapp","url":"app-icon.js","evaluate":true} + ], + "sortorder" : -9 } ] diff --git a/apps/_example_app/app-icon.js b/apps/_example_app/app-icon.js index 52a11577f..49232b838 100644 --- a/apps/_example_app/app-icon.js +++ b/apps/_example_app/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwJC/AH4A/AH4AgA==")); +require("heatshrink").decompress(atob("mEwwJC/AH4A/AH4AgA==")) diff --git a/apps/demoapp/app-icon.js b/apps/demoapp/app-icon.js new file mode 100644 index 000000000..5fa471ab6 --- /dev/null +++ b/apps/demoapp/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4AT7oAQC43e9oXU73u93hiIALC5PiC6YWBAAOIABWBC7xHDC9fdl3ilAXUjAVLC5NETQQaLC46zEDAmCAogXGgLMFCwcuM4gXGcgwqBwMU9wXSDAICB7wXTAAUiO5YXKMgYXTU5gSFwLEJC5gNBFwf/AAPzC52IFwYXRqoALqAXWqoXIioXRoIXW9shC4UQNQgAMh1BinUC4Xd6AKBhqJDBAYAEoNN7tBiASBCYQDBCYIIEAAkBBIPRC6gvXL60BR6oXBkUikMQgQEBBIIDBkEABAgAEBIUiiADCkAIDDYQcCAAgJCABwXdAH4A/ABg")) diff --git a/apps/demoapp/app.js b/apps/demoapp/app.js new file mode 100644 index 000000000..b84839b45 --- /dev/null +++ b/apps/demoapp/app.js @@ -0,0 +1,168 @@ +Bangle.setLCDPower(1); +Bangle.setLCDTimeout(0); + +var scenes = [ + function() { + y = -100; + var step = 4; + var i = setInterval(function() { + y+=step; + if (y>70) { + clearInterval(i); + i = undefined; + } + g.clearRect(0,y-(step+1),240,y-1); + g.drawImage(Bangle.getLogo(),0,y); + }, 20); + Bangle.setLCDMode(); + g.clear(); + return function() { + if (i) clearInterval(i); + }; + }, + function() { + var txt = [" ____ _ \n"+ + "| __|___ ___ ___ _ _|_|___ ___ \n"+ + "| __|_ -| . | _| | | | | . |\n"+ + "|____|___| _|_| |___|_|_|_|___|\n"+ + " |_| espruino.com\n\n", + "The JavaScript Interpreter for uCs\n", + " * On-chip JS Interpreter", + " * GPS, Acclerometer, Compass", + " * 64 MHz, 64kB RAM, 512kB + 4MB Flash", + " * 240x240 IPS LCD", + " * Speaker & Vibration motor", + " * Bluetooth LE", + " * 1 week battery life", + "", + "Includes:", + " * Tensorflow AI", + " * Bluetooth LE central & periph", + " * Graphics Library", + " * VT100 terminal", + "","","" + ]; + var n=0; + var i = setInterval(function() { + Terminal.println(txt[n]); + n++; + if (n>=txt.length) { + clearInterval(i); + i=undefined; + } + }, 200); + Bangle.setLCDMode(); + return function() { + + + if (i) clearInterval(i); + }; + }, + function() { + var img = require("heatshrink").decompress(atob("oNBxH+5wA/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AHGpAAoQKv4ADCBQAeqsrAAejBw9/B4oABqt/IGepHw5CEQspALH5hBC5pAvv4/MAALFkIBWpPI6IHqpAu0Z3GfYOpRYdPQEhALYIp2FBYNVI4JAvvL4LH0yBYAFJAQQQ5Ay1JAFftBAQBYxCDv+qIGiCHIQiGnIBfOv5BJIQRAyIJkrvKEkIBrFBB4qEGIGRCNYsZAQIQV/IZDEiICRCDQVJAUIQVPC4lVIF6yJQYpAZ5t/FYvNIBepqtVIJGjIDoqBDY2pdYo3DfAhBIQLmpvIcDvIrC5oJEIAhTCGQmj5qgEC4t5e7YrBqt5BI6UFBg15v4XHbQwAQb4oAKv7NKABdVRoYATUAwnICqjZFIMdVE4+jXI4XGYCxBFFZN/M5OpCxUrvJ/ZFYmjvNVAAY+KCwpDBC6YAV5vNC9oA/AH4A/AHYA==")); + + g.clear(); + y = 0; + var step = 4; + var i = setInterval(function() { + y+=step; + g.clear(); + g.drawImage(img,60,60,{rotate:Math.sin(y*0.03)*0.5}); + g.flip(); + }, 20); + Bangle.setLCDMode("120x120"); + return function() { + if (i) clearInterval(i); + }; + }, + function() { + var rx = 0, ry = 0; + + // draw a cube + function draw() { + var rcx=Math.cos(rx), + rsx=Math.sin(rx), + rcy=Math.cos(ry), + rsy=Math.sin(ry); + // Project 3D coordinates into 2D + function p(x,y,z) { + var t; + t = x*rcy + z*rsy; + z = z*rcy - x*rsy; + x=t; + t = y*rcx + z*rsx; + z = z*rcx - y*rsx; + y=t; + z += 6; + return [240 * (0.5 + x/z), 240 * (0.3 + y/z)]; + } + + var a; + // draw a series of lines to make up our cube + a = p(-1,-1,-1); g.moveTo(a[0],a[1]); + a = p(1,-1,-1); g.lineTo(a[0],a[1]); + a = p(1,1,-1); g.lineTo(a[0],a[1]); + a = p(-1,1,-1); g.lineTo(a[0],a[1]); + a = p(-1,-1,-1); g.lineTo(a[0],a[1]); + a = p(-1,-1,1); g.moveTo(a[0],a[1]); + a = p(1,-1,1); g.lineTo(a[0],a[1]); + a = p(1,1,1); g.lineTo(a[0],a[1]); + a = p(-1,1,1); g.lineTo(a[0],a[1]); + a = p(-1,-1,1); g.lineTo(a[0],a[1]); + a = p(-1,-1,-1); g.moveTo(a[0],a[1]); + a = p(-1,-1,1); g.lineTo(a[0],a[1]); + a = p(1,-1,-1); g.moveTo(a[0],a[1]); + a = p(1,-1,1); g.lineTo(a[0],a[1]); + a = p(1,1,-1); g.moveTo(a[0],a[1]); + a = p(1,1,1); g.lineTo(a[0],a[1]); + a = p(-1,1,-1); g.moveTo(a[0],a[1]); + a = p(-1,1,1); g.lineTo(a[0],a[1]); + } + + // rotate and redraw the cube + function step() { + // rotate + rx += 0.1; + ry += 0.11; + // draw + g.clear(); + g.setColor(0xFFFF); + draw(); + g.flip(); + } + + Bangle.setLCDMode("doublebuffered"); + g.clear();g.flip(); + var i = setInterval(step,50); + return function() { + clearInterval(i); + }; + }, + function() { + var img = require("heatshrink").decompress(atob("oNBxH+5wA/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AHGpAAoQKv4ADCBQAeqsrAAejBw9/B4oABqt/IGepHw5CEQspALH5hBC5pAvv4/MAALFkIBWpPI6IHqpAu0Z3GfYOpRYdPQEhALYIp2FBYNVI4JAvvL4LH0yBYAFJAQQQ5Ay1JAFftBAQBYxCDv+qIGiCHIQiGnIBfOv5BJIQRAyIJkrvKEkIBrFBB4qEGIGRCNYsZAQIQV/IZDEiICRCDQVJAUIQVPC4lVIF6yJQYpAZ5t/FYvNIBepqtVIJGjIDoqBDY2pdYo3DfAhBIQLmpvIcDvIrC5oJEIAhTCGQmj5qgEC4t5e7YrBqt5BI6UFBg15v4XHbQwAQb4oAKv7NKABdVRoYATUAwnICqjZFIMdVE4+jXI4XGYCxBFFZN/M5OpCxUrvJ/ZFYmjvNVAAY+KCwpDBC6YAV5vNC9oA/AH4A/AHYA==")); + + g.clear(); + y = 0; + var step = 4; + var i = setInterval(function() { + y+=step; + g.scroll(0,1); + g.drawImage(img,Math.random()*240,Math.random()*240, + {rotate:Math.random()*6.3, scale:0.5+Math.random()}); + }, 1); + Bangle.setLCDMode(); + return function() { + if (i) clearInterval(i); + }; + } + +]; +var sceneNo = scenes.length-1; + +var stop = scenes[sceneNo](); +setInterval(function() { + sceneNo++; + if (sceneNo>=scenes.length) sceneNo=0; + stop(); + stop = scenes[sceneNo](); +}, 10000); diff --git a/apps/demoapp/app.json b/apps/demoapp/app.json new file mode 100644 index 000000000..fab184c15 --- /dev/null +++ b/apps/demoapp/app.json @@ -0,0 +1,5 @@ +{ + "name":"Demo Loop", + "icon":"*demoapp", + "src":"-demoapp" +} diff --git a/apps/demoapp/app.png b/apps/demoapp/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6904814f374857bb90e1d751c4ed1dcaceb5e86d GIT binary patch literal 1327 zcmV+~1#k(eNc2Q-F2Ofc~cg+L&v3Gqo2641m8LPLV3hC39YEiJTlw|nb!cXsCZ zPzvtO&hEB5Ek5k;Y4&{o`7U$jeCNzUi4rABJW3=hL;nt+Sja^3(fV01YpzPJn-rG| z|B|J+y|n9Ctlc*H9pC1( z%T@;elBH?M&)`#Z_AZ+!J~NxJe2g=%O*Yp16VTi|FA1eFIG9&rIRm-)Kdo-d0@R7H z>a=tp0w0R0@|D^J&k{{rFxiZSuZZ*3`_;clK22{ z7V5y2)LC<3gk=Lk)5)+po}laeO%5xUXfKOTkIClFRt#CXko5d)ok&8^IuNAe;xJBa z`Uy9Ugn7De5F>8zletg59DL8u@=cNXu1~#VSPfn8>r%9 zTLXq{f6FbZ08NqUZwYX>&cow3MyXIUp1dS+v)N03vv=P13tPTQLN#uBRyWgnD@e;o z7)c0pS?0oudPeMpn& z1E6L(Jm$kRuP<%vF8H|L9O|Jic4gK<=g1I-*u3Wt{rGYGKaGwi-j#98>TfNj=v_tQ!<~QuIB6=SMHk)>6sJX zeSLb~vMT^{7ZT$2nsQ@bSF5_{>>U>k?gU#quCmG-;Zm@My?x6WRi`&=!y!ch#L-oY zk@W*WCxSC5sduFfHwV((+N8-kkDy{ffKFgX~byQyOYKMl=*e7