2021-11-18 06:48:11 +00:00
|
|
|
/*
|
2021-11-19 17:19:16 +00:00
|
|
|
* Requirements and globals
|
2021-11-18 06:48:11 +00:00
|
|
|
*/
|
2021-11-19 17:19:16 +00:00
|
|
|
const locale = require('locale');
|
|
|
|
var alarm = -1;
|
2021-11-23 07:21:41 +00:00
|
|
|
var hrmStr = "-"
|
2021-11-19 17:19:16 +00:00
|
|
|
|
2021-11-22 16:55:21 +00:00
|
|
|
var backgroundImage = {
|
2021-11-18 14:57:07 +00:00
|
|
|
width : 176, height : 151, bpp : 3,
|
2021-11-22 16:55:21 +00:00
|
|
|
transparent : 2,
|
2021-11-23 07:10:00 +00:00
|
|
|
buffer : require("heatshrink").decompress(atob("AEcEiFBASFADpETps06YCcEYXnz15ASBBJzVp0wCdEYU8+fPASHAIJCAdQf6DpoUIkGCATCDWIBCDDzANJAGaDC6BB9QYWAQf804CD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/QbhA9Qf6D2oMEiFAQfoyB6ZBKQeYyBzVgQf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6Dnz1586D+AGaDNAGaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qc8Bg8euPv337ASHwDQNz588+YCC5AlCjR6CARCDN+/fvoCV6AbBj158+eAQV4EwUTPQQCIQZcB859SQdkPQCyDpvaAWQbmYIBUDQC6DQAC8eQC6DQAC8XQf6D/AASAYQdCAYQf6DHAESDeAESD/Qf6D/Qf6DK+2LtmXQfu8FEiDb8BB9QYRA9QYZB+Qf6D/AAccuPHIPwA/AH4A/AH4AHyVJkhB+zVp0yD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6DlwCD/02QQf8kyVIkGChACeFAMo0WKAQOIC56/CQYQCi0kAgMv33794CUQYYChQYU9+/fvoCTviD/Qf6D/Qf6D/Qf6DLjSD/94="))
|
2021-11-22 15:33:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var iconPlanet = {
|
2021-11-22 18:02:27 +00:00
|
|
|
width : 50, height : 50, bpp : 3,
|
|
|
|
transparent : 5,
|
|
|
|
buffer : require("heatshrink").decompress(atob("23btoCD6PHjlx9oLGAQuGiVJkmSpIRK2lxEYQCDCJOGjEhEYNBwUI5drEw/xEYwCB8oRGDoMhwmSsAFBkGM237NZICGj15OgnaDoOGI4cgwUa5dv332EwdHEZACB8+evYRCtAdBEAQpDscs3379+9HAW8EZPHz158+WSQQjFwUYsMs2QjBEwPrSRZuCJQN5TAJuCEYkhwUS5cvJQRxCNxZKDOIXgJQkh0mYtMk2XLJQXv1u0EZSVDOIWsJQsSpMkyVJljgB9gmB7YjLOgtq4BKEsIjCAQNLlgCBt+9EZwCCj8sJQpxB00aJoYCB5cBEZ4CB+RKFJoeGjAjCoOGzBKaAQeGJQQFBwJKSsAjIcweSBwRKRjojKOgYFCxZKRtAaBjHrlm4FJUN3hKQi3ShAjB2XLAQQmI7dHJR97tsh9gjEAQLpHlu2+PnExvF23an3794mF2BKFm3btsevImMjwRB23v3wmB3xNF5BuDCIPb8+eEwOeExIRCtojCJo5uEEwRxBEwRuJHAdI+YmCTYlgJQIREtrjCEwLdHCIiYBhF7OgnJSQgmFjhxCOgiSDAQvSX4QmB90IkQRIX4gmCEZICDvwmCBY3QA"))
|
2021-11-22 15:33:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var iconGps = {
|
2021-11-22 18:02:27 +00:00
|
|
|
width : 50, height : 50, bpp : 3,
|
2021-11-22 15:33:42 +00:00
|
|
|
transparent : 2,
|
2021-11-22 18:02:27 +00:00
|
|
|
buffer : require("heatshrink").decompress(atob("pMkyQCFpH0BAwCJv/6CJ8l589CJ0kyf//wIDpVEChM8+/fBAdZ8QRIp++///0gIBlMkxI4IuZKB+/SKAPHzpKJ/YkB//pKAP2BYeXhIFDx88+fPvqYBnibEkmUAofv34lC/RQBBYdcmPCXIYjBEwPfvnzJoILBQoUlHAUuJQYmCDodw48cuBKGTA0WEYIEBJQ6YEQwMMuImBJQyYEkmZFAVkyVSJQ6YCyUcmPDjgmBTAJKETAlJiS4ETANPJQpxCJQtxTALgBEwnfvohBI4NZkmWpNlcAgAD/wzBEYaYCy8cJQiYEyIjCTAWS3wlGTAVIEwkerJKFTAkmOIclToK8GAAIPBIgImCufHyxxG59pEIS8DvfypMr968HEwOHEwfx8+cEYkpCIeSoiYByVf/uSkmTEQP7ZIiYDnl5AQNwBYgCGyOn38k2+2pIRKyVeuPPj1x4ccCJVKSgP/5cJA4NSExMps+cSoMMKAIVCCg7SBpd7TANZkmUHBMevPnjlwcwXCCJFEzYDBA4WWKIIRHpEw4+eNwUxEwKYIkVJk1IyIKFHA+DR4VcJQYCBJRBoCkxHBAgNkyyYKkmXEYaYMAQMSEYKYNAQOHEwnSfBYjBAgVaCJdJJSMkTAK8KYQyVKAQ4jBNxiYEcBCYJXIkgA="))
|
2021-11-22 15:33:42 +00:00
|
|
|
}
|
|
|
|
|
2021-11-23 08:43:24 +00:00
|
|
|
var iconHrm = {
|
2021-11-22 18:02:27 +00:00
|
|
|
width : 50, height : 50, bpp : 3,
|
|
|
|
transparent : 1,
|
2021-11-23 08:43:24 +00:00
|
|
|
buffer : require("heatshrink").decompress(atob("kmSpIC/AX4CT+PHjlxARfBkmGjFhAR2REZwCC7AjPAQIjQ48dw0//4ANsOB49/CJv8JQNjEh32JQN3BY/5AwpKLkhKQ8+eBIhKK/jZBJR/+vPnJR/JkmTJR3xJQN5JRPypMkz5uByfJk5KI/zXCFQMev/nC4JKIkhrBn4pB/+Sp5KJfwnnOIqVHSQS5CFgaVIDQPHj4FBOIJNCSo/9EAI/CFIJNCSo/njiSC/KYDcBH6IgQAFcBHx44RGcBYAHcBIAHJRAAJJRAAJJSrdEARfYsOGjACOngjP48EyQdHx04BAtkyTnCAQYsCDoILGAQ2OnfvCJ2TIgNwCJuSpHj335CJnxNYvBChU48ZKC3378gRJp6SGiQ4JkaSBJQP7EwIOEyA"))
|
2021-11-22 15:33:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var iconCompass = {
|
2021-11-22 18:02:27 +00:00
|
|
|
width : 50, height : 50, bpp : 3,
|
2021-11-22 15:33:42 +00:00
|
|
|
transparent : 2,
|
2021-11-22 18:02:27 +00:00
|
|
|
buffer : require("heatshrink").decompress(atob("pMkyQCDl//AAPSBYwCFv4RCAAOkCJNLCAgACCJm2rNn34FB+g1Jvny5cs2XPn///QRI9uWEYP2rNly5NHNYN82YjB/4mC5YmBOgkl//9y1bsuW/4CB/Nlz//9I4D3/8I4M8EAICB55NCL4g/BIgRKBAQtnL4lf+QdCI4YCD2Y4DSQPZtojHsuerI4Dv/flnzEZB3CHAJuB8ojIAQY4CNwJHI2XHTAY4B/4gJrGBAoSqBpf2EZMQmRxEv/5Nw9YyVCAoO+rf/0v/Nw/PjFB4ZxCn/+y7dBJQyNBkAIDz/6/7dBJQsYsMEhgsE//+7IjFsTYBwAIE/4ABEYs8uPEiFyF4gRBXIImEBAPSpAjDtuX//9+YmERgMcuODBAU9+xKCr68Ev4lBNwm//IJCnhxDDQPx4xuFJQhBDDQXwTwpKBSos8//HjlwYQyVG34aB2zCG//1Nw6SFAQTgD/JuD+wjFrbgCr/yMQI+B/lxEY08UgPpl4jCNwP+I4wCBUgOk3/8DoXxI44CBn/0yREDzx0EAQlndANJv4gJAQf3/VJkq8CJoZuGXIPpkg4BOIZuI5/9CII4BEZAmDNwIRBHAJxDNxH+CII4CSQW+NALgBtomBt5uCHAbjB2ZoCAQPyJQP/NwIRCkm//4gBIgP/SQn/CImSYALjDviSDQAYUDL4ImEEYYRGL4X/76PCI4P/SQYCFl4MBAAgRJEwYRPOgZrHpMgA"))
|
2021-11-18 06:48:11 +00:00
|
|
|
}
|
|
|
|
|
2021-11-22 15:37:48 +00:00
|
|
|
var iconAlarm = {
|
2021-11-22 18:02:27 +00:00
|
|
|
width : 50, height : 50, bpp : 3,
|
|
|
|
transparent : 1,
|
|
|
|
buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA="))
|
2021-11-22 15:37:48 +00:00
|
|
|
}
|
|
|
|
|
2021-11-21 12:35:47 +00:00
|
|
|
Graphics.prototype.setFontAntonioMedium = function(scale) {
|
2021-11-18 06:48:11 +00:00
|
|
|
// Actual height 18 (17 - 0)
|
2021-11-21 12:35:47 +00:00
|
|
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAf4Mf/sYAMAAAAAAfgAfAAAAAfgAeAAAAAAiAAj8H/4fyEAv8f/gfiAAgAAAAD54H98eOPHn8Hz8AhwAAAP8Af+AYGAYCAf+AP8MAB8AHwA+AD4AfAAcf4A/8AwMAwMA/8Af4AAAAAwGD8f/8f8MY/cfz4PD8AHMAAAfAAeAAAAAAAAP/+f//YADAAAQABYADf//P/+AAAAAANAAPAAfwAfgAPAANAAAAAAEAAEAA/AA/AAEAAEAAAAAAZAAfAAYAAAAIAAIAAIAAIAAAAAAAAAMAAMAAAAAAAAEAB8Af4H+AfwAcAAAAAP/4f/8YAMf/8f/8H/wAAAAAAEAAMAAf/8f/8f/8AAAAAAAAAHgcfh8cH8YPMf8MPwEAAAAAAOB4eB8YYMY4Mf/8Pn4AAAAAgAHwA/wPwwf/8f/8AAwAAgAAAf54f58ZwMZwMY/8Qf4AAAAAAP/4f/8YYMYYMff8HP4AAAQAAYAAYD8Y/8f/AfgAcAAAAAAAAPv4f/8YYMY8Mf/8Pn4AAAAAAP94f98YGMcMMf/8H/wAAAAAABgwBgwAAAAAABgABg/Bg8AAAAEAAOAAbAA7gAxgBwwASAAbAAbAAbAAbAASAAAAAxwA5gAbAAPAAOAAAAPAAfHcYPcf8Af4AHgAAAAAAAB/gH/wOA4Y/MZ/sbAsbBkb/MZ/sOBsH/AAAAAAMAP8f/4fwwf4wH/8AH8AAMAAAf/8f/8YYMYYMf/8P/4ADgAAAP/4f/8YAMYAMfj8Pj4AAAAAAf/8f/8YAMYAMf/8P/4B/AAAAf/8f/8YMMYMMYIMAAAAAAf/8f/8YYAYYAYYAAAAAAAP/4f/8YAMYIMfP8Pv8AAAAAAf/8f/8AMAAMAf/8f/8f/8AAAAAAf/8f/8AAAAAAAD4AB8AAMf/8f/4f/gAAAAAAf/8f/8A+AD/gfj4eA8QAEAAAf/8f/8AAMAAMAAMAAAf/8f/8f8AB/wAB8AP8P/Af/8f/8AAAAAAf/8f/8HwAA+AAPwf/8f/8AAAAAAP/4f/8YAMYAMf/8P/4AAAAAAf/8f/8YGAYGAf8AP8ABAAAAAf/w//4wAYwAc//+f/yAAAAAAf/8f/8YMAYMAf/8f/8DA8CAAPj4fz8Y4MeeMfP8HD4YAAYAAf/8f/8YAAQAAAAAf/4f/8AAMAAMf/8f/4AAAYAAf4AP/4AP8AP8f/4fwAQAAYAAf8AP/8AD8D/8f8Af8AD/8AD8f/8f8AAAAQAEeB8P/4B/AP/4fA8QAEYAAfAAP4AB/8H/8fwAcAAAAMYD8Y/8f/MfwMcAMAAAf/+f//YADYADAAAAAAfAAf8AB/wAH8AAMQACYADf//f//AAAAA"), 32, atob("BAUHCAcTCAQFBQgGBAYFBggICAgICAgICAgEBQYGBggNCAgICAcHCAkECAgGCwkICAgIBwYICAwHBwYGBgY="), 18+(scale<<8)+(1<<16));
|
2021-11-18 06:48:11 +00:00
|
|
|
}
|
|
|
|
|
2021-11-21 12:35:47 +00:00
|
|
|
Graphics.prototype.setFontAntonioLarge = function(scale) {
|
|
|
|
// Actual height 34 (34 - 1)
|
|
|
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAADwAAAAAeAAAAADwAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAD+AAAAH/wAAAP/+AAAf/+AAA//8AAB//4AAD//wAAD//gAAAf/AAAAD+AAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAB////gA/////AP////8D/////wfAAAA+DwAAADweAAAAeDwAAADwf////+D/////wP////8Af///+AAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAOAAAAADwAAAAAeAAAAAHgAAAAB/////wf////+D/////wf////+D/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAPwH/4AP+B//AH/wf/4D/+D4AB/9weAAf4ODwAP8BweAP/AOD///gBwP//wAOA//4ABwB/4AAOAAAAAAAAAAAAAAAAAAAAB8AA/gA/gAH/AP8AA/8D/gAH/wfAHAA+DwA4ADweAHgAeDwB8ADwf7/+H+D/////gP/9//8A//H/+AA/AH/AAAAAAAAAAAAAAAAAABwAAAAD+AAAAD/wAAAH/+AAAH/5wAAH/wOAAP/gBwAP/gAOAD/////wf////+D/////wf////+AAAABwAAAAAOAAAAABwAAAAAAAAAAAAAAAAAAeAD//4D/Af//Af8D//4D/wf//Af+DwPAADweB4AAeDwPAADweB///+DwP///weA///8DwD//+AAAA/8AAAAAAAAAAAAAAAAAAAAAA////AA/////AP////8D/////wfgPAB+DwB4ADweAOAAeDwBwADwf+PAA+D/x///wP+H//8A/wf//AAAA//gAAAAAAAAAAAAADgAAAAAeAAAAADwAAAAAeAAAD+DwAAP/weAA//+DwA///weB///8Dx//8AAf//wAAD//gAAAf/AAAAD/AAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAD/wf/wB//v//AP////8D/////weAPwAeDwA8ADwcAHAAeDwB8ADwf////+D/////wP/9//8A//H//AA/AD/AAAAAAAAAAAAAAAAAAAAAD//gfAA///D/AP//8f8D///j/weAA8A+DwADgDweAAcAeDwAHgDwf////+B/////gP////8Af///+AAP//4AAAAAAAAAAAAAAAAAAAAAAD4AfAAAfAD4AAD4AfAAAfAD4AAD4AfAAAAAAAAAAAAAA=="), 46, atob("Cg4QEBAQEBAQEBAQCQ=="), 39+(scale<<8)+(1<<16));
|
2021-11-18 06:48:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2021-11-19 17:19:16 +00:00
|
|
|
* Draw watch face
|
2021-11-18 06:48:11 +00:00
|
|
|
*/
|
|
|
|
var drawTimeout;
|
|
|
|
function queueDraw() {
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = setTimeout(function() {
|
|
|
|
drawTimeout = undefined;
|
2021-11-20 09:42:06 +00:00
|
|
|
draw(true);
|
2021-11-18 06:48:11 +00:00
|
|
|
}, 60000 - (Date.now() % 60000));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-11-20 09:42:06 +00:00
|
|
|
function draw(queue){
|
2021-11-18 06:48:11 +00:00
|
|
|
g.reset();
|
2021-11-18 14:57:07 +00:00
|
|
|
g.clearRect(0, 24, g.getWidth(), g.getHeight());
|
2021-11-18 06:48:11 +00:00
|
|
|
|
|
|
|
// Draw background image
|
2021-11-22 16:55:21 +00:00
|
|
|
g.drawImage(backgroundImage, 0, 24);
|
2021-11-18 06:48:11 +00:00
|
|
|
|
2021-11-22 18:12:50 +00:00
|
|
|
// Draw raster
|
|
|
|
for(var x=0; x<6; x++){
|
|
|
|
g.drawLine(115+x*10, 100, 115+x*10, 160);
|
|
|
|
}
|
|
|
|
|
|
|
|
for(var y=0; y<6; y++){
|
|
|
|
g.drawLine(110, 105+y*10, 170, 105+y*10);
|
|
|
|
}
|
|
|
|
|
2021-11-22 16:39:48 +00:00
|
|
|
// Draw symbol
|
|
|
|
var iconImg =
|
|
|
|
alarm >= 0 ? iconAlarm :
|
|
|
|
Bangle.isGPSOn() ? iconGps :
|
|
|
|
Bangle.isHRMOn() ? iconHrm :
|
|
|
|
Bangle.isCompassOn() ? iconCompass :
|
|
|
|
iconPlanet;
|
2021-11-22 18:02:27 +00:00
|
|
|
g.drawImage(iconImg, 115, 105);
|
2021-11-22 16:39:48 +00:00
|
|
|
|
2021-11-18 06:48:11 +00:00
|
|
|
// Write time
|
2021-11-18 14:57:07 +00:00
|
|
|
var currentDate = new Date();
|
|
|
|
var timeStr = locale.time(currentDate,1);
|
2021-11-18 06:48:11 +00:00
|
|
|
g.setFontAlign(0,0,0);
|
2021-11-21 12:35:47 +00:00
|
|
|
g.setFontAntonioLarge();
|
2021-11-22 15:33:42 +00:00
|
|
|
g.drawString(timeStr, 57, 57);
|
2021-11-18 06:48:11 +00:00
|
|
|
|
|
|
|
// Write date
|
2021-11-21 12:35:47 +00:00
|
|
|
g.setFontAlign(1,-1, 0);
|
|
|
|
g.setFontAntonioMedium();
|
2021-11-18 06:48:11 +00:00
|
|
|
|
2021-11-18 14:57:07 +00:00
|
|
|
var dayName = locale.dow(currentDate, true).toUpperCase();
|
|
|
|
var day = currentDate.getDate();
|
2021-11-22 15:33:42 +00:00
|
|
|
g.drawString(day, 133, 37);
|
|
|
|
g.drawString(dayName, 133, 57);
|
2021-11-21 12:35:47 +00:00
|
|
|
|
2021-11-22 16:39:48 +00:00
|
|
|
// Alarm within symbol
|
|
|
|
if(alarm > 0){
|
|
|
|
g.setFontAlign(0,0,0);
|
2021-11-22 18:02:27 +00:00
|
|
|
g.drawString(alarm, 115+25, 105+25);
|
2021-11-22 16:39:48 +00:00
|
|
|
g.setFontAlign(-1,-1,0);
|
|
|
|
}
|
2021-11-21 12:35:47 +00:00
|
|
|
|
2021-11-23 07:21:41 +00:00
|
|
|
// HRM
|
|
|
|
g.setFontAlign(-1,-1,0);
|
|
|
|
g.drawString("HRM:", 20, 104);
|
|
|
|
g.drawString(hrmStr, 60, 104);
|
|
|
|
|
|
|
|
// Draw steps
|
|
|
|
var steps = getSteps();
|
|
|
|
g.drawString("STEP:", 20, 124);
|
|
|
|
g.drawString(steps, 60, 124);
|
|
|
|
|
2021-11-18 06:48:11 +00:00
|
|
|
// Draw battery
|
|
|
|
var bat = E.getBattery();
|
2021-11-20 12:12:49 +00:00
|
|
|
var charging = Bangle.isCharging() ? "*" : "";
|
2021-11-23 07:21:41 +00:00
|
|
|
g.drawString("BAT:", 20, 144);
|
|
|
|
g.drawString(charging + bat+ "%", 60, 144);
|
2021-11-18 14:57:07 +00:00
|
|
|
|
2021-11-21 19:02:09 +00:00
|
|
|
|
2021-11-18 06:48:11 +00:00
|
|
|
// Queue draw in one minute
|
2021-11-20 09:42:06 +00:00
|
|
|
if(queue){
|
|
|
|
queueDraw();
|
|
|
|
}
|
2021-11-18 06:48:11 +00:00
|
|
|
}
|
|
|
|
|
2021-11-20 09:56:00 +00:00
|
|
|
/*
|
|
|
|
* Step counter via widget
|
|
|
|
*/
|
|
|
|
function getSteps() {
|
|
|
|
if (stepsWidget() !== undefined)
|
|
|
|
return stepsWidget().getSteps();
|
|
|
|
return "???";
|
|
|
|
}
|
|
|
|
|
|
|
|
function stepsWidget() {
|
|
|
|
if (WIDGETS.activepedom !== undefined) {
|
|
|
|
return WIDGETS.activepedom;
|
|
|
|
} else if (WIDGETS.wpedom !== undefined) {
|
|
|
|
return WIDGETS.wpedom;
|
|
|
|
}
|
|
|
|
return undefined;
|
|
|
|
}
|
2021-11-18 06:48:11 +00:00
|
|
|
|
2021-11-19 17:19:16 +00:00
|
|
|
/*
|
|
|
|
* Handle alarm
|
|
|
|
*/
|
|
|
|
var alarmTimeout;
|
|
|
|
function queueAlarm() {
|
|
|
|
if (alarmTimeout) clearTimeout(alarmTimeout);
|
|
|
|
alarmTimeout = setTimeout(function() {
|
|
|
|
alarmTimeout = undefined;
|
|
|
|
handleAlarm();
|
|
|
|
}, 60000 - (Date.now() % 60000));
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleAlarm(){
|
|
|
|
|
2021-11-20 09:42:06 +00:00
|
|
|
// Check each minute
|
|
|
|
if(alarm > 0){
|
|
|
|
alarm--;
|
|
|
|
queueAlarm();
|
|
|
|
}
|
|
|
|
|
|
|
|
// After n minutes, inform the user
|
|
|
|
if(alarm == 0){
|
2021-11-19 17:19:16 +00:00
|
|
|
alarm = -1;
|
|
|
|
|
|
|
|
var t = 300;
|
|
|
|
Bangle.buzz(t, 1)
|
|
|
|
.then(() => new Promise(resolve => setTimeout(resolve, t)))
|
|
|
|
.then(() => Bangle.buzz(t, 1))
|
|
|
|
.then(() => new Promise(resolve => setTimeout(resolve, t)))
|
|
|
|
.then(() => Bangle.buzz(t, 1))
|
|
|
|
.then(() => new Promise(resolve => setTimeout(resolve, t)))
|
|
|
|
.then(() => Bangle.buzz(t, 1));
|
|
|
|
}
|
2021-11-20 09:42:06 +00:00
|
|
|
|
|
|
|
// Update UI
|
|
|
|
draw(false);
|
2021-11-19 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Swipe to set an alarm
|
|
|
|
*/
|
|
|
|
Bangle.on('swipe',function(dir) {
|
|
|
|
// Increase alarm
|
|
|
|
if(dir == -1){
|
|
|
|
alarm = alarm < 0 ? 0 : alarm;
|
|
|
|
alarm += 5;
|
|
|
|
queueAlarm();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Decrease alarm
|
|
|
|
if(dir == +1){
|
|
|
|
alarm -= 5;
|
|
|
|
alarm = alarm <= 0 ? -1 : alarm;
|
|
|
|
}
|
|
|
|
|
2021-11-20 09:42:06 +00:00
|
|
|
// Update UI
|
|
|
|
draw(false);
|
2021-11-19 17:19:16 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
2021-11-23 07:21:41 +00:00
|
|
|
/*
|
|
|
|
* Measure heart rate
|
|
|
|
*/
|
|
|
|
Bangle.on('HRM', function(hrm) {
|
2021-11-23 07:26:37 +00:00
|
|
|
hrmStr = hrm.bpm;
|
2021-11-23 07:21:41 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
2021-11-19 17:19:16 +00:00
|
|
|
/*
|
|
|
|
* Stop updates when LCD is off, restart when on
|
|
|
|
*/
|
2021-11-18 06:48:11 +00:00
|
|
|
Bangle.on('lcdPower',on=>{
|
|
|
|
if (on) {
|
2021-11-20 09:42:06 +00:00
|
|
|
draw(true); // draw immediately, queue redraw
|
2021-11-18 06:48:11 +00:00
|
|
|
} else { // stop draw timer
|
|
|
|
if (drawTimeout) clearTimeout(drawTimeout);
|
|
|
|
drawTimeout = undefined;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Show launcher when middle button pressed
|
|
|
|
Bangle.setUI("clock");
|
|
|
|
|
2021-11-20 09:56:00 +00:00
|
|
|
// Load widgets - needed by draw
|
2021-11-18 14:57:07 +00:00
|
|
|
Bangle.loadWidgets();
|
2021-11-20 09:56:00 +00:00
|
|
|
|
|
|
|
// Clear the screen once, at startup and draw clock
|
|
|
|
g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear();
|
|
|
|
draw(true);
|
|
|
|
|
|
|
|
// After drawing the watch face, we can draw the widgets
|
2021-11-18 14:57:07 +00:00
|
|
|
Bangle.drawWidgets();
|