From a8dc1dbb17197fdeb3ee7fe1fc3b20e10ad36434 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 7 Aug 2020 12:06:58 +0100 Subject: [PATCH] OpenSeizureDetector Widget --- apps.json | 13 ++++++++++++ apps/openseizure/ChangeLog | 1 + apps/openseizure/README.md | 12 +++++++++++ apps/openseizure/widget.js | 41 ++++++++++++++++++++++++++++++++++++ apps/openseizure/widget.png | Bin 0 -> 2974 bytes 5 files changed, 67 insertions(+) create mode 100644 apps/openseizure/ChangeLog create mode 100644 apps/openseizure/README.md create mode 100644 apps/openseizure/widget.js create mode 100644 apps/openseizure/widget.png diff --git a/apps.json b/apps.json index a0af1f7a3..b5584b55c 100644 --- a/apps.json +++ b/apps.json @@ -2118,6 +2118,19 @@ {"name":"osgridref.img","url":"app-icon.js","evaluate":true} ] }, + { "id": "openseizure", + "name": "OpenSeizureDetector Widget", + "shortName":"Short Name", + "icon": "widget.png", + "version":"0.01", + "description": "[BETA!] A widget to work alongside [OpenSeizureDetector](https://www.openseizuredetector.org.uk/)", + "tags": "widget", + "type": "widget", + "readme": "README.md", + "storage": [ + {"name":"openseizure.wid.js","url":"widget.js"} + ] + }, {"id": "counter", "name": "Counter", "icon": "counter_icon.png", diff --git a/apps/openseizure/ChangeLog b/apps/openseizure/ChangeLog new file mode 100644 index 000000000..4c21f3ace --- /dev/null +++ b/apps/openseizure/ChangeLog @@ -0,0 +1 @@ +0.01: New Widget! diff --git a/apps/openseizure/README.md b/apps/openseizure/README.md new file mode 100644 index 000000000..10a3a8a79 --- /dev/null +++ b/apps/openseizure/README.md @@ -0,0 +1,12 @@ +# OpenSeizureDetector Widget + +A widget to work alongside [OpenSeizureDetector](https://www.openseizuredetector.org.uk/) + +This is currently just a test and is not ready for everyday use. + +When the widget is running it puts the accelerometer into 25Hz mode, and then +roughly every second it outputs 20 samples (bytes) of acceleration data as a notification +on BLE Service `"a19585e9-0001-39d0-015f-b3e2b9a0c854"`, characteristic `"a19585e9-0002-39d0-015f-b3e2b9a0c854"`. + +Each byte is 1/25th of a second, with a magnitude of acceleration. It is scaled +such that 1g is 64. diff --git a/apps/openseizure/widget.js b/apps/openseizure/widget.js new file mode 100644 index 000000000..f176d2884 --- /dev/null +++ b/apps/openseizure/widget.js @@ -0,0 +1,41 @@ +(() => { + function draw() { + g.reset(); + g.drawImage(E.toArrayBuffer(atob("GBiEBAAAAAABEREQAAAAAAAAAAAKmZkgAAAAAAAAAAAKmZkgAAAAAAAAAAAKkzkgAAAAAAACIQAKkzkgABIgAAAZmSAKPykgApmRAAApmZoqMjkiqZmSAAKZmZmZ8zmpmZmZIAKZmZmZMzmZmZmZIAEpmZmZkzqZmZmSEAACqZmZkjOZmZogAAAAApmZkjOZmSAAAAAAApmZn/mZmSAAAAACqZmZrymZmZogAAEpmZmZkzmZmZmSEAqZmZmZkjqZmZmZoAKZmZmamvmpmZmZIAApmZIan6mhKZmSAAAZmiAKkymgAqmRAAACIAAKkimgAAIgAAAAAAAKkimgAAAAAAAAAAAKmZmgAAAAAAAAAAAKmZmgAAAAAAAAAAABEREQAAAAAA==")), this.x, this.y); + } + + var accelData = new Uint8Array(20); + var accelIdx = 0; + //http://kionixfs.kionix.com/en/datasheet/KX023-1025%20Specifications%20Rev%2012.0.pdf + Bangle.accelWr(0x1B,0x01 | 0x40); // 25hz output, ODR/2 filter + Bangle.setPollInterval(40); // 25hz input + Bangle.on('accel',function(a) { + accelData[accelIdx++] = E.clip(a.mag*64,0,255); + if (accelIdx>=accelData.length) { + accelIdx = 0; + try { NRF.updateServices({ + "a19585e9-0001-39d0-015f-b3e2b9a0c854" : { + "a19585e9-0002-39d0-015f-b3e2b9a0c854" : { + value : accelData, notify : true + } + } + })} catch(e) {}; + } + }); + + NRF.setServices({ + "a19585e9-0001-39d0-015f-b3e2b9a0c854" : { + "a19585e9-0002-39d0-015f-b3e2b9a0c854" : { + value : accelData, + maxLen : 20, + readable : true, + notify : true + } + } + }); + + // add your widget + WIDGETS["openseizure"]={ + area:"tl", width: 24, draw:draw + }; +})() diff --git a/apps/openseizure/widget.png b/apps/openseizure/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0ecb772e87055473ab67f61c8553051d5265a8 GIT binary patch literal 2974 zcmV;P3t{w$P)hxIC}s93oA)P zK~!ko?OJ6Y3ZV~0dwby(AwI|TCw8S zj(hhW`vU-`%bYozHaV?Yy;_Q}unO>aHcP(v!tzs@@V!7Ffj5tJhseM{ zuH(1gwrM?o@hX<@ExUL0sPDT0 zj#5!+5Q}>d5^@_>R&1X`hrC+^0#PzWX^In@O~BK0GOk~L2!H>p=f8-mo;JqD9$Pv`SRNm6OhHZ2bb1O>3N%CXtH)p_fdEp<9$Je7(0IaQ9h>mW;r=K?J0R{+c*;0#b+nl#rTj$serCOS%QU+qd z0?x(C%0Vr`x-zb;e2fo1s6>B1fyTzi_}kxRgUM8lm_`YL4uAg}=Q(GMTsO(W5Ap_`QUJJ0@kme8IX|B_)Y ztdW`Nh7%|5WQ)aJPJVtx1g*3*fZ}o)k3}N?RngHmeYsra{frE+r})J%;9g#?L|NJM z;$>z=$9LZeU}9p(!BDWXGet&*7r0#I{pjeMz9NzTDlV7txU@8Yq5*(Zs;QBp+ix!#dt^A=wvmg}OVEcB-=Hz6)!;Bf`;^8`L z1-)4O##1o0EHy6fwsA&A!`Za7+1R*|t9MvYlqStm6fkWX0{{>Zz}7ijA|ts-OPh_% z%!adZakq_|o0p{y*Kyo_z}=laSW>bmGB#G~N)UZj+1cK3b!F<|5dtJh;NZbp2!*as zy`mcT#9dvP$jb5t&{q{3D|Ia?SrqB+&K@*)Dlr7uY;C_^w_}G(GD$L~?Ag?WjC%s?37;>5R2l?J%bd4A`shzzySsDP+qTt1ChH&9aUmgQ$jX{GG;+bFO=ZZ;?15TM zj2l8+t|^j|oKacX*>&t#)B4WNmAON@=+w~g`5KJT+A4R7h`4_9%o)GS#l;GCcz8Kv zvH_iNQgE;(0HCDgAr2m_#g9LB>!7^mJY}*0gol@-xLCpd>MOq=BOmlpzO=bwZ-cDNkq>!V}awmO4rCWE0yOpG<& ze}5+EbQ*$#OK|rtiI<_IBo{E5N+cxI?QUpT^4XBi1OPZW<%X(7CfH05CCX= zegUps>kMJBRG`yIOcYTRpjHFL#hqBZ*cv7#6Enr6(@C&cDqO$*a21~~0!=CnM0@+n z2T4hF$tfv@W1knt=maiaY=(=A8E7;Dzx>iQ5yyg*6jvlA)g5VXU->{P4FYYbLP{h- zf0oPTDkmqVo=nx)xzhoKg?s?&VQnLU&6}MN9BhN+?EI7UcI^MpV^{yQq_M!>CG-4VlAn3$-rbSW3RcUOSNW1+wQ#iVfSR(C{H)Qtc> zpKMP{^8|-uG-mjQhfhO(ep{1Fw*1Vfh0M$A3ewYC!`^v^J<6%55g+f2_;`El*;BUb zv(LP2930HA8W|A`?F&qxrsffxoXnoS_;`_wj0nc`>E>5I|J=)Z&z`bf@$vSEk9Qtb zZdlk9WMs64d3qL%UWsqtUWAU0mC{qE8gusUb3how#xgPHv`^zx^;O#x~jNZyBXWsGS_bA|J3J^W}oj-q?*>v^O|N zp|4Mc>C-3aJYpY`(bBRkH74eZ-+UuOPmcmsRZ4^Q56PBF7aQJEz6|B% z_2E_1AMc5WNYix