From b2d389d56ea81855f36a2c44b6e69fe6bec4fcac Mon Sep 17 00:00:00 2001 From: hughbarney Date: Mon, 11 Oct 2021 14:31:10 +0100 Subject: [PATCH 1/8] Widbatpc: added option to fillbar with level color, see README for screenshots --- apps.json | 2 +- apps/widbatpc/ChangeLog | 1 + apps/widbatpc/README.md | 10 +++++++++- apps/widbatpc/screenshot.jpg | Bin 15828 -> 0 bytes apps/widbatpc/settings.js | 6 ++++++ apps/widbatpc/widbatpc.full.jpg | Bin 0 -> 3299 bytes apps/widbatpc/widbatpc.part.jpg | Bin 0 -> 2623 bytes apps/widbatpc/widget.js | 7 ++++++- 8 files changed, 23 insertions(+), 3 deletions(-) delete mode 100644 apps/widbatpc/screenshot.jpg create mode 100644 apps/widbatpc/widbatpc.full.jpg create mode 100644 apps/widbatpc/widbatpc.part.jpg diff --git a/apps.json b/apps.json index 876b243ae..7cc5e67f7 100644 --- a/apps.json +++ b/apps.json @@ -653,7 +653,7 @@ "name": "Battery Level Widget (with percentage)", "shortName": "Battery Widget", "icon": "widget.png", - "version":"0.12", + "version":"0.13", "description": "Show the current battery level and charging status in the top right of the clock, with charge percentage", "tags": "widget,battery,b2", "type":"widget", diff --git a/apps/widbatpc/ChangeLog b/apps/widbatpc/ChangeLog index 64482db71..09e4fabf4 100644 --- a/apps/widbatpc/ChangeLog +++ b/apps/widbatpc/ChangeLog @@ -9,3 +9,4 @@ 0.10: Add 'hide if charge greater than' 0.11: Don't overwrite existing settings on app update 0.12: Fixed for Bangle 2 +0.13: Fillbar setting added, see README diff --git a/apps/widbatpc/README.md b/apps/widbatpc/README.md index 6e8fd10cc..c75154f72 100644 --- a/apps/widbatpc/README.md +++ b/apps/widbatpc/README.md @@ -4,5 +4,13 @@ Show the current battery level and charging status in the top right of the clock Works with Bangle 1 and Bangle 2 -![](screenshot.jpg) +When the fillbar setting is on the level colour will fill the entire +bar. This makes for an easier to read dsiplay when the charge is +below 50%. + +![](widbatpc.full.jpg) + +When the fillbar setting is off the level colour will follow the battry percentage + +![](widbatpc.part.jpg) diff --git a/apps/widbatpc/screenshot.jpg b/apps/widbatpc/screenshot.jpg deleted file mode 100644 index 48f9893ecf124d426541f5fa7f455a938d2fa919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15828 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': { value: s.hideifmorethan||100, min: 10, diff --git a/apps/widbatpc/widbatpc.full.jpg b/apps/widbatpc/widbatpc.full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3df2184fe6ed9be0be2f694b973248dc4dd52db7 GIT binary patch literal 3299 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℘8zZgqbgH#U5d#VcX-f_+3i|nRrYs3)1ABD+)FjabVt5SHxbQ`d^PtHO_Hezc@i#ZjqqtJQYQAe-sc4wjybW+;G2lWuVV5kScZm!+4#?ibfxv zFjErTgX8s(;0@Lsmbo{ZpMnAzOHy34i$_1s|zP!gjEx5IN_x#kb z=a%QNn06el?R)LG`y*V-AD_G}ooC5aaT9!Urb!MmQ*57>$-G2Cf`T6cHuBC4{dQooJ!^5s3{*^dm>UTZFq1gZc literal 0 HcmV?d00001 diff --git a/apps/widbatpc/widget.js b/apps/widbatpc/widget.js index 223db5f70..caecf8ae4 100644 --- a/apps/widbatpc/widget.js +++ b/apps/widbatpc/widget.js @@ -80,7 +80,12 @@ var s = 39; var x = this.x, y = this.y; const l = E.getBattery(); - const xl = x+4+l*(s-12)/100 + let xl = x+4+l*(s-12)/100; + + // show bar full in the level color, as you cant see the color if the bar is too small + if (setting('fillbar')) + xl = x+4+100*(s-12)/100; + c = levelColor(l); if (Bangle.isCharging() && setting('charger')) { From 87017ce81764c2f69636b87d349a458066442a3c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 15:37:43 +0100 Subject: [PATCH 2/8] More Bangle.js 2 tweaks --- apps.json | 4 +-- apps/openstmap/app.js | 1 + apps/speedo/ChangeLog | 1 + apps/speedo/speedo.js | 69 ++++++++++++++++++++++++++++++------------- 4 files changed, 53 insertions(+), 22 deletions(-) diff --git a/apps.json b/apps.json index 1e2612fce..c8e614625 100644 --- a/apps.json +++ b/apps.json @@ -500,9 +500,9 @@ { "id": "speedo", "name": "Speedo", "icon": "speedo.png", - "version":"0.04", + "version":"0.05", "description": "Show the current speed according to the GPS", - "tags": "tool,outdoors,gps", + "tags": "tool,outdoors,gps,b2", "storage": [ {"name":"speedo.app.js","url":"speedo.js"}, {"name":"speedo.img","url":"speedo-icon.js","evaluate":true} diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 99f6d0c73..c33acd8ad 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -8,6 +8,7 @@ function redraw() { m.draw(); drawMarker(); if (WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { + g.flip(); // force immediate draw on double-buffered screens - track will update later g.setColor(0.75,0.2,0); WIDGETS["gpsrec"].plotTrack(m); } diff --git a/apps/speedo/ChangeLog b/apps/speedo/ChangeLog index 35cef4520..91df52211 100644 --- a/apps/speedo/ChangeLog +++ b/apps/speedo/ChangeLog @@ -3,3 +3,4 @@ 0.03: Use offscreen buffer (not doublebuffer) Use 'locale' to get internationalised speed 0.04: Start GPS after loading app, just in case widgets affect it (#449) +0.05: Use Layout lib for Bangle.js 2 compatibility diff --git a/apps/speedo/speedo.js b/apps/speedo/speedo.js index 174702d71..1fcb16020 100644 --- a/apps/speedo/speedo.js +++ b/apps/speedo/speedo.js @@ -1,33 +1,62 @@ -var buf = Graphics.createArrayBuffer(240,120,1,{msb:true}); -var lastFix = {fix:0,satellites:0}; +var Layout = require("Layout"); +var layout; + +var lastFix = {fix:-1,satellites:0}; + +function speedoImage() { + return require("heatshrink").decompress(atob("kkdxH+ABteAAwWOECImZDQ2CAQglUD4us2fX68ymQDB1omFESWtDgIACEYYACrolPBwddmWIEZWsmVWJYgiLwXX2YcB1gdDq+BAodWGIWsEhQiDRAWBmQdEAAhGBroFC1ojMC4etERIlDAggkHNIgAWSYYjFVwNWGwgAP5KkBEYoFC1ihBagwAL5W72vKJAxpExCiDABnQ4W12vD6AHBEYxnT4YhB3ghCSIhqDe4SIP3giBM4LfFEYpiMDoQhC3fDCA7+DfBwiCAARmFAAmtEYlYagMywISHEQhEId4UyEYleqwABEZBHERQwABroZBq5rR6BGLNZKzMAAPKRZKzJr2tfaAAKxD7CfgRsD1g1GAAwME2YGDwQjFNgOzwMyCwuCwIAEBg0yHoKODEYmCcYNWCwutAAuzBgg4BCwJGEEgj7JV5r7BIwgjEWrDVCEQYkCWgYAWNYIjF/z8awQfD")); +} + function onGPS(fix) { + if (lastFix.fix != fix.fix) { + // if fix is different, change the layout + if (fix.fix) { + layout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Speed" }, + {type:"h", c: [ + {type:"img", src:speedoImage, pad:4 }, + {type:"txt", font:"35%", label:"--", fillx:true, id:"speed" }, + ]}, + {type:"txt", font:"6x8", label:"--", id:"units" }, + {type:"h", c: [ + {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, + {type:"txt", font:"6x8", pad:3, label:"Satellites" } + ]}, + ]},[],{lazy:true}); + } else { + layout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Speed" }, + {type:"img", src:speedoImage, pad:4 }, + {type:"txt", font:"6x8", label:"Waiting for GPS" }, + {type:"h", c: [ + {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, + {type:"txt", font:"6x8", pad:3, label:"Satellites" } + ]}, + ]},[],{lazy:true}); + } + g.clearRect(0,24,g.getWidth(),g.getHeight()); + layout.render(); + } lastFix = fix; - buf.clear(); - buf.setFontAlign(0,0); - buf.setFont("6x8"); - buf.drawString(fix.satellites+" satellites",120,6); + if (fix.fix) { + print(fix.fix); var speed = require("locale").speed(fix.speed); var m = speed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units var txt = (fix.speed<20) ? fix.speed.toFixed(1) : Math.round(fix.speed); - var value = m[1], units = m[2]; - var s = 80; - buf.setFontVector(s); - buf.drawString(value,120,10+s/2); - buf.setFont("6x8",2); - buf.drawString(units,120,s+26); - } else { - buf.setFont("6x8",2); - buf.drawString("Waiting for GPS",120,56); + layout.speed.label = m[1]; + layout.units.label = m[2]; } - g.reset(); - g.drawImage({width:buf.getWidth(),height:buf.getHeight(),bpp:1,buffer:buf.buffer},0,70); - g.flip(); + layout.sat.label = fix.satellites; + layout.render(); } g.clear(); -onGPS(lastFix); +onGPS({fix:0,satellites:0}); +onGPS({fix:1,satellites:3,speed:200}); // testing Bangle.loadWidgets(); Bangle.drawWidgets(); Bangle.on('GPS', onGPS); -Bangle.setGPSPower(1); +Bangle.setGPSPower(1, "app"); From 68cc9fbd40d0f80ad0309caa5f8133aada5c6ed4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 15:39:44 +0100 Subject: [PATCH 3/8] oops - remove debugging --- apps/speedo/speedo.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/speedo/speedo.js b/apps/speedo/speedo.js index 1fcb16020..2e729c114 100644 --- a/apps/speedo/speedo.js +++ b/apps/speedo/speedo.js @@ -41,8 +41,7 @@ function onGPS(fix) { } lastFix = fix; - if (fix.fix) { - print(fix.fix); + if (fix.fix && isFinite(fix.speed)) { var speed = require("locale").speed(fix.speed); var m = speed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units var txt = (fix.speed<20) ? fix.speed.toFixed(1) : Math.round(fix.speed); @@ -54,7 +53,7 @@ function onGPS(fix) { } g.clear(); onGPS({fix:0,satellites:0}); -onGPS({fix:1,satellites:3,speed:200}); // testing +// onGPS({fix:1,satellites:3,speed:200}); // testing Bangle.loadWidgets(); Bangle.drawWidgets(); From 300ed35bcac618b96a7baca7dd994e3cc117958f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 12 Oct 2021 17:08:45 +0100 Subject: [PATCH 4/8] remove bangle.js banner --- index.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/index.html b/index.html index e1c195f7d..a5ae7bff0 100644 --- a/index.html +++ b/index.html @@ -40,10 +40,6 @@ -
- -  Bangle.js 2 is now on KickStarter!  Check it out here -
From c795b5e3c577fa37bb322ac4735a5df584968442 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 16:22:49 +0100 Subject: [PATCH 5/8] Add menusmall for small menus on Bangle.js 2 Updated about with new images --- apps.json | 13 ++++- apps/about/ChangeLog | 1 + apps/about/app.js | 2 +- apps/menusmall/ChangeLog | 1 + apps/menusmall/app.png | Bin 0 -> 619 bytes apps/menusmall/boot.js | 121 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 apps/menusmall/ChangeLog create mode 100644 apps/menusmall/app.png create mode 100644 apps/menusmall/boot.js diff --git a/apps.json b/apps.json index c8e614625..c0923e50d 100644 --- a/apps.json +++ b/apps.json @@ -67,7 +67,7 @@ { "id": "about", "name": "About", "icon": "app.png", - "version":"0.08", + "version":"0.09", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "tags": "tool,system,b2", "allow_emulator":true, @@ -3572,5 +3572,16 @@ "data": [ {"name":"score.json"} ] +}, +{ "id": "menusmall", + "name": "Small Menus", + "icon": "app.png", + "version":"0.01", + "description": "Replace Bangle.js 2's menus with a version that contains smaller text", + "tags": "b2,bno1", + "type": "boot", + "storage": [ + {"name":"menusmall.boot.js","url":"boot.js"} + ] } ] diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index 62e8d0126..ccc80148c 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -6,3 +6,4 @@ 0.06: Actual pixels as of 12 Jun 2020 0.07: Pressing a button now exits immediately (fix #618) 0.08: Make about (mostly) work on non-240px screens +0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021 diff --git a/apps/about/app.js b/apps/about/app.js index 43b45010b..28a292376 100644 --- a/apps/about/app.js +++ b/apps/about/app.js @@ -32,7 +32,7 @@ g.setFontAlign(0,-1); g.flip(); // Pixel chooser image -g.drawImage(require("heatshrink").decompress(atob("+FQgl+xnu8AIBwGQgHuAoN3gF/hcLgEHu943G3hwUCDwIBCAAV3uEAhoBBhsO90OgHgoACBh0IhP5AAQXBg8H8Hw+GwEAXn4AECxGAh0MEAOeJAMP3+/huIG4cMg1mMog8BhnsAQIBC///J4MN6HcBIOIAAPs8Hl9nM5gcB0Hg852BAIMAI4YACIIIACh8AKAcAvA6D7vd7wTBTYJ3B9e+hEAhA4CyHuy8HXw29NgIABx+ASQKsBYgR3DgHQCIXMsEAAIOZyGZzx3Dh/A57IDPoXN4HNHwQoB9wAByDvBO4LhDOwR4Fd4cP/4oB0DWCd45VCgFFAYPuO4QACgEed4PweAILBN4NpwEMXILvBO4bvD/f/d4cPCYJ1BAAKSCzp3E/hNBJwPziEP+H8hrvD9DtC5MJd4RTBGoLvBhe7BQJSBAAeAI4IoCO4T2Ch8N6DvDeAPgqFQd48MiB3BE4cI/AvC5ns4AKCdgQAD//wUwMMhhgBO4Nmd4xED57vD+EwFgKTCYoON/+v////OZwGXgF55vQI4TaBEQRxB6Hw7DRCAAPgO44ACKYlFoB3CHIcAiEAi93I4JpCdARmBd4IAFd4QAE4HA5//hh1BAIIPByA5BEQUM/n8O4TzCAAQtBhvd/X8d4YYBvwOBO4LvBYIoKBh/YewfA6B3DLoP/d4JXGABMBiKkEAAwKH9LyFO4fwOoR3Dd4TDD5/AJQcwDgcO9zvC1vd7ocBxuAvh3CuEHh5jCEoOPgHf/53CGgMAoGgbgX/CgJZEAIYAB5HIbxRCBAYULhZfBAAMA/GA/47Bd44ABh4CBg1mg8A3YAB3vtO4cMWxvG5vdZYWIw8AvPQd4NwRwUwAYIlBhsNGoR3CqB3BIAR4BFAXHAIg/CRAIDBIgtHHIR3D3ZhCZYXwwBrCOAXP5n855kNO4OABIyxCHYcDmdutOZA4VAAYUNqB0DAAQfDKIVms3AAgJ3BhBMBJwgAHhi7DDIQABgl9CIrvCeAJ3JABPM4AoBhqbDIgI0CMQfdOgR3E5nG5MzIAIBBAQIABwA5BgUgkEiEAe7hwECtgCB2B3BbwMJ9OeyBLIh3gFATvCPITuDhoCEgFVqq0B//w///MQWIbYJkFAAIjBEoR3DCoOA8A3CYAOvh/wE4LvEKoLvCoEE/7xDAAy/C2G+gw2DNQ2e9I0DBgxIBxGAWgS1DAAfd7pYE6BrBWwUIh2OAwLcGNQOA5jbCd4gACO4OgAgMHu4aBDokKgGIZ4LtBogABBgXw4HwhnL5lwEQXgd4V3BAIdBb4jvBO4/uIAfQKAJ3Gh7sC6/X7ogBUIL0BCwJ3ChHoO4QeCO4YHBXAQCBO4xQBJoYVBNwIBBhWq0HDwEOCIPuoDtIH4LuCAAOwMIR3BUATnIfgZ9BFYKHBd5nQKwICBBYWAPoJ3B///d5HM5jvD4DxBd4PQGwIBCHIMAeAQAEhQIC4GIboQABB4ifBW4ZeCAAO+EwJyBNQV2sDvCAAw6DAAaLFDgPwB4kNGIUJ5I3CcooAHO4OZzILH+AABFgcKeAa+Dd4p3Jd4+Ld4juChnMuz0DNQQABBAMOM4RqDuFwY4IUEGpLwB8DjB+ACBC4kJyAEC93uyAABDoxLB8HwFYTlBAIMMFIJlEQQJ3BCoIYBDgULCIpZCQ4YGBu5pBhn/u4UExB2BNoMO9wBB9xqDO4JeEEQKTFxABBwHJh3ex2P9+JxncZAJcBhMJO4mZO4dgXYRPCWQQzF4AABRIhHB5gACBYPeSAcAxOAAYICCdwK0CQYfc/I6BNYeAOwIAKBgMMQIIHC8EP///AoLkBgH4+AMCd4uoxWI1B3EAAOQzIDBswCBcIwAGBosOh7dChuNAYXvL4IPChGYgEP+AnFFox3B9vtO4LvBG47/CcofOPoYABWIIzCd4bYCB4NwgwFBd4IBBhI0Bh64CdwIHBdwJIBdAq7BEgTwDAgaxBAQMJhvdBALuBBAIQDeAMPh/ADQOH2+IhpeDfgbvDZAMP54ACMoJcCsAYC5nOV4OXcgQADd4QADs8HsF2g1QSwQAE+AcGRILhD/5cDE4ySDAgcGwGdxqvDd4j3BCIMP5iSCvfQcA6SB9wLBxBmBAAX/H4LkDSAcOFoOXgG72AgEd4IADqEFAQkL93rhzHCLgRIBCwbwCBgSFBOoLvBwEMg6XBBgIXDO4WJhuNHQyOF+DvCu+w2/QHoQACBYPt7qsCAAPgOQLvJAAeXhYdCZYIBBKYOAAII/I3yMB6CoBd4UDgbvDO44gBPIQ+BW4YADD4TvBOoI2FKA0A0AABAwfu9oOFOwPgAQLgBDoqwBAQIJFO5QACJIP/JQIDC+AVCO4LrBdgjuE24uB/7uFd4nwQob0DxEN7uIVxJ3E1R3Bh0ONoZ+E93gAIIPCVQ7fDgENAwRhC8AWBE4LvNAAXdaQsAmAHEO4QABhOZyB6BxB3BIg3QH4PQ/GIEIIAGQIMPTQMAhTuB1DaE9xNCAQTvCLgQACyDcDAAWIFARbD3ew9ycEKILvCABkMAAMAgZKCAAYlBHog8BAArqDO4mPx5bBuCTDCYWfh/P6AeFNgVwg7FEaITvC4BIB4B3HMgXdEwP/VwyCBO4QpB8A4GABiUCACB2COoIBCxH4wEM28A5hYCgEGszvC6F3NojKBuF3O4g+DPQPAAAWQ/7GB5nMH48D+AsCAAZDBF4YFCP4OAwD4GJgQCBhkJBYg8BBQJeBCgoABBAQCBNgIABd4UL5dwBASZQxGAKQcNAgPuQgJuBhnAz8A/kM553GFwMwO4PPhYfFTYjvBhAwBfAQABuA/GVAKKCTgxdR/GI+EM3gXCSIZeBg8Au7vEO4vQJgIAB+BTB8DvI//8FQLzBFYPL5YDBKQvQd5Z3FYoUPO4ZUBCQOf/5YDVoIFDIwNw+CUHBgQADEAOIUQnHg9wg+8714zUQCYbvBO4pDFXwRPBd4UOfwIzB5e7U4gAMO4R4BA4S4HhgiBO452DRQcP54ECyEJzJ3DkYXDGIIABRQTvCVoI0EhvcZghFCu4QBaQhKEdYIIFO4m7hewGIIRFEJAAFMYRQCRQZ3FXYUOCYXgd4cJhJ5BBIMOgE9mAYCxGAd4kAdwJ3DzIYBhu9OwbvDPwqTCcI8LAYU83gEC2B4BCoP85ns4Z6BO5UP/5lCAAz+DF4kPOoIBBC4eggGpdoJeBh3ggEDkLvGHROeDAMI7rFETYLVB3ew6AMDJwxKEgcAQgZ3D5//53Onk8O4a+BAIO62DvIKQMJKIMIZofQh3uOQIABR4X/BgLtBd4h3B4+QiF2gzjCeggAB5vmwGrd4YADSYMGy2Wd4jODd4j5EAA52BMwLvB53uO4MNTIUBgIRB1TOBAAJlBABkHJAXgHYI9CXAK6Cbwvghx3BAoNgAQI1BiMAw53ExJ3BAAUMhWQhptCd4T3DNwzGBhh5BhnMPoQEDBAnM5jvB4YIBFQUQ+EQd4plBFYZLCGgvQuDvCO4/gdoWZzIWDO4TvDGYIBBxGLw+HO4OKO4nA1WQ4GwFYMGBIML3a6I/53CgEOZxoAFO4MPgPxSwIAE93gSIQACqsFqEMF4MLeAbjFW4UA0ABCAAmOSwp3Dxe7hAiGha3BhOQhANCd4W/l7EDyGQzILBG4L4GP4Z3ODgKVBLgYhBL4MM/kA/LcBoHwoCAF6HueALdBh3+eAQABuEHcgKdFbgQBB4JtD3YAGgGwUoIiDAYTdB2Xy2DiCOgJ4BO4vQPYfMGQJdB5nM55rELYg9CA4fvO4cIxEAzJoBh4uBO4sLH4QOBC4X/PAMHAAQSCg/ud4UMAAYMCzOIwB2GO4oABJQbvFAAg3BHAPgFIKpDO4TgB//5zML1cAjUAhUQeAYABxAeC7qWDAALvCAAfAK4bbB92QAAJCFg93d4gGBAgSVBO4sJxbvI2EIBwPYAQOqVoYOBXAICDbI5YDO4cJzOZznMhQiCKYXQO4PMCQLCBLYorIABGQhp3CewTvDKIbvB54TBd453Hd4sNPQWZGITnDbQMPX4jLFABEONQMK3QGBFAR3Cg8Gd4JwRDYRwDUQJHC8HgCg2wd4XA+B3DeYO/BgMJxDvHhYMBd4l3agRCI7sNAAJEEFgLtCJ4nM5gbGhqRBg9gMgUPdoYBDfwIaExAABwDvEAIUOhIBBQAMJAYJ3D93Ah7RDAAO7+ARBEQgADBAbvBAoPuO48OW4R2FAAZ2GCoPOEAMLX4gDCNYTvB+Hw/8AuAIBAQScBDQQBBG4SoBF4OQAALvDO4ZQCd4eZOwbDCd4WZwEPGwQAL7p3BhOQDALMBQQPgNY/bO4R4DCAXx/DOGAAZnBAAMPd4JCBg4ABTgo4BAIPuEwXteAhlDJgOQd4UL3YMC/PwAgW52EJ/grDh//O4IpDeQ0A5iLBGIOwc4ZBB5nAG4OZm71BIoR3DhyrC/8QEgYiBu50BRIdwUwLvBAAp3DdwYlBEwS3CACLvGO4fM5h3CBQIpDgEIxAFDqoeCD4PdhvQRYOA//w8CsBMIML7zaCMoYACiMfF4PwX4OQuFwdgZ3B6BgBeAMAd4oRB3cLVgLFFhoEBha7Ch8PhAABAgJ4G+ycCd4vHvjBBVIZ5Ed4gABSoQxChsIdYWQ8HphOnVw4iCT4hQBO4TvDMYR3DdQVwBIR3ChcLPALvDHwXAFQQSCABXwPoP/sBCHO4SMCwBxEhAFB5ncDYIsMEoKFCa4YDC8DCBAQOZ5nMBILvIAoPdH4UPdgIBDSAQACJgMIHYzvDdoQADBweZzMAsx3CKgZIBIofAMAoMBwBKB6AMELAQCBIIIAKXRGZ/6YDIQNwg7vBO4buBABewAAK+DGh4AEz3pegZtBGwLyC4C1DOwj/DO5BYBhOQ3JCBh7LBgHuAAMA5vgvI9HVAKpCABDkBO4ztDgEEdwYAJd4TqDgwFEO4sP95ABO4TiBbYp4EKoncgEKAIPdRoMJCoJCDbYQjBDQPA8Fw0BQLAYyYBAAuIwAABg75DCAISE+DVBAQTvHsFgZQ2Zd45TCGwgIC8HuAQINDd4Wg0HQ5j4ByAaEHoTvFO4OwMouYmcwh//AIIKDYgYADh4IBPIMHg7dBgxoFCAMAwACBEIgACdwMGAwYWDhvLD4sOeoMHAwWJwDvIO4JxBeALvB5jdKABf4RAOImCNBKoVQAQOOG4YAC/5UBd4Y7BBYQ4Sd4sPj6OCLQIAHO4cIH4R2BPAwAChcOXYMMgYNHhpODAA7XBO4rvBMwMI9HoeYZBC5kM4AGBd4TPC4D5Cu+Zh5iB3ew2HP5nAdAbwBAocP+J3ChItCOIYtCAoYOBgHgOwUMdYIADBIOw8Fw6GQLwIAG6GZzLvKFYJ6Bd4arC7qRCO4cM5gABAwIyB8DvDCARKC+C8BAgP//4GBABEBiJ3BqAcCuF3O4l3AwgAF4AABIQJ3Ch7wDyYIB1MK7gOCYwOQDgcMNYP/NwQMCyDtBBAQHBhv9/p3FOwTZBXQcJx3ugF3uEHvKnDO4LvDdQYADL4kP81wdA14KQmwcoq3CAQP8BYfweATvCyGQ6EMI4J3Bd5UAhQEDxEIdoOgO4MPDQJ3GMIPILQhEB8BXCJQR3EGpIAFh/g8AtCLwQlBHoIgCAQbwFPQcAggLEd4SUB6ARBuF96EAhML3YABDYMJCwQwCNYWAAQJVB7vw/oaBO4Y0B5iuD4+Qhx3Kh4DCWoIGBh7tCAgIUE+HuAYJ3D/8A7iTDhgeCegQAEBIdEoBoB9IIDO4PcDQNwuDvD2CaC4HACALuEd4iRB7vzO4JTBg5JCeAXohEMvLvGAgMD//yOALVBBgIDCAA8OBYLvDAAVQ+ABBcooBBeQ54CggABEgKZCQYgABO4QXDO4wAJdQMN7vddwOIg93XIXMh3gwDuBLgQ3CNoJdB+Hw/7iChnsFIkNhsMHoUOCAJ3BegQABgtVNQwnBAYMLWYIADNgVAOwNAd4UN5pfFKwR3GgEJgBkBLIX/VoKoCXQgAHB4QAFOAPwLYIBBO4QDBAIIjBSIPMDYxyDhaCBb4zvJ9wAE2C4BeAKlFO40AtvM5wdBO4O7fgg+BH4JJCM5ByEhjjEAA4KBBg4XCh//UoRsBNoXdPIWw2HQ2G9BAIYBhcJYYIFBD4TRCAAiWDO4sAyALCUgZ3DAA94vEO70AzOQK4JmH6BfEhvdFAUDmEzmDkCAAe72BTBKosHu93VYIAENwKOBd4R6CVYXA2GQgyLCfhTvHLYJ3Bd5IAD997SoNwhCJDEgPuCIn/MwItBAQR3BhoWCOgIBBAA2q0BaBKRLvCGggABCZTqEAwsIDojvGaYTvGAA0Ph33uELg94BYjKECIP/boMNAwPe6HMd4Q8BxGAAIKFBeAgIBh2OMoXgcYIAJ5jvCfQvdeIQANh7vLGRbvEvOQW4JeBwGA5jLG/+IMgXtOwImHmDvFyB5ExAkCIQIbCNYNwg93hGIgHA4CIBg4gETYdAA4SHBEAIXBAIIRCC4h3EgyOKhi6CBIsIaIICCO4cIQYP/d4S8B9x3HmZ4BIIcM/IMDd4sNDIsHg6uBO4QJCeAl3AoJiBRIUO9wLBYoJOBAAOwPAoAD8C2EAAY8BVIJEC7oPHwBBEbwQmEaYXnSgwAGHAojFHwbuBd4QHB5iBEGwzaCN4MMCQTvF34qFhyDCO4MJ/kAx2wBAP8hvQ5h2CPoLXD9ns8GIwEMKYcLeAR2EJooAHXAR3CDQMMAATvFh1w87vCLobuDAIJ3EXwaJBxBIBdwKSCh5CCu4ZBAAMIzOAO4h/CgxxBPAJ2BL4XQhoGBYxI/F9x4BDIPgEwUA3YABNwToDyB4B2CvCACihGg8GKwLvCxjvGVgVwTYIYDBgIYBd4Z3Cd4JxBOALwD7tOMYQ3EUAMJeAQKE9ylCqA4CNQIACIQcM/IaBAAIZCgjADJANgAIQAIuEDmEwmZPBDIsM5iPKO4tAgGQMIbvEAAMOAATuCBATvCg93uB3BNAQAEhzvDmDdEAgLuEAALuBd5JABwFng53JdwsIWINwCYuIMAQACQAV3AAJBCHoZ3EBQTvB7vQc4UOhqlDd4R1BO4X/O44FEfgLvEO4JuHQIQoBd4Z3Du5jBh8PdwwDCmDBB8BKEDwYfCA4bNBSQ+IhMJhSWBACp3CAoSfBIoXuCpLvH5n5eASQBSIuIaIMPvIGBh/wE5J3Bd4RlCLoeIBQOIO5sIO4WoFQ7xBdgICBhrdFuAhC/4ABA4IABDotm5nMgBXBhe7gG7dwSrH8AABaAgBBg6gBABGgAwruEdYQDCAoX8HgJ3CAAnwd4qLD1orGAAbDFAAUP/4rBP4J3E5/8s3uO4IAIwB7CFQgrFO4QoBGw6aB1QoJbIKiBNwR3C4HAhhABJYkP94UB6GQD4vbTgXuAATJC8BABYgwAHeoI1Bhh3DQwIABoBNDhbwINAZ3EGgpUBh8LmfuYhRxBhg7BhgIC/gDCg8HgGIFIRGBA4IAGd4hxCgF3uB3GhB3IhOZFALvC5h3DoFPgjkB7sA2AcCHYkPSYVwYokOKIbvF126AoNEgigB9RHCUAJ1BdARsCewVwwF4WAYvBMoI/Cu4zBxwGB3cL2BxBFAJNBO4v3+/wVAOQJYJNChP5c4sDgEwgGEwB3B93QJoUHNoICCXYb7BeAIADYYvA53u93qeAVAAAJWB1wRDd4wAEsEIHIMGs1mu4ABHQQCBhHIAoOwAALvDAoI3B9x3Cv9/CwPPyGN6ABBd4h3HppOBhzvCMoR2BAQKxBO4TvGIwQAD5nA8Hg92u1QuCAILwEd4Z3Hg0GgGIgB2BO4d2sw+Bd4mwAIJ3FEQqRCd48P/+QO4kAkQFCojGCRQLdDGwJwCDYJTBdxZlBgB2BA==")),0,y+8); +g.drawImage(require("heatshrink").decompress(atob("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")),0,y+8); g.drawString(NRF.getAddress(),g.getWidth()/2,g.getHeight()-8,true); g.flip(); diff --git a/apps/menusmall/ChangeLog b/apps/menusmall/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/menusmall/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/menusmall/app.png b/apps/menusmall/app.png new file mode 100644 index 0000000000000000000000000000000000000000..094ee447cd355a0a2fa4ba20b3708100d782a5de GIT binary patch literal 619 zcmV-x0+juUP)DL6JZd>pLf3wLK`SStkO#f5epGwg#H87L%>idD0m8ZY3QLK=9p8D0goOf zH@yf#+DIcF5`+@EX^|9di|Da}5;X}yySsV4ibyse6|=j~@3{NE!_33Z?92d!5JCtc zgb)%ygxi61E`J1|<WA%3s8cd0u&(V0t`|Ej=fw2`JW?%jMWKF zGFCDn`@Ppob=UaV2T%YCKmphadv+gCf9mRc(DwmRrT_(?0KVP_Tpz%9&H_vU3P1rU z00p1`6o3Ly0PX|04;X$HNaynMe|f*~{S(&TSD@g`UFZoRmbERjIMFrWZRi4?&0hT% zrnB0XS@c8^EML5W%K6CI8MIN*OZA7I+6O$jbWO~4n$h`gb85`sUw32SRg^ur50Hzo z89QXupdm71@E^4w_M)i1`RvI)K-3ydDa0)R-$uCJmWD|E8NBBjA!FM-RAlcC0DFjQ z4pil?v1uOoq7zhK?3WeUdoaY6`+9MAbL2i?Qn79(9zjFKCGQ{W<@!Be&H`FHye@t^ zulgLRYK?Bjx5JRw*|yY`hPJKNMidv&7&*>=uUw?btf?=eL=jNAz zZ1`cMwUUV&07?LaYRQ!Ha<3G)x!zfduQ^NcH4s9E;TMUolhx*FzTW@<002ovPDHLk FV1lfj3d#Tg literal 0 HcmV?d00001 diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js new file mode 100644 index 000000000..968f8866c --- /dev/null +++ b/apps/menusmall/boot.js @@ -0,0 +1,121 @@ +;//not entirely sure why we need this - related to how bootupdate adds these to .boot0 +E.showMenu = function(items) { + g.clear(1).flip(); // clear screen if no menu supplied + Bangle.drawWidgets(); + if (!items) { + Bangle.setUI(); + return; + } + var w = g.getWidth(); + var h = g.getHeight(); + var menuItems = Object.keys(items); + var options = items[""]; + if (options) menuItems.splice(menuItems.indexOf(""),1); + if (!(options instanceof Object)) options = {}; + options.fontHeight=14; + options.x=0; + options.x2=w-1; + options.y=24; + options.y2=h-12; + if (options.selected === undefined) + options.selected = 0; + var x = 0|options.x; + var x2 = options.x2||(g.getWidth()-1); + var y = 0|options.y; + var y2 = options.y2||(g.getHeight()-1); + if (options.title) + y += 15; + var loc = require("locale"); + var l = { + lastIdx : 0, + draw : function(rowmin,rowmax) { + var rows = 0|Math.min((y2-y) / options.fontHeight,menuItems.length); + var idx = E.clip(options.selected-(rows>>1),0,menuItems.length-rows); + if (idx!=l.lastIdx) rowmin=undefined; // redraw all if we scrolled + l.lastIdx = idx; + var iy = y; + g.reset().setFontAlign(0,-1,0); + g.setFontCustom(atob("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"), 32, atob("AwIGCAgICAMFBQYIAwYDBwcFBgYHBgYGBgYDAwYHBgcHBgYGBgYGBgYEBgYGBgYGBgYGBgYGBggGBgYEBwQGBwQGBgYGBgYHBgYGBgYGBgYGBgYGBgYGBgYGBgQCBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHCAYGBgAGBgYGAAYGBQYABgMGBgQABgYHBgAGBgYGBgYGBgYGBgYGBgYEBAYGBgYGBgYGAAYGBgYGBgYHBgYGBgYGBgYGBgYGBgYGBwcGBgYGBgYABgYGBgYGBg=="), 15); + + if (rowmin===undefined && options.title) + g.drawString(options.title,(x+x2)/2,y-14).drawLine(x,y-2,x2,y-2). + setColor(g.theme.fg).setBgColor(g.theme.bg); + iy += 12; + g.setColor((idx>0)?g.theme.fg:g.theme.bg).fillPoly([72,iy,104,iy,88,iy-12]); + if (rowmin!==undefined) { + if (idxrowmax) { + rows = 1+rowmax-rowmin; + } + } + var less = idx>0; + while (rows--) { + var name = menuItems[idx]; + var item = items[name]; + var hl = (idx==options.selected && !l.selectEdit); + g.setColor(hl ? g.theme.bgH : g.theme.bg); + g.fillRect(x,iy,x2,iy+options.fontHeight-1); + g.setColor(hl ? g.theme.fgH : g.theme.fg); + g.setFontAlign(-1,-1); + g.drawString(loc.translate(name),x+1,iy+1); + if ("object" == typeof item) { + var xo = x2; + var v = item.value; + if (item.format) v=item.format(v); + v = loc.translate(""+v); + if (l.selectEdit && idx==options.selected) { + xo -= 24 + 1; + g.setColor(g.theme.bgH).fillRect(xo-(g.stringWidth(v)+4),iy,x2,iy+options.fontHeight-1); + g.setColor(g.theme.fgH).drawImage("\x0c\x05\x81\x00 \x07\x00\xF9\xF0\x0E\x00@",xo,iy+(options.fontHeight-10)/2,{scale:2}); + } + g.setFontAlign(1,-1); + g.drawString(v,xo-2,iy+1); + } + g.setColor(g.theme.fg); + iy += options.fontHeight; + idx++; + } + g.setFontAlign(-1,-1); + g.setColor((idxitem.max) item.value = item.max; + if (item.onchange) item.onchange(item.value); + l.draw(options.selected,options.selected); + } else { + var a=options.selected; + options.selected = (dir+options.selected)%menuItems.length; + if (options.selected<0) options.selected += menuItems.length; + l.draw(Math.min(a,options.selected), Math.max(a,options.selected)); + } + } + }; + l.draw(); + Bangle.setUI("updown",dir => { + if (dir) l.move(dir); + else l.select(); + }); + return l; +}; From 541dbb4a9b4fc95b4ae63f0db98067c14069c1e6 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 16:34:32 +0100 Subject: [PATCH 6/8] fix lint error --- apps/menusmall/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js index 968f8866c..59e47b178 100644 --- a/apps/menusmall/boot.js +++ b/apps/menusmall/boot.js @@ -1,4 +1,4 @@ -;//not entirely sure why we need this - related to how bootupdate adds these to .boot0 +"";//not entirely sure why we need this - related to how bootupdate adds these to .boot0 E.showMenu = function(items) { g.clear(1).flip(); // clear screen if no menu supplied Bangle.drawWidgets(); From be34e2b00d7536535b1fb768b6d94a2d413ea3a3 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 17:14:10 +0100 Subject: [PATCH 7/8] new 'health' app for 2v11, improved bangle2 launcher --- apps.json | 19 +++++++++++-- apps/health/ChangeLog | 1 + apps/health/README.md | 38 +++++++++++++++++++++++++ apps/health/app-icon.js | 1 + apps/health/app.js | 60 +++++++++++++++++++++++++++++++++++++++ apps/health/app.png | Bin 0 -> 1104 bytes apps/health/boot.js | 38 +++++++++++++++++++++++++ apps/health/lib.js | 61 ++++++++++++++++++++++++++++++++++++++++ apps/launchb2/ChangeLog | 1 + apps/launchb2/app.js | 8 +++++- 10 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 apps/health/ChangeLog create mode 100644 apps/health/README.md create mode 100644 apps/health/app-icon.js create mode 100644 apps/health/app.js create mode 100644 apps/health/app.png create mode 100644 apps/health/boot.js create mode 100644 apps/health/lib.js diff --git a/apps.json b/apps.json index bebace661..439b7e1b2 100644 --- a/apps.json +++ b/apps.json @@ -13,6 +13,21 @@ ], "sortorder" : -10 }, + { "id": "health", + "name": "Health Tracking", + "tags": "tool,system,b2", + "icon": "app.png", + "version":"0.01", + "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", + "readme": "README.md", + "storage": [ + {"name":"health.app.js","url":"app.js"}, + {"name":"health.img","url":"app-icon.js","evaluate":true}, + {"name":"health.boot.js","url":"boot.js"}, + {"name":"health","url":"lib.js"} + ], + "sortorder" : -10 + }, { "id": "moonphase", "name": "Moonphase", "icon": "app.png", @@ -55,7 +70,7 @@ "name": "Launcher (Bangle.js 2)", "shortName":"Launcher", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "This is needed by Bangle.js 2.0 to display a menu allowing you to choose your own applications. It will not work on Bangle.js 1.0.", "tags": "tool,system,launcher,b2,bno1", "type":"launch", @@ -3578,7 +3593,7 @@ "icon": "app.png", "version":"0.01", "description": "Replace Bangle.js 2's menus with a version that contains smaller text", - "tags": "b2,bno1", + "tags": "b2,bno1,system", "type": "boot", "storage": [ {"name":"menusmall.boot.js","url":"boot.js"} diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/health/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/health/README.md b/apps/health/README.md new file mode 100644 index 000000000..0ba0d8228 --- /dev/null +++ b/apps/health/README.md @@ -0,0 +1,38 @@ +# Health Tracking + +Logs health data to a file every 10 minutes, and provides an app to view it + +**BETA - requires firmware 2v11** + +## Usage + +Once installed, health data is logged automatically. + +To view data, run the `Health` app from your watch. + +## Features + +Stores: + +* Heart rate (TODO) +* Step count +* Movement + +## Technical Info + +Once installed, the `health.boot.js` hooks onto the `Bangle.health` event and +writes data to a binary file (one per month). + +A library (that can be used with `require("health").readXYZ` can then be used +to grab historical health info. + +## TODO + +* **Extend file format to include combined data for each day (to make graphs faster)** +* `interface` page for desktop to allow data to be viewed and exported in common formats +* More features in app: + * Step counting goal (ensure pedometers use this) + * Calendar view showing steps per day + * Yearly view + * Heart rate 'zone' graph + * .. other diff --git a/apps/health/app-icon.js b/apps/health/app-icon.js new file mode 100644 index 000000000..d522d9a9a --- /dev/null +++ b/apps/health/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///8H5AYM7/5L/ACsBqtQAgMFqtABYcVqtVAgIDBqgLDAwITBDYNVrQiEAANQEQNVtWAFIYfCE4Xq0AuEAAdX1W0BZFe1XUHQgADvWrJogAE9WtBYl66ouD2oLEtQGBFwQQBBYgeBFwYjFA4QuCBYgfCFwYLCL4IICFwacCPwetEwYLCR4QJBFwbFCU4QhBFwbMDNAYuCHQQwFFwowFFwowFFwwwEFwzNGFwjxFFwowEFw7aFBQwwDFwwwEFwwwEFw4wDBRAwBFxAwCFxAwCFxIA/AB4A=")) diff --git a/apps/health/app.js b/apps/health/app.js new file mode 100644 index 000000000..cb8651f4c --- /dev/null +++ b/apps/health/app.js @@ -0,0 +1,60 @@ +function menuMain() { + E.showMenu({ + "":{title:"Health Tracking"}, + "< Back":()=>load(), + "Step Counting":()=>menuStepCount(), + "Movement":()=>menuMovement() + }); +} + +function menuStepCount() { + E.showMenu({ + "":{title:"Step Counting"}, + "per hour":()=>stepsPerHour() + }); +} + +function menuMovement() { + E.showMenu({ + "":{title:"Movement"}, + "per hour":()=>movementPerHour() + }); +} + +function stepsPerHour() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDay(new Date(), h=>data[h.hr]+=h.steps); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 6, + gridy : 500 + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + +function movementPerHour() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDay(new Date(), h=>data[h.hr]+=h.movement); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawLine(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 6, + ylabel : null + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + +Bangle.loadWidgets(); +Bangle.drawWidgets(); +menuMain(); diff --git a/apps/health/app.png b/apps/health/app.png new file mode 100644 index 0000000000000000000000000000000000000000..04f1fee5ebd50c744102fb878364858506b59c45 GIT binary patch literal 1104 zcmV-W1h4yvP)#2db4d?e4wiEO{}^ znxDEUsRm+)+1QLLsuUckw)3U> zPr)796h!-RdDRu;Ze-1Ft{!>r_{rl1-COPpvlo9=x@2%-qGHcC0uPt<^*fEg!?7cS zeE!y}C^Jy@1Y)P#MBmi`T))!b4sK8;HiIUao_Ouyzkq?<{`) z^B0!SDlJr9X*-_`4^v79%3CP7GPQ8~oPKy1a|3I4Gh#v(?EW=f-CQ%Oe6BJ)370{+ z0gj{=A9_jo*oX<)O^lvgY@6Yu%jeSJ;h)lhBm;k>0_1k^*RSQ{Sxk(+z8F&bXPT?`*nK6m(FF=w@N6zwb>N;(5u)3Zpr z-uiXjxMGV8G;wAu>FK29I#*G&y&N|wvfVbp!__h-!j^*do-W>6BPTWjPqaPcJ(AVH zB*A_RtC~2i_s_IMrMYT7->;*h=^?MoY2|ODo$e8RiHoYHPkRzcs%7UnCAdHIl=nZ$ zhZuw&-Gccz)l{I`;Cr#45~-!Df|yLkv{unW(*O7KNNovjk^00I}0!qD^Ws(Kfgi_(I?B=})pU)nou- zr-h;oGPK{>>oeO`8AZ>8y!UJ2so4O;4vVl}784m$;@Ob%Uabr30th)Di=ITGp7kY) zc&;9J8rZ>*w?Xif#!N)fl92Omy$Kp>fzV?;o~G}=huRdeG~~V02t&g?9CAKXyNQTp zA?NKz>o?^PhMW%sFJxX2tqeKqno+x1w}{YV4H--XD?{EJ&8pip0}yh$uskK?rO@N` zX4Y(~0SGy(1uM!XqL)L?Yt62A-V{5nh#g|z>y-=5Q { + // ensure we write health info for *last* block + var d = new Date(Date.now() - 590000); + + const DB_RECORD_LEN = 4; + const DB_RECORDS_PER_HR = 6; + const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24; + const DB_RECORDS_PER_MONTH = DB_RECORDS_PER_DAY*31; + const DB_HEADER_LEN = 8; + const DB_FILE_LEN = DB_HEADER_LEN + DB_RECORDS_PER_MONTH*DB_RECORD_LEN; + + function getRecordFN(d) { + return "health-"+d.getFullYear()+"-"+d.getMonth()+".raw"; + } + function getRecordIdx(d) { + return (DB_RECORDS_PER_DAY*(d.getDate()-1)) + + (DB_RECORDS_PER_HR*d.getHours()) + + (0|(d.getMinutes()*DB_RECORDS_PER_HR/60)); + } + + var rec = getRecordIdx(d); + var fn = getRecordFN(d); + var f = require("Storage").read(fn); + if (f) { + var dt = f.substr(DB_HEADER_LEN+(rec*DB_RECORD_LEN), DB_RECORD_LEN); + if (dt!="\xFF\xFF\xFF\xFF") { + print("HEALTH ERR: Already written!"); + return; + } + } else { + require("Storage").write(fn, "HEALTH1\0", 0, DB_FILE_LEN); // header + } + var recordData = String.fromCharCode( + health.steps>>8,health.steps&255, // 16 bit steps + health.bpm, // 8 bit bpm + Math.min(health.movement / 8, 255)); // movement + require("Storage").write(fn, recordData, DB_HEADER_LEN+(rec*DB_RECORD_LEN), DB_FILE_LEN); +}); diff --git a/apps/health/lib.js b/apps/health/lib.js new file mode 100644 index 000000000..791c4ce22 --- /dev/null +++ b/apps/health/lib.js @@ -0,0 +1,61 @@ +const DB_RECORD_LEN = 4; +const DB_RECORDS_PER_HR = 6; +const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24; +const DB_RECORDS_PER_MONTH = DB_RECORDS_PER_DAY*31; +const DB_HEADER_LEN = 8; +const DB_FILE_LEN = DB_HEADER_LEN + DB_RECORDS_PER_MONTH*DB_RECORD_LEN; + +function getRecordFN(d) { + return "health-"+d.getFullYear()+"-"+d.getMonth()+".raw"; +} +function getRecordIdx(d) { + return (DB_RECORDS_PER_DAY*(d.getDate()-1)) + + (DB_RECORDS_PER_HR*d.getHours()) + + (0|(d.getMinutes()*DB_RECORDS_PER_HR/60)); +} + +// Read all records from the given month +exports.readAllRecords = function(d, cb) { + var rec = getRecordIdx(d); + var fn = getRecordFN(d); + var f = require("Storage").read(fn); + var idx = DB_HEADER_LEN; + for (var day=0;day<31;day++) { + for (var hr=0;hr<24;hr++) { + for (var m=0;m{ if (app.icon) app.icon = s.read(app.icon); // should just be a link to a memory area }); +if (g.wrapString) { // FIXME: check not needed after 2v11 + g.setFont(font); + apps.forEach(app=>app.name = g.wrapString(app.name, g.getWidth()-64).join("\n")); +} function drawApp(i) { var y = 24+i*APPH-menuScroll; var app = apps[i]; if (!app || y<-APPH || y>=g.getHeight()) return; - g.setFont("6x8",2).setFontAlign(-1,0).drawString(app.name,64,y+32); + g.setFont(font).setFontAlign(-1,0).drawString(app.name,64,y+32); if (app.icon) try {g.drawImage(app.icon,8,y+8);} catch(e){} } From 8d808fa72cbde1909da0f00df3afa6c79f6500f2 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Thu, 14 Oct 2021 18:55:13 +0100 Subject: [PATCH 8/8] Chronowid README updates, screenshots, Pastel: leave space at bottom for Chronowid --- apps.json | 6 +++--- apps/chronowid/README.md | 8 ++++++-- apps/pastel/ChangeLog | 1 + apps/pastel/pastel.app.js | 8 ++++---- apps/pastel/pastel.settings.js | 4 ++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps.json b/apps.json index 0e73b5d9c..e49ab3b85 100644 --- a/apps.json +++ b/apps.json @@ -1421,7 +1421,7 @@ "icon": "chrono.png", "version":"0.01", "description": "Single click BTN1 to add 5 minutes. Single click BTN2 to add 30 seconds. Single click BTN3 to add 5 seconds. Tap to pause or play to timer. Double click BTN1 to reset. When timer finishes the watch vibrates.", - "tags": "Tools", + "tags": "tool", "storage": [ {"name":"chrono.app.js","url":"chrono.js"}, {"name":"chrono.img","url":"chrono-icon.js","evaluate":true} @@ -1562,7 +1562,7 @@ "icon": "app.png", "version":"0.03", "description": "Chronometer (timer) which runs as widget.", - "tags": "tools,widget", + "tags": "tool,widget,b2", "readme": "README.md", "storage": [ {"name":"chronowid.wid.js","url":"widget.js"}, @@ -3502,7 +3502,7 @@ "name": "Pastel Clock", "shortName": "Pastel", "icon": "pastel.png", - "version":"0.03", + "version":"0.04", "description": "A Configurable clock with custom fonts and background", "tags": "clock,b2", "type":"clock", diff --git a/apps/chronowid/README.md b/apps/chronowid/README.md index f422dd956..ec1d5dd46 100644 --- a/apps/chronowid/README.md +++ b/apps/chronowid/README.md @@ -5,11 +5,15 @@ The advantage is, that you can still see your normal watchface and other widgets The widget is always active, but only shown when the timer is on. Hours, minutes, seconds and timer status can be set with an app. -Depending on when you start the timer, it may alert up to 0,999 seconds early. This is because it checks only for full seconds. When there is less than one seconds left, it buzzes. This cannot be avoided without checking more than every second, which I would like to avoid. +When there is less than one seconds left on the timer it buzzes. + +The widget has been tested on Bangle 1 and Bangle 2 ## Screenshots -TBD +![](chrono_with_wave.jpg) +![](chrono_with_pastel.jpg) + ## Features diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index a0f660237..e0e967166 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -1,3 +1,4 @@ 0.01: First release 0.02: Display 12 hour clock as 12:xx not 00:xx when just into PM 0.03: Make it work with Gadgetbridge, Notifications fullscreen on a Bangle 2 +0.04: Leave space at the bottom for Chrono widget, set back option at first option diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index b97c02fc7..98f8af7f9 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -87,19 +87,19 @@ function draw() { // avoid flicker on a bangle 1 by comparing with previous minute if (mm_prev != mm) { mm_prev = mm; - g.clearRect(0, 30, w, h); + g.clearRect(0, 30, w, h - 24); } } else { // on a b2 safe to just clear anyway as there is no flicker - g.clearRect(0, 30, w, h); + g.clearRect(0, 30, w, h - 24); } // draw a grid like graph paper if (settings.grid && process.env.HWVERSION !=1) { g.setColor("#0f0"); for (var gx=20; gx <= w; gx += 20) - g.drawLine(gx, 30, gx, h); - for (var gy=30; gy <= h; gy += 20) + g.drawLine(gx, 30, gx, h - 24); + for (var gy=30; gy <= h - 24; gy += 20) g.drawLine(0, gy, w, gy); } diff --git a/apps/pastel/pastel.settings.js b/apps/pastel/pastel.settings.js index db7206dbb..2e4afadc8 100644 --- a/apps/pastel/pastel.settings.js +++ b/apps/pastel/pastel.settings.js @@ -26,6 +26,7 @@ E.showMenu({ '': { 'title': 'Pastel Clock' }, + '< Back': back, 'Font': { value: 0 | font_options.indexOf(s.font), min: 0, max: 4, @@ -50,7 +51,6 @@ s.date = !s.date save() }, - }, - '< Back': back, + } }) })