BangleApps/apps/kitchen/heart.kit.js

117 lines
2.9 KiB
JavaScript

(() => {
function getFace(){
const Y_TIME = 30;
const Y_ACTIVITY = 116;
let prevTime;
let prevBpm;
let toggle = 1;
let redrawHrmPower = true;
let intervalRefSec;
let img;
let hrmObject;
function log_debug(o) {
//console.log(o);
}
function init(gps, sw, hrm) {
img = require("heatshrink").decompress(atob("mEwwRC/ABf/+ADBh//BQgGB//AgYDBCAQWCA4QPCDAYSC//8n4EC4AiEAAo1EBZIeDAAn8BZoKHJAYL7L64LLTa6/DAAi/CKhDjGBZBIGIwQ8IHQQ8IHQYwHBQgwFFwgwGFwgwGFwowFBQwwDFwwwEFwwwEFw4wDBRAkBERAkCERIA/AAYA="));
prevTime = "-";
prevBpm = "-";
toggle = 1;
redrawHrmPower = true;
hrmObject = hrm;
intervalRefSec;
g.clear();
}
function freeResources() {
prevTime = undefined;
img = undefined;
}
function startTimer() {
draw();
intervalRefSec = setInterval(draw, 1000);
}
function stopTimer() {
if (intervalRefSec) { intervalRefSec = clearInterval(intervalRefSec); }
}
function onButtonShort(btn) {}
function onButtonLong(btn) {
log_debug("toggleHRM");
if (btn !== 1) return;
if (!Bangle.isHRMOn) return; // old firmware
hrmObject.toggleHRMPower();
prevBpm = '-';
toggle = 1; // ensure we draw the heart first
redrawHrmPower = true;
}
function draw() {
let d = new Date();
let da = d.toString().split(" ");
let time = da[4].substr(0,5);
if (time !== prevTime) {
prevTime = time;
g.setColor(0);
g.fillRect(0, Y_TIME, 239, Y_ACTIVITY -1);
g.setColor(1,1,1);
g.setFont("Vector",80);
g.setFontAlign(0,-1);
g.drawString(time, 120, Y_TIME);
}
let bpm = hrmObject.getBpm();
if (!Bangle.isHRMOn()) {
if (!redrawHrmPower) return;
redrawHrmPower = false;
g.setColor(0);
g.drawImage(img, 12, 132, {scale:2});
g.fillRect(120,120,239,239);
g.setColor(255,0,0);
//g.setColor(0xFFC0); // yellow
g.drawImage(img, 12, 132, {scale:2});
g.setFont("Vector",40);
g.setFontAlign(0,0);
g.setColor(1,1,1);
g.drawString("OFF", 180, 180);
return;
}
// draw the heart
if (++toggle % 2 === 0) {
g.setColor(0);
g.fillRect(12, 132, 108, 228);
} else {
g.setColor(255,0,0);
//g.setColor(0xFFC0); // yellow
g.drawImage(img, 12, 132, {scale:2});
}
// draw the bpm
if (bpm !== prevBpm) {
prevBpm = bpm;
g.setColor(0);
g.fillRect(120, 120, 239, 239);
g.setColor(1,1,1);
//g.setColor(0xFFC0); // yellow
g.setFont("Vector",52);
g.setFontAlign(0,0);
g.drawString(bpm, 180, 180);
}
}
return {init:init, freeResources:freeResources, startTimer:startTimer, stopTimer:stopTimer,
onButtonShort:onButtonShort, onButtonLong:onButtonLong};
}
return getFace;
})();