1
0
Fork 0
BangleApps/apps/cprassist/cprassist.js

80 lines
1.9 KiB
JavaScript
Raw Normal View History

2020-06-26 20:56:54 +00:00
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();