From 0541cc10cd724bd8cb685914a8b032aafd2dce13 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 13 Feb 2020 12:08:35 +0000 Subject: [PATCH] Add heart rate widget --- apps.json | 11 +++++++++ apps/whrm/ChangeLog | 1 + apps/whrm/widget.js | 53 ++++++++++++++++++++++++++++++++++++++++++ apps/whrm/widget.json | 4 ++++ apps/whrm/widget.png | Bin 0 -> 1777 bytes 5 files changed, 69 insertions(+) create mode 100644 apps/whrm/ChangeLog create mode 100644 apps/whrm/widget.js create mode 100644 apps/whrm/widget.json create mode 100644 apps/whrm/widget.png diff --git a/apps.json b/apps.json index 8915654fc..354180d09 100644 --- a/apps.json +++ b/apps.json @@ -319,6 +319,17 @@ {"name":"*hrm","url":"heartrate-icon.js","evaluate":true} ] }, + { "id": "whrm", + "name": "Simple Heart Rate widget", + "icon": "widget.png", + "version":"0.01", + "description": "When the screen is turned on, the widget turns on the heart rate monitor and displays the detected heart rate - can take 20s to get a reading.", + "tags": "health,widget", + "storage": [ + {"name":"+whrm","url":"widget.json"}, + {"name":"=whrm","url":"widget.js"} + ] + }, { "id": "stetho", "name": "Stethoscope", "icon": "stetho.png", diff --git a/apps/whrm/ChangeLog b/apps/whrm/ChangeLog new file mode 100644 index 000000000..4c21f3ace --- /dev/null +++ b/apps/whrm/ChangeLog @@ -0,0 +1 @@ +0.01: New Widget! diff --git a/apps/whrm/widget.js b/apps/whrm/widget.js new file mode 100644 index 000000000..3a1d5da09 --- /dev/null +++ b/apps/whrm/widget.js @@ -0,0 +1,53 @@ +(() => { + var xpos = WIDGETPOS.tl; + var width = 24; + WIDGETPOS.tl += width+2; + var currentBPM = undefined; + var lastBPM = undefined; + var firstBPM = true; // first reading since sensor turned on + + function draw() { + g.reset(); + g.setFont("6x8", 1); + g.setFontAlign(0, 0); + g.clearRect(xpos,15,xpos+width,24); // erase background + var bpm = currentBPM, isCurrent = true; + if (bpm===undefined) { + bpm = lastBPM; + isCurrent = false; + } + if (bpm===undefined) + bpm = "--"; + g.setColor(isCurrent ? "#ffffff" : "#808080"); + g.drawString(bpm, xpos+width/2, 19); + g.setColor(isCurrent ? "#ff0033" : "#808080"); + g.drawImage(atob("CgoCAAABpaQ//9v//r//5//9L//A/+AC+AAFAA=="),xpos+(width-10)/2,1); + g.setColor(-1); + } + + // redraw when the LCD turns on + Bangle.on('lcdPower', function(on) { + if (on) { + Bangle.setHRMPower(1); + firstBPM = true; + currentBPM = undefined; + draw(); + } else { + Bangle.setHRMPower(0); + } + }); + + Bangle.on('HRM',function(d) { + if (firstBPM) + firstBPM=false; // ignore the first one as it's usually rubbish + else { + currentBPM = d.bpm; + lastBPM = currentBPM; + } + draw(); + }); + Bangle.setHRMPower(Bangle.isLCDOn()); + + // add your widget + WIDGETS["hrm"]={draw:draw}; +})(); diff --git a/apps/whrm/widget.json b/apps/whrm/widget.json new file mode 100644 index 000000000..fbc51b789 --- /dev/null +++ b/apps/whrm/widget.json @@ -0,0 +1,4 @@ +{ + "name":"Heart Rate Widget", "type":"widget", + "src":"=whrm" +} diff --git a/apps/whrm/widget.png b/apps/whrm/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc07d6474a68433d2610723b1dcf85b80fde104 GIT binary patch literal 1777 zcmVgEM_r_S=>n|FG`Wd%7r%OY9)LN zxECk`OpxoK`hX**HvT%Nz2l-Me@(&rw9Q%+j{@bu=Ku{{1}=)Q&$MJu@uBX4+afSp zS6$|qvIThFO*ktw!kdOAKh6|5(pb4rWBw9httWr5(-8Bg#o?1zawag+5L^TNS)gQ^ zKvOX!$c8{$_nV2r;rd{!QtX(CKjj$D`j2$HovzbJCme35-Yl?t2EhOV3iZZtef19~ z{RLk^v1_LO#BlyL)KK+uy3Ujl7-rFnPDksi%fytkUcQtH%)_jz!44nDrZyCP269d}gFj{XzUn`Gd@v?R`pS;w{M_p> zo69OOmn@r3EkOQ~2M9RM#Fj)soIs?pav`Fg^Xkbguf$wZp2yt0LBaaby6Upndz^qR z#u}zy+M-?*W_bmwbUwy{vg!5n3sak{j=jVQDAX#i9*i&Dk1Cz-win-lQBd;DcrKGd zzU0O9^v(?}5B?bY5aPatq->foMOJ5E5rNvG`l&Qr<8bLL<^un4q9 zhCa(&2g<;BU{T(ZPK3DI3?O+Ky*yRXC|gKD>kAlPymwNzWI0$q^!X3bXWnyVY3jgS zyp)2qo)@)T5zjTT20oaoN z^vBwhQ%Gb_l9Im!>yZWke6=f4CGP*oEPoIH-PeQeKjq4%)`4ka25Vf~rk1=DNX#`( zU|c!-6b#4Stw)>Py$(P@Ay(~5jJxl_xN8A2bQ9;od7LW)$fws+>cCw3AZl)@>!-Fc zPCgyXiXg?m*+ucT*D#k?dC7m&9xMDuJkMBTeyI1RePCa|`SqG$qP87AfK|T=Uvmp+ zx6XCndmz#F+0$4xwHS-baR%L~X{~r9YHY{JPwan-g71DGU(1up=?L*1S>cA48QrvQ zn*7!F(qqRyjlCu9h3vsg&k-4wxbJIM8T->V#wQZ_Ag@6J9^$ZDX zt&9v~9}PtVrUubxqswVU5UZjJM6f%LxN7u#w4@g6JSw7x+q9>y zlD5uI3~`Ruf;M?x>IsLCR1l(!ld#n`-i_jnSBmcSPCY?auem8_fBDp3%?kM$S zri+4%$HwAtPnQx|3)le8O7W7A?vx4oP?;i#ti#~`JvvNjc@C=Y`DI99ZI$X{u#O$ z1NEblw$AK(h%C6>>pq4XS1d*J8^DqrP0uMYp7Dn}QvZxOAg3Bghmz3A)BYQ}LKIs_ zIICuX2(rU(-m1LaW3VWoxoSp22-5ZsP)