mirror of https://github.com/espruino/BangleApps
158 lines
3.7 KiB
JavaScript
158 lines
3.7 KiB
JavaScript
(() => {
|
|
function getFace(){
|
|
var intervalRefSec;
|
|
var buf;
|
|
var days;
|
|
var prevInfo;
|
|
var prevDate;
|
|
var prevTime;
|
|
var infoMode;
|
|
|
|
const INFO_NONE = 0;
|
|
const INFO_BATT = 1;
|
|
const INFO_MEM = 2;
|
|
const INFO_FW = 3;
|
|
const Y_TIME = 30;
|
|
const Y_ACTIVITY = 116;
|
|
const Y_MODELINE = 200;
|
|
|
|
function init(gps,sw,hrm) {
|
|
showMem("digi init 1");
|
|
days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday","Friday", "Saturday"];
|
|
prevInfo = "";
|
|
prevTimeStr = "";
|
|
prevDateStr = "";
|
|
infoMode = INFO_NONE;
|
|
g.clear();
|
|
showMem("digi init 2");
|
|
}
|
|
|
|
function freeResources() {
|
|
showMem("digi free 1");
|
|
days = undefined;
|
|
prevInfo = undefined;
|
|
prevTime = undefined;
|
|
prevDate = undefined;
|
|
showMem("digi free 2");
|
|
}
|
|
|
|
function showMem(msg) {
|
|
var val = process.memory();
|
|
var str = msg + " " + Math.round(val.usage*100/val.total) + "%";
|
|
//console.log(str);
|
|
}
|
|
|
|
function startTimer() {
|
|
draw();
|
|
intervalRefSec = setInterval(draw, 5000);
|
|
}
|
|
|
|
function stopTimer() {
|
|
if(intervalRefSec) {intervalRefSec=clearInterval(intervalRefSec);}
|
|
}
|
|
|
|
function onButtonShort(btn) {
|
|
if (btn === 1) cycleInfoMode();
|
|
}
|
|
|
|
function onButtonLong(btn) {
|
|
if (btn === 2) Bangle.showLauncher();
|
|
}
|
|
|
|
function getGPSfix() { return undefined; }
|
|
function setGPSfix(f) {}
|
|
|
|
function draw() {
|
|
var d = new Date();
|
|
var da = d.toString().split(" ");
|
|
var 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);
|
|
}
|
|
|
|
var day = days[d.getDay()];
|
|
var dateStr = da[2] + " " + da[1] + " " + da[3];
|
|
|
|
if (dateStr !== prevDate) {
|
|
prevDate = dateStr;
|
|
g.setColor(0);
|
|
g.fillRect(0, Y_ACTIVITY, 239, Y_MODELINE - 3);
|
|
g.setColor(1,1,1);
|
|
g.setFont("Vector",26);
|
|
g.drawString(day, 120, Y_ACTIVITY);
|
|
g.drawString(dateStr, 120, Y_ACTIVITY + 40);
|
|
}
|
|
|
|
drawInfo();
|
|
}
|
|
|
|
function cycleInfoMode() {
|
|
switch(infoMode) {
|
|
case INFO_NONE:
|
|
infoMode = INFO_BATT;
|
|
break;
|
|
case INFO_BATT:
|
|
infoMode = INFO_MEM
|
|
break;
|
|
case INFO_MEM:
|
|
infoMode = INFO_FW
|
|
break;
|
|
case INFO_FW:
|
|
default:
|
|
infoMode = INFO_NONE;
|
|
break;
|
|
}
|
|
drawInfo();
|
|
}
|
|
|
|
function drawInfo() {
|
|
let val;
|
|
let str = "";
|
|
let col = 0x07FF; // cyan
|
|
|
|
switch(infoMode) {
|
|
case INFO_MEM:
|
|
val = process.memory();
|
|
str = "Memory: " + Math.round(val.usage*100/val.total) + "%";
|
|
break;
|
|
case INFO_BATT:
|
|
str = "Battery: " + E.getBattery() + "%";
|
|
break;
|
|
case INFO_FW:
|
|
str = "Fw: " + process.env.VERSION;
|
|
break;
|
|
case INFO_NONE:
|
|
default:
|
|
col = 0x0000;
|
|
str = "";
|
|
break;
|
|
}
|
|
|
|
// check if we need to draw, avoid flicker
|
|
if (str == prevInfo)
|
|
return;
|
|
|
|
prevInfo = str;
|
|
//g.setFont("6x8", 3);
|
|
g.setFont("Vector",26);
|
|
g.setColor(col);
|
|
g.fillRect(0, Y_MODELINE - 3, 239, Y_MODELINE + 25);
|
|
g.setColor(0,0,0);
|
|
g.setFontAlign(0, -1);
|
|
g.drawString(str, 120, Y_MODELINE);
|
|
}
|
|
|
|
return {init:init, freeResources:freeResources, startTimer:startTimer, stopTimer:stopTimer,
|
|
onButtonShort:onButtonShort, onButtonLong:onButtonLong};
|
|
}
|
|
|
|
return getFace;
|
|
})();
|