mirror of https://github.com/espruino/BangleApps
117 lines
2.9 KiB
JavaScript
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;
|
||
|
})();
|