1
0
Fork 0

OpenSeizureDetector Widget

master
Gordon Williams 2020-08-07 12:06:58 +01:00
parent c4e62a3819
commit a8dc1dbb17
5 changed files with 67 additions and 0 deletions

View File

@ -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",

View File

@ -0,0 +1 @@
0.01: New Widget!

View File

@ -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.

View File

@ -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
};
})()

BIN
apps/openseizure/widget.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB