forked from FOSS/BangleApps
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
|
const SETTINGS_FILE = 'cprassist.settings.json';
|
||
|
const SHORT_BUZZ_PERIOD = 80;
|
||
|
const LONG_BUZZ_PERIOD = 800;
|
||
|
|
||
|
Bangle.setLCDTimeout(undefined); // do not deaktivate display while running this app
|
||
|
|
||
|
let settings;
|
||
|
|
||
|
function setting(key) {
|
||
|
const DEFAULTS = {
|
||
|
'compression_count': 30,
|
||
|
'breath_count': 2,
|
||
|
'compression_rpm': 100,
|
||
|
'breath_period_sec': 4
|
||
|
};
|
||
|
if (!settings) {
|
||
|
const storage = require("Storage");
|
||
|
settings = storage.readJSON(SETTINGS_FILE, 1) || {};
|
||
|
}
|
||
|
return (key in settings)
|
||
|
? settings[key]
|
||
|
: DEFAULTS[key];
|
||
|
}
|
||
|
|
||
|
let counter = setting('compression_count');
|
||
|
|
||
|
function provideFeedback() {
|
||
|
let period = counter > 0
|
||
|
? SHORT_BUZZ_PERIOD
|
||
|
: LONG_BUZZ_PERIOD;
|
||
|
try {
|
||
|
Bangle.buzz(period, 1.0);
|
||
|
} catch(err) {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function drawHeart() {
|
||
|
g.fillCircle(40, 92, 12);
|
||
|
g.fillCircle(60, 92, 12);
|
||
|
g.fillPoly([29, 98, 50, 120, 71, 98]);
|
||
|
}
|
||
|
|
||
|
function updateScreen() {
|
||
|
const colors = [0xFFFF, 0x9492];
|
||
|
g.reset().clearRect(0, 50, 250, 150);
|
||
|
if (counter > 0) {
|
||
|
g.setFont("Vector", 40).setFontAlign(0, 0);
|
||
|
g.setColor(colors[counter%2]);
|
||
|
drawHeart();
|
||
|
g.drawString(counter + "", g.getWidth()/2, 100);
|
||
|
} else {
|
||
|
g.setFont("Vector", 20).setFontAlign(0, 0);
|
||
|
g.drawString("RESCUE", g.getWidth()/2, 70);
|
||
|
g.drawString("BREATHS", g.getWidth()/2, 120);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function tick() {
|
||
|
provideFeedback();
|
||
|
updateScreen();
|
||
|
if (counter == 0) {
|
||
|
var reset = function() {
|
||
|
counter = setting('compression_count');
|
||
|
clearInterval(interval);
|
||
|
interval = setInterval(tick, 60000/setting('compression_rpm'));
|
||
|
};
|
||
|
clearInterval(interval);
|
||
|
interval = setInterval(reset, setting('breath_period_sec')*1000);
|
||
|
}
|
||
|
counter -= 1;
|
||
|
}
|
||
|
|
||
|
interval = setInterval(tick, 60000/setting('compression_rpm'));
|
||
|
|
||
|
g.clear(1).setFont("6x8");
|
||
|
g.drawString(setting('compression_count') + ' / ' + setting('breath_count'), 30, 200);
|
||
|
|
||
|
Bangle.loadWidgets();
|
||
|
Bangle.drawWidgets();
|