mirror of https://github.com/espruino/BangleApps
support fastload
parent
026778f656
commit
aa5442ab4c
|
@ -26,3 +26,4 @@
|
||||||
0.26: Use widget_utils.
|
0.26: Use widget_utils.
|
||||||
0.27: Report latest HRM rather than HRM 10 minutes ago (fix #2395)
|
0.27: Report latest HRM rather than HRM 10 minutes ago (fix #2395)
|
||||||
0.28: Battery Vref implemented correctly.
|
0.28: Battery Vref implemented correctly.
|
||||||
|
0.29: Support fastload.
|
|
@ -1,7 +1,8 @@
|
||||||
|
{
|
||||||
const TIMER_IDX = "lcars";
|
const TIMER_IDX = "lcars";
|
||||||
const SETTINGS_FILE = "lcars.setting.json";
|
const SETTINGS_FILE = "lcars.setting.json";
|
||||||
const locale = require('locale');
|
const locale = require('locale');
|
||||||
const storage = require('Storage')
|
const storage = require('Storage');
|
||||||
const widget_utils = require('widget_utils');
|
const widget_utils = require('widget_utils');
|
||||||
let settings = {
|
let settings = {
|
||||||
alarm: -1,
|
alarm: -1,
|
||||||
|
@ -18,7 +19,7 @@ let settings = {
|
||||||
};
|
};
|
||||||
let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
|
let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
|
||||||
for (const key in saved_settings) {
|
for (const key in saved_settings) {
|
||||||
settings[key] = saved_settings[key]
|
settings[key] = saved_settings[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -36,10 +37,10 @@ let cGrey = "#424242";
|
||||||
*/
|
*/
|
||||||
let lcarsViewPos = 0;
|
let lcarsViewPos = 0;
|
||||||
// let hrmValue = 0;
|
// let hrmValue = 0;
|
||||||
var plotMonth = false;
|
let plotMonth = false;
|
||||||
|
|
||||||
|
|
||||||
function convert24to16(input)
|
let convert24to16 = function(input)
|
||||||
{
|
{
|
||||||
let RGB888 = parseInt(input.replace(/^#/, ''), 16);
|
let RGB888 = parseInt(input.replace(/^#/, ''), 16);
|
||||||
let r = (RGB888 & 0xFF0000) >> 16;
|
let r = (RGB888 & 0xFF0000) >> 16;
|
||||||
|
@ -55,17 +56,17 @@ function convert24to16(input)
|
||||||
RGB565 = RGB565 | b;
|
RGB565 = RGB565 | b;
|
||||||
|
|
||||||
return "0x"+RGB565.toString(16);
|
return "0x"+RGB565.toString(16);
|
||||||
}
|
};
|
||||||
|
|
||||||
var color1C = convert24to16(color1);//Converting colors to the correct format.
|
let color1C = convert24to16(color1);//Converting colors to the correct format.
|
||||||
var color2C = convert24to16(color2);
|
let color2C = convert24to16(color2);
|
||||||
var color3C = convert24to16(color3);
|
let color3C = convert24to16(color3);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Requirements and globals
|
* Requirements and globals
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var colorPalette = new Uint16Array([//Used to change the color of the image if the user selects a color that is diffrent than the default.
|
let colorPalette = new Uint16Array([//Used to change the color of the image if the user selects a color that is diffrent than the default.
|
||||||
0x0000, // not used
|
0x0000, // not used
|
||||||
color2C, // second
|
color2C, // second
|
||||||
color3C, // third
|
color3C, // third
|
||||||
|
@ -84,73 +85,73 @@ var colorPalette = new Uint16Array([//Used to change the color of the image if t
|
||||||
0x0000 // not used
|
0x0000 // not used
|
||||||
],0,1);
|
],0,1);
|
||||||
|
|
||||||
var bgLeftFullscreen = {
|
let bgLeftFullscreen = {
|
||||||
width : 27, height : 176, bpp : 3,
|
width : 27, height : 176, bpp : 3,
|
||||||
transparent : 0,
|
transparent : 0,
|
||||||
buffer : require("heatshrink").decompress((atob("/4AB+VJkmSAQV///+BAtJn//5IIFkmf/4IGyVP/gIGpMnF41PHIImGF4ImHJoQmGJoIdK8hNHNY47C/JNGBIJZGyYJBQA5GCKH5Q/KAQAoUP7y/KH5QGDoQAy0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyDCKH5Q1GShlJChQLCCg5TCHw5TMAD35FAoIIkgJB8hGGv/8Mg8/+QIFp4cB5IRGBIIvI/4IFybyCF4wTCDp5NBHZZiGz4JBLJKAGk4JBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4"))),
|
buffer : require("heatshrink").decompress((atob("/4AB+VJkmSAQV///+BAtJn//5IIFkmf/4IGyVP/gIGpMnF41PHIImGF4ImHJoQmGJoIdK8hNHNY47C/JNGBIJZGyYJBQA5GCKH5Q/KAQAoUP7y/KH5QGDoQAy0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyDCKH5Q1GShlJChQLCCg5TCHw5TMAD35FAoIIkgJB8hGGv/8Mg8/+QIFp4cB5IRGBIIvI/4IFybyCF4wTCDp5NBHZZiGz4JBLJKAGk4JBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4"))),
|
||||||
palette: colorPalette
|
palette: colorPalette
|
||||||
};
|
};
|
||||||
|
|
||||||
var bgLeftNotFullscreen = {
|
let bgLeftNotFullscreen = {
|
||||||
width : 27, height : 152, bpp : 3,
|
width : 27, height : 152, bpp : 3,
|
||||||
transparent : 0,
|
transparent : 0,
|
||||||
buffer : require("heatshrink").decompress((atob("/4AB+VJkmSAQV///+BAtJn//5IIFkmf/4IGyVP/gIGpMnF41PHIImGF4ImHJoQmGJoIdK8hNHNY47C/JNGBIJZGyYJBQA5GCKH5Q/KAQAy0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyhCKH5Q1GShlJChQLCCg5TCHw5TMAD35FAoIIkgJB8hGGv/8Mg8/+QIFp4cB5IRGBIIvI/4IFybyCF4wTCDp5NBHZZiGz4JBLJKAGk4JBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A=="))),
|
buffer : require("heatshrink").decompress((atob("/4AB+VJkmSAQV///+BAtJn//5IIFkmf/4IGyVP/gIGpMnF41PHIImGF4ImHJoQmGJoIdK8hNHNY47C/JNGBIJZGyYJBQA5GCKH5Q/KAQAy0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyhCKH5Q1GShlJChQLCCg5TCHw5TMAD35FAoIIkgJB8hGGv/8Mg8/+QIFp4cB5IRGBIIvI/4IFybyCF4wTCDp5NBHZZiGz4JBLJKAGk4JBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A=="))),
|
||||||
palette: colorPalette
|
palette: colorPalette
|
||||||
};
|
};
|
||||||
|
|
||||||
var bgRightFullscreen = {
|
let bgRightFullscreen = {
|
||||||
width : 27, height : 176, bpp : 3,
|
width : 27, height : 176, bpp : 3,
|
||||||
transparent : 0,
|
transparent : 0,
|
||||||
buffer : require("heatshrink").decompress((atob("yVJkgCCyf/AAPJBAYCBk4JB8gUFyVP//yBAoCB//5BAwUCAAIUHAAIgGChopGv5TIn5TIz4yLKYxxC/iGI/xxGKH5Q/agwAnUP7y/KH4yGeVYAJ0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkp4CS4xGCWoyhCKH5QuDoxQCDpI7GDoJZGHYIRGLIQvGO4QvGMQRNJADv+GIqTC/5PGz4JBJ41JBIPJCg2TD4QLGn4JB/gUaHwRTGHwRTHBIRTGNAQyJ8gyI+QdFp4JB/IdFk5lLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJoyJC/4A=="))),
|
buffer : require("heatshrink").decompress((atob("yVJkgCCyf/AAPJBAYCBk4JB8gUFyVP//yBAoCB//5BAwUCAAIUHAAIgGChopGv5TIn5TIz4yLKYxxC/iGI/xxGKH5Q/agwAnUP7y/KH4yGeVYAJ0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkp4CS4xGCWoyhCKH5QuDoxQCDpI7GDoJZGHYIRGLIQvGO4QvGMQRNJADv+GIqTC/5PGz4JBJ41JBIPJCg2TD4QLGn4JB/gUaHwRTGHwRTHBIRTGNAQyJ8gyI+QdFp4JB/IdFk5lLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJoyJC/4A=="))),
|
||||||
palette: colorPalette
|
palette: colorPalette
|
||||||
};
|
};
|
||||||
|
|
||||||
var bgRightNotFullscreen = {
|
let bgRightNotFullscreen = {
|
||||||
width : 27, height : 152, bpp : 3,
|
width : 27, height : 152, bpp : 3,
|
||||||
transparent : 0,
|
transparent : 0,
|
||||||
buffer : require("heatshrink").decompress((atob("yVJkgCCyf/AAPJBAYCBk4JB8gUFyVP//yBAoCB//5BAwUCAAIUHAAIgGChopGv5TIn5TIz4yLKYxxC/iGI/xxGKH5Q/agwAx0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyhCKH5QuDoxQCDpI7GDoJZGHYIRGLIQvGO4QvGMQRNJADv+GIqTC/5PGz4JBJ41JBIPJCg2TD4QLGn4JB/gUaHwRTGHwRTHBIRTGNAQyJ8gyI+QdFp4JB/IdFk5lLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJoyJC/4A="))),
|
buffer : require("heatshrink").decompress((atob("yVJkgCCyf/AAPJBAYCBk4JB8gUFyVP//yBAoCB//5BAwUCAAIUHAAIgGChopGv5TIn5TIz4yLKYxxC/iGI/xxGKH5Q/agwAx0hGF34JB6RGFr4JB9JkFl4JB+gdFy4JB/QdFpYJB/odFkqrCS4xGCWoyhCKH5QuDoxQCDpI7GDoJZGHYIRGLIQvGO4QvGMQRNJADv+GIqTC/5PGz4JBJ41JBIPJCg2TD4QLGn4JB/gUaHwRTGHwRTHBIRTGNAQyJ8gyI+QdFp4JB/IdFk5lLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJoyJC/4A="))),
|
||||||
palette: colorPalette
|
palette: colorPalette
|
||||||
};
|
};
|
||||||
|
|
||||||
var bgLeft = settings.fullscreen ? bgLeftFullscreen : bgLeftNotFullscreen;
|
let bgLeft = settings.fullscreen ? bgLeftFullscreen : bgLeftNotFullscreen;
|
||||||
var bgRight= settings.fullscreen ? bgRightFullscreen : bgRightNotFullscreen;
|
let bgRight= settings.fullscreen ? bgRightFullscreen : bgRightNotFullscreen;
|
||||||
|
|
||||||
var iconEarth = {
|
let iconEarth = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA="))
|
buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA="))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconSaturn = {
|
let iconSaturn = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 1,
|
transparent : 1,
|
||||||
buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA"))
|
buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA"))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconMoon = {
|
let iconMoon = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 1,
|
transparent : 1,
|
||||||
buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA=="))
|
buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA=="))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconMars = {
|
let iconMars = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 1,
|
transparent : 1,
|
||||||
buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA=="))
|
buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA=="))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconSatellite = {
|
let iconSatellite = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 2,
|
transparent : 2,
|
||||||
buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA="))
|
buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA="))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconCharging = {
|
let iconCharging = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 5,
|
transparent : 5,
|
||||||
buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A"))
|
buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A"))
|
||||||
};
|
};
|
||||||
|
|
||||||
var iconWarning = {
|
let iconWarning = {
|
||||||
width : 50, height : 50, bpp : 3,
|
width : 50, height : 50, bpp : 3,
|
||||||
transparent : 1,
|
transparent : 1,
|
||||||
buffer : require("heatshrink").decompress(atob("kmSpIC/AWMyoQIFsmECJFJhMmA4QXByVICIwODAQ4RRFIQGD5JVLkIGDzJqMyAGDph8MiRKGyApEAoZKFyYIDQwMkSQNkQZABBhIIOOJRuEL5gRIAUKACVQMhmUSNYNDQYJTBBwYFByGTkOE5FJWYNMknCAQKYCiaSCpmGochDoSYBhMwTAZrChILBhmEzKPBF4ImBTAREBDoMmEwJVDoYjBycJFgWEJQRuLJQ1kmQCCjJlCBYbjCagaDBwyDBmBuBF4TjJAUQKINBChCDQxZBcZIIQF4NIgEAgKSDiQmEVQKMBoARBAAMCSQLLBVoxqKL4gaCChVCNwoRKOIo4CJIgABBoSMHpIRFgDdJOIJUBCAUJRgJuEAQb+DIIgRIAX4C/ASOQA"))
|
buffer : require("heatshrink").decompress(atob("kmSpIC/AWMyoQIFsmECJFJhMmA4QXByVICIwODAQ4RRFIQGD5JVLkIGDzJqMyAGDph8MiRKGyApEAoZKFyYIDQwMkSQNkQZABBhIIOOJRuEL5gRIAUKACVQMhmUSNYNDQYJTBBwYFByGTkOE5FJWYNMknCAQKYCiaSCpmGochDoSYBhMwTAZrChILBhmEzKPBF4ImBTAREBDoMmEwJVDoYjBycJFgWEJQRuLJQ1kmQCCjJlCBYbjCagaDBwyDBmBuBF4TjJAUQKINBChCDQxZBcZIIQF4NIgEAgKSDiQmEVQKMBoARBAAMCSQLLBVoxqKL4gaCChVCNwoRKOIo4CJIgABBoSMHpIRFgDdJOIJUBCAUJRgJuEAQb+DIIgRIAX4C/ASOQA"))
|
||||||
|
@ -172,26 +173,26 @@ Graphics.prototype.setFontAntonioLarge = function(scale) {
|
||||||
/*
|
/*
|
||||||
* Draw watch face
|
* Draw watch face
|
||||||
*/
|
*/
|
||||||
var drawTimeout;
|
let drawTimeout;
|
||||||
function queueDraw() {
|
let queueDraw = function() {
|
||||||
|
|
||||||
// Faster updates during alarm to ensure that it is
|
// Faster updates during alarm to ensure that it is
|
||||||
// shown correctly...
|
// shown correctly...
|
||||||
var timeout = isAlarmEnabled() ? 10000 : 60000;
|
let timeout = isAlarmEnabled() ? 10000 : 60000;
|
||||||
|
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
drawTimeout = setTimeout(function() {
|
drawTimeout = setTimeout(function() {
|
||||||
drawTimeout = undefined;
|
drawTimeout = undefined;
|
||||||
draw();
|
draw();
|
||||||
}, timeout - (Date.now() % timeout));
|
}, timeout - (Date.now() % timeout));
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function plots a data row in LCARS style.
|
* This function plots a data row in LCARS style.
|
||||||
* Note: It can be called async and therefore, the text alignment and
|
* Note: It can be called async and therefore, the text alignment and
|
||||||
* font is set each time the function is called.
|
* font is set each time the function is called.
|
||||||
*/
|
*/
|
||||||
function printRow(text, value, y, c){
|
let printRow = function(text, value, y, c){
|
||||||
g.setFontAntonioMedium();
|
g.setFontAntonioMedium();
|
||||||
g.setFontAlign(-1,-1,0);
|
g.setFontAlign(-1,-1,0);
|
||||||
|
|
||||||
|
@ -210,23 +211,23 @@ function printRow(text, value, y, c){
|
||||||
g.setColor(c);
|
g.setColor(c);
|
||||||
g.setFontAlign(1,-1,0);
|
g.setFontAlign(1,-1,0);
|
||||||
g.drawString(value, 126, y);
|
g.drawString(value, 126, y);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function drawData(key, y, c){
|
let drawData = function(key, y, c){
|
||||||
try{
|
try{
|
||||||
_drawData(key, y, c);
|
_drawData(key, y, c);
|
||||||
} catch(ex){
|
} catch(ex){
|
||||||
// Show last error - next try hopefully works.
|
// Show last error - next try hopefully works.
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function _drawData(key, y, c){
|
let _drawData = function(key, y, c){
|
||||||
key = key.toUpperCase()
|
key = key.toUpperCase()
|
||||||
var text = key;
|
let text = key;
|
||||||
var value = "ERR";
|
let value = "ERR";
|
||||||
var should_print= true;
|
let should_print= true;
|
||||||
|
|
||||||
if(key == "STEPS"){
|
if(key == "STEPS"){
|
||||||
text = "STEP";
|
text = "STEP";
|
||||||
|
@ -246,17 +247,17 @@ function _drawData(key, y, c){
|
||||||
value = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm);
|
value = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm);
|
||||||
|
|
||||||
} else if (key == "TEMP"){
|
} else if (key == "TEMP"){
|
||||||
var weather = getWeather();
|
let weather = getWeather();
|
||||||
value = weather.temp;
|
value = weather.temp;
|
||||||
|
|
||||||
} else if (key == "HUMIDITY"){
|
} else if (key == "HUMIDITY"){
|
||||||
text = "HUM";
|
text = "HUM";
|
||||||
var weather = getWeather();
|
let weather = getWeather();
|
||||||
value = weather.hum;
|
value = weather.hum;
|
||||||
|
|
||||||
} else if (key == "WIND"){
|
} else if (key == "WIND"){
|
||||||
text = "WND";
|
text = "WND";
|
||||||
var weather = getWeather();
|
let weather = getWeather();
|
||||||
value = weather.wind;
|
value = weather.wind;
|
||||||
|
|
||||||
} else if (key == "ALTITUDE"){
|
} else if (key == "ALTITUDE"){
|
||||||
|
@ -280,18 +281,18 @@ function _drawData(key, y, c){
|
||||||
if(should_print){
|
if(should_print){
|
||||||
printRow(text, value, y, c);
|
printRow(text, value, y, c);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function drawHorizontalBgLine(color, x1, x2, y, h){
|
let drawHorizontalBgLine = function(color, x1, x2, y, h){
|
||||||
g.setColor(color);
|
g.setColor(color);
|
||||||
|
|
||||||
for(var i=0; i<h; i++){
|
for(let i=0; i<h; i++){
|
||||||
g.drawLine(x1, y+i, x2,y+i);
|
g.drawLine(x1, y+i, x2,y+i);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function drawInfo(){
|
let drawInfo = function(){
|
||||||
if(lcarsViewPos != 0 || !settings.fullscreen){
|
if(lcarsViewPos != 0 || !settings.fullscreen){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -313,9 +314,9 @@ function drawInfo(){
|
||||||
g.setColor(color3);
|
g.setColor(color3);
|
||||||
g.drawString("LOCK", 128, 53);
|
g.drawString("LOCK", 128, 53);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function drawState(){
|
let drawState = function(){
|
||||||
if(lcarsViewPos != 0){
|
if(lcarsViewPos != 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -325,11 +326,11 @@ function drawState(){
|
||||||
g.setFontAntonioMedium();
|
g.setFontAntonioMedium();
|
||||||
|
|
||||||
if(!isAlarmEnabled()){
|
if(!isAlarmEnabled()){
|
||||||
var bat = E.getBattery();
|
let bat = E.getBattery();
|
||||||
var flash = storage.getFree() / process.env.STORAGE;
|
let flash = storage.getFree() / process.env.STORAGE;
|
||||||
var current = new Date();
|
let current = new Date();
|
||||||
var hours = current.getHours();
|
let hours = current.getHours();
|
||||||
var iconMsg =
|
let iconMsg =
|
||||||
Bangle.isCharging() ? { icon: iconCharging, text: "STATUS" } :
|
Bangle.isCharging() ? { icon: iconCharging, text: "STATUS" } :
|
||||||
bat < 30 ? { icon: iconWarning, text: "BAT" } :
|
bat < 30 ? { icon: iconWarning, text: "BAT" } :
|
||||||
flash < 0.1 ? { icon: iconWarning, text: "DISK" } :
|
flash < 0.1 ? { icon: iconWarning, text: "DISK" } :
|
||||||
|
@ -351,12 +352,12 @@ function drawState(){
|
||||||
}
|
}
|
||||||
|
|
||||||
g.setFontAlign(-1, -1, 0);
|
g.setFontAlign(-1, -1, 0);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function drawPosition0(){
|
let drawPosition0 = function(){
|
||||||
// Draw background image
|
// Draw background image
|
||||||
var offset = settings.fullscreen ? 0 : 24;
|
let offset = settings.fullscreen ? 0 : 24;
|
||||||
g.drawImage(bgLeft, 0, offset);
|
g.drawImage(bgLeft, 0, offset);
|
||||||
drawHorizontalBgLine(color1, 25, 120, offset, 4);
|
drawHorizontalBgLine(color1, 25, 120, offset, 4);
|
||||||
drawHorizontalBgLine(color1, 130, 176, offset, 4);
|
drawHorizontalBgLine(color1, 130, 176, offset, 4);
|
||||||
|
@ -366,13 +367,13 @@ function drawPosition0(){
|
||||||
drawHorizontalBgLine(color2, 120, 176, 87, 4);
|
drawHorizontalBgLine(color2, 120, 176, 87, 4);
|
||||||
|
|
||||||
// The last line is a battery indicator too
|
// The last line is a battery indicator too
|
||||||
var bat = E.getBattery() / 100.0;
|
let bat = E.getBattery() / 100.0;
|
||||||
var batStart = 19;
|
let batStart = 19;
|
||||||
var batWidth = 172 - batStart;
|
let batWidth = 172 - batStart;
|
||||||
var batX2 = parseInt(batWidth * bat + batStart);
|
let batX2 = parseInt(batWidth * bat + batStart);
|
||||||
drawHorizontalBgLine(color2, batStart, batX2, 171, 5);
|
drawHorizontalBgLine(color2, batStart, batX2, 171, 5);
|
||||||
drawHorizontalBgLine(cGrey, batX2, 172, 171, 5);
|
drawHorizontalBgLine(cGrey, batX2, 172, 171, 5);
|
||||||
for(var i=0; i+batStart<=172; i+=parseInt(batWidth/4)){
|
for(let i=0; i+batStart<=172; i+=parseInt(batWidth/4)){
|
||||||
drawHorizontalBgLine(cBlack, batStart+i, batStart+i+3, 168, 8)
|
drawHorizontalBgLine(cBlack, batStart+i, batStart+i+3, 168, 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,8 +383,8 @@ function drawPosition0(){
|
||||||
// Write time
|
// Write time
|
||||||
g.setFontAlign(-1, -1, 0);
|
g.setFontAlign(-1, -1, 0);
|
||||||
g.setColor(cWhite);
|
g.setColor(cWhite);
|
||||||
var currentDate = new Date();
|
let currentDate = new Date();
|
||||||
var timeStr = locale.time(currentDate,1);
|
let timeStr = locale.time(currentDate,1);
|
||||||
g.setFontAntonioLarge();
|
g.setFontAntonioLarge();
|
||||||
if(settings.fullscreen){
|
if(settings.fullscreen){
|
||||||
g.drawString(timeStr, 27, 10);
|
g.drawString(timeStr, 27, 10);
|
||||||
|
@ -395,13 +396,13 @@ function drawPosition0(){
|
||||||
g.setColor(cWhite);
|
g.setColor(cWhite);
|
||||||
g.setFontAntonioMedium();
|
g.setFontAntonioMedium();
|
||||||
if(settings.fullscreen){
|
if(settings.fullscreen){
|
||||||
var dayStr = locale.dow(currentDate, true).toUpperCase();
|
let dayStr = locale.dow(currentDate, true).toUpperCase();
|
||||||
dayStr += " " + currentDate.getDate();
|
dayStr += " " + currentDate.getDate();
|
||||||
dayStr += " " + locale.month(currentDate, 1).toUpperCase();
|
dayStr += " " + locale.month(currentDate, 1).toUpperCase();
|
||||||
g.drawString(dayStr, 30, 56);
|
g.drawString(dayStr, 30, 56);
|
||||||
} else {
|
} else {
|
||||||
var dayStr = locale.dow(currentDate, true).toUpperCase();
|
let dayStr = locale.dow(currentDate, true).toUpperCase();
|
||||||
var date = currentDate.getDate();
|
let date = currentDate.getDate();
|
||||||
g.drawString(dayStr, 128, 35);
|
g.drawString(dayStr, 128, 35);
|
||||||
g.drawString(date, 128, 55);
|
g.drawString(date, 128, 55);
|
||||||
}
|
}
|
||||||
|
@ -415,11 +416,11 @@ function drawPosition0(){
|
||||||
|
|
||||||
// Draw state
|
// Draw state
|
||||||
drawState();
|
drawState();
|
||||||
}
|
};
|
||||||
|
|
||||||
function drawPosition1(){
|
let drawPosition1 = function(){
|
||||||
// Draw background image
|
// Draw background image
|
||||||
var offset = settings.fullscreen ? 0 : 24;
|
let offset = settings.fullscreen ? 0 : 24;
|
||||||
g.drawImage(bgRight, 149, offset);
|
g.drawImage(bgRight, 149, offset);
|
||||||
if(settings.fullscreen){
|
if(settings.fullscreen){
|
||||||
drawHorizontalBgLine(color1, 0, 140, offset, 4);
|
drawHorizontalBgLine(color1, 0, 140, offset, 4);
|
||||||
|
@ -447,8 +448,8 @@ function drawPosition1(){
|
||||||
|
|
||||||
// Plot HRM graph
|
// Plot HRM graph
|
||||||
if(plotMonth){
|
if(plotMonth){
|
||||||
var data = new Uint16Array(32);
|
let data = new Uint16Array(32);
|
||||||
var cnt = new Uint8Array(32);
|
let cnt = new Uint8Array(32);
|
||||||
health.readDailySummaries(new Date(), h=>{
|
health.readDailySummaries(new Date(), h=>{
|
||||||
data[h.day]+=h.bpm;
|
data[h.day]+=h.bpm;
|
||||||
if (h.bpm) cnt[h.day]++;
|
if (h.bpm) cnt[h.day]++;
|
||||||
|
@ -465,9 +466,9 @@ function drawPosition1(){
|
||||||
});
|
});
|
||||||
|
|
||||||
// Plot step graph
|
// Plot step graph
|
||||||
var data = new Uint16Array(32);
|
data = new Uint16Array(32);
|
||||||
health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000);
|
health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000);
|
||||||
var gridY = parseInt(Math.max.apply(Math, data)/2);
|
let gridY = parseInt(Math.max.apply(Math, data)/2);
|
||||||
gridY = gridY <= 0 ? 1 : gridY;
|
gridY = gridY <= 0 ? 1 : gridY;
|
||||||
require("graph").drawBar(g, data, {
|
require("graph").drawBar(g, data, {
|
||||||
axes : true,
|
axes : true,
|
||||||
|
@ -493,8 +494,8 @@ function drawPosition1(){
|
||||||
|
|
||||||
// Plot day
|
// Plot day
|
||||||
} else {
|
} else {
|
||||||
var data = new Uint16Array(24);
|
let data = new Uint16Array(24);
|
||||||
var cnt = new Uint8Array(24);
|
let cnt = new Uint8Array(24);
|
||||||
health.readDay(new Date(), h=>{
|
health.readDay(new Date(), h=>{
|
||||||
data[h.hr]+=h.bpm;
|
data[h.hr]+=h.bpm;
|
||||||
if (h.bpm) cnt[h.hr]++;
|
if (h.bpm) cnt[h.hr]++;
|
||||||
|
@ -511,9 +512,9 @@ function drawPosition1(){
|
||||||
});
|
});
|
||||||
|
|
||||||
// Plot step graph
|
// Plot step graph
|
||||||
var data = new Uint16Array(24);
|
data = new Uint16Array(24);
|
||||||
health.readDay(new Date(), h=>data[h.hr]+=h.steps);
|
health.readDay(new Date(), h=>data[h.hr]+=h.steps);
|
||||||
var gridY = parseInt(Math.max.apply(Math, data)/1000)*1000;
|
let gridY = parseInt(Math.max.apply(Math, data)/1000)*1000;
|
||||||
gridY = gridY <= 0 ? 1000 : gridY;
|
gridY = gridY <= 0 ? 1000 : gridY;
|
||||||
require("graph").drawBar(g, data, {
|
require("graph").drawBar(g, data, {
|
||||||
axes : true,
|
axes : true,
|
||||||
|
@ -537,9 +538,9 @@ function drawPosition1(){
|
||||||
g.drawString("DAY", 154, 115);
|
g.drawString("DAY", 154, 115);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function draw(){
|
let draw = function(){
|
||||||
// Queue draw first to ensure that its called in one minute again.
|
// Queue draw first to ensure that its called in one minute again.
|
||||||
queueDraw();
|
queueDraw();
|
||||||
|
|
||||||
|
@ -560,14 +561,14 @@ function draw(){
|
||||||
} else {
|
} else {
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step counter via widget
|
* Step counter via widget
|
||||||
*/
|
*/
|
||||||
function getSteps() {
|
let getSteps = function() {
|
||||||
var steps = 0;
|
let steps = 0;
|
||||||
try{
|
try{
|
||||||
if (WIDGETS.wpedom !== undefined) {
|
if (WIDGETS.wpedom !== undefined) {
|
||||||
steps = WIDGETS.wpedom.getSteps();
|
steps = WIDGETS.wpedom.getSteps();
|
||||||
|
@ -581,15 +582,15 @@ function getSteps() {
|
||||||
}
|
}
|
||||||
|
|
||||||
return steps;
|
return steps;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function getWeather(){
|
let getWeather = function(){
|
||||||
var weatherJson;
|
let weatherJson;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
weatherJson = storage.readJSON('weather.json');
|
weatherJson = storage.readJSON('weather.json');
|
||||||
var weather = weatherJson.weather;
|
let weather = weatherJson.weather;
|
||||||
|
|
||||||
// Temperature
|
// Temperature
|
||||||
weather.temp = locale.temp(weather.temp-273.15);
|
weather.temp = locale.temp(weather.temp-273.15);
|
||||||
|
@ -599,7 +600,7 @@ function getWeather(){
|
||||||
|
|
||||||
// Wind
|
// Wind
|
||||||
const wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
const wind = locale.speed(weather.wind).match(/^(\D*\d*)(.*)$/);
|
||||||
var speedFactor = settings.speed == "kph" ? 1.0 : 1.0 / 1.60934;
|
let speedFactor = settings.speed == "kph" ? 1.0 : 1.0 / 1.60934;
|
||||||
weather.wind = Math.round(wind[1] * speedFactor);
|
weather.wind = Math.round(wind[1] * speedFactor);
|
||||||
|
|
||||||
return weather
|
return weather
|
||||||
|
@ -616,15 +617,15 @@ function getWeather(){
|
||||||
wdir: " ? ",
|
wdir: " ? ",
|
||||||
wrose: " ? "
|
wrose: " ? "
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle alarm
|
* Handle alarm
|
||||||
*/
|
*/
|
||||||
function isAlarmEnabled(){
|
let isAlarmEnabled = function(){
|
||||||
try{
|
try{
|
||||||
var alarm = require('sched');
|
let alarm = require('sched');
|
||||||
var alarmObj = alarm.getAlarm(TIMER_IDX);
|
let alarmObj = alarm.getAlarm(TIMER_IDX);
|
||||||
if(alarmObj===undefined || !alarmObj.on){
|
if(alarmObj===undefined || !alarmObj.on){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -633,35 +634,35 @@ function isAlarmEnabled(){
|
||||||
|
|
||||||
} catch(ex){ }
|
} catch(ex){ }
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
|
|
||||||
function getAlarmMinutes(){
|
let getAlarmMinutes = function(){
|
||||||
if(!isAlarmEnabled()){
|
if(!isAlarmEnabled()){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
var alarm = require('sched');
|
let alarm = require('sched');
|
||||||
var alarmObj = alarm.getAlarm(TIMER_IDX);
|
let alarmObj = alarm.getAlarm(TIMER_IDX);
|
||||||
return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000));
|
return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000));
|
||||||
}
|
};
|
||||||
|
|
||||||
function increaseAlarm(){
|
let increaseAlarm = function(){
|
||||||
try{
|
try{
|
||||||
var minutes = isAlarmEnabled() ? getAlarmMinutes() : 0;
|
let minutes = isAlarmEnabled() ? getAlarmMinutes() : 0;
|
||||||
var alarm = require('sched')
|
let alarm = require('sched')
|
||||||
alarm.setAlarm(TIMER_IDX, {
|
alarm.setAlarm(TIMER_IDX, {
|
||||||
timer : (minutes+5)*60*1000,
|
timer : (minutes+5)*60*1000,
|
||||||
});
|
});
|
||||||
alarm.reload();
|
alarm.reload();
|
||||||
} catch(ex){ }
|
} catch(ex){ }
|
||||||
}
|
};
|
||||||
|
|
||||||
function decreaseAlarm(){
|
let decreaseAlarm = function(){
|
||||||
try{
|
try{
|
||||||
var minutes = getAlarmMinutes();
|
let minutes = getAlarmMinutes();
|
||||||
minutes -= 5;
|
minutes -= 5;
|
||||||
|
|
||||||
var alarm = require('sched')
|
let alarm = require('sched')
|
||||||
alarm.setAlarm(TIMER_IDX, undefined);
|
alarm.setAlarm(TIMER_IDX, undefined);
|
||||||
|
|
||||||
if(minutes > 0){
|
if(minutes > 0){
|
||||||
|
@ -672,13 +673,13 @@ function decreaseAlarm(){
|
||||||
|
|
||||||
alarm.reload();
|
alarm.reload();
|
||||||
} catch(ex){ }
|
} catch(ex){ }
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Listeners
|
* Listeners
|
||||||
*/
|
*/
|
||||||
Bangle.on('lcdPower',on=>{
|
let onLcdPower = on=>{
|
||||||
if (on) {
|
if (on) {
|
||||||
// Whenever we connect to Gadgetbridge, reading data from
|
// Whenever we connect to Gadgetbridge, reading data from
|
||||||
// health failed. Therefore, we update only partially...
|
// health failed. Therefore, we update only partially...
|
||||||
|
@ -688,31 +689,34 @@ Bangle.on('lcdPower',on=>{
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
drawTimeout = undefined;
|
drawTimeout = undefined;
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
Bangle.on('lcdPower', onLcdPower);
|
||||||
|
|
||||||
Bangle.on('lock', function(isLocked) {
|
let onLock = function(isLocked) {
|
||||||
drawInfo();
|
drawInfo();
|
||||||
});
|
};
|
||||||
|
Bangle.on('lock', onLock);
|
||||||
|
|
||||||
Bangle.on('charging',function(charging) {
|
|
||||||
|
let onCharge = function(charging) {
|
||||||
drawState();
|
drawState();
|
||||||
});
|
};
|
||||||
|
Bangle.on('charging', onCharge);
|
||||||
|
|
||||||
function feedback(){
|
let feedback = function(){
|
||||||
Bangle.buzz(40, 0.3);
|
Bangle.buzz(40, 0.3);
|
||||||
}
|
};
|
||||||
|
|
||||||
// Touch gestures to control clock. We don't use swipe to be compatible with the bangle ecosystem
|
let onTouch = function(btn, e){
|
||||||
Bangle.on('touch', function(btn, e){
|
let left = parseInt(g.getWidth() * 0.2);
|
||||||
var left = parseInt(g.getWidth() * 0.2);
|
let right = g.getWidth() - left;
|
||||||
var right = g.getWidth() - left;
|
let upper = parseInt(g.getHeight() * 0.2);
|
||||||
var upper = parseInt(g.getHeight() * 0.2);
|
let lower = g.getHeight() - upper;
|
||||||
var lower = g.getHeight() - upper;
|
|
||||||
|
|
||||||
var is_left = e.x < left;
|
let is_left = e.x < left;
|
||||||
var is_right = e.x > right;
|
let is_right = e.x > right;
|
||||||
var is_upper = e.y < upper;
|
let is_upper = e.y < upper;
|
||||||
var is_lower = e.y > lower;
|
let is_lower = e.y > lower;
|
||||||
|
|
||||||
if(!settings.disableData){
|
if(!settings.disableData){
|
||||||
if(is_left && lcarsViewPos == 1){
|
if(is_left && lcarsViewPos == 1){
|
||||||
|
@ -747,16 +751,30 @@ Bangle.on('touch', function(btn, e){
|
||||||
draw();
|
draw();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
// Touch gestures to control clock. We don't use swipe to be compatible with the bangle ecosystem
|
||||||
|
Bangle.on('touch', onTouch);
|
||||||
|
|
||||||
|
let themeBefore = g.theme;
|
||||||
/*
|
/*
|
||||||
* Lets start widgets, listen for btn etc.
|
* Lets start widgets, listen for btn etc.
|
||||||
*/
|
*/
|
||||||
// Show launcher when middle button pressed
|
// Show launcher when middle button pressed
|
||||||
Bangle.setUI("clock");
|
Bangle.setUI({mode:"clock",remove:function() {
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
delete Graphics.prototype.setFontAntonioMedium;
|
||||||
|
delete Graphics.prototype.setFontAntonioLarge;
|
||||||
|
Bangle.removeListener("lcdPower",onLcdPower);
|
||||||
|
Bangle.removeListener("lock",onLock);
|
||||||
|
Bangle.removeListener("charging",onCharge);
|
||||||
|
Bangle.removeListener("touch",onTouch);
|
||||||
|
require('sched').setAlarm(TIMER_IDX, undefined);
|
||||||
|
g.setTheme(themeBefore);
|
||||||
|
widget_utils.cleanup();
|
||||||
|
}});
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
|
|
||||||
// Clear the screen once, at startup and draw clock
|
// Clear the screen once, at startup and draw clock
|
||||||
g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear();
|
g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear();
|
||||||
draw();
|
draw();
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
"name": "LCARS Clock",
|
"name": "LCARS Clock",
|
||||||
"shortName":"LCARS",
|
"shortName":"LCARS",
|
||||||
"icon": "lcars.png",
|
"icon": "lcars.png",
|
||||||
"version":"0.28",
|
"version":"0.29",
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"supports": ["BANGLEJS2"],
|
"supports": ["BANGLEJS2"],
|
||||||
"description": "Library Computer Access Retrieval System (LCARS) clock.",
|
"description": "Library Computer Access Retrieval System (LCARS) clock.",
|
||||||
|
|
Loading…
Reference in New Issue