2022-06-27 14:12:26 +00:00
|
|
|
const storage = require("Storage");
|
2022-02-16 18:57:22 +00:00
|
|
|
const locale = require('locale');
|
|
|
|
var ENV = process.env;
|
|
|
|
var W = g.getWidth(), H = g.getHeight();
|
|
|
|
var screen = 0;
|
2022-06-27 14:12:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
var screens = [
|
|
|
|
{
|
|
|
|
name: "General",
|
|
|
|
items: [
|
|
|
|
{name: "Steps", fun: () => getSteps()},
|
|
|
|
{name: "HRM", fun: () => getBpm()},
|
|
|
|
{name: "", fun: () => ""},
|
|
|
|
{name: "Temp.", fun: () => getWeatherTemp()},
|
|
|
|
{name: "Humidity", fun: () => getWeatherHumidity()},
|
|
|
|
{name: "Wind", fun: () => getWeatherWind()},
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Hardware",
|
|
|
|
items: [
|
|
|
|
{name: "Battery", fun: () => E.getBattery() + "%"},
|
2023-02-23 11:46:49 +00:00
|
|
|
{name: "Charge?", fun: () => Bangle.isCharging() ? /*LANG*/"Yes" : /*LANG*/"No"},
|
2022-06-27 14:12:26 +00:00
|
|
|
{name: "TempInt.", fun: () => locale.temp(parseInt(E.getTemperature()))},
|
2023-02-23 11:46:49 +00:00
|
|
|
{name: "Bluetooth", fun: () => NRF.getSecurityStatus().connected ? /*LANG*/"Conn" : /*LANG*/"NoConn"},
|
|
|
|
{name: "GPS", fun: () => Bangle.isGPSOn() ? /*LANG*/"On" : /*LANG*/"Off"},
|
|
|
|
{name: "Compass", fun: () => Bangle.isCompassOn() ? /*LANG*/"On" : /*LANG*/"Off"},
|
2022-06-27 14:12:26 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Software",
|
|
|
|
items: [
|
|
|
|
{name: "Firmw.", fun: () => ENV.VERSION},
|
2022-06-28 07:53:59 +00:00
|
|
|
{name: "Git", fun: () => ENV.GIT_COMMIT},
|
2022-06-27 14:12:26 +00:00
|
|
|
{name: "Boot.", fun: () => getVersion("boot.info")},
|
|
|
|
{name: "Settings.", fun: () => getVersion("setting.info")},
|
|
|
|
]
|
2022-06-28 07:53:59 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Storage [kB]",
|
|
|
|
items: [
|
|
|
|
{name: "Total", fun: () => storage.getStats().totalBytes>>10},
|
|
|
|
{name: "Free", fun: () => storage.getStats().freeBytes>>10},
|
|
|
|
{name: "Trash", fun: () => storage.getStats().trashBytes>>10},
|
|
|
|
{name: "", fun: () => ""},
|
|
|
|
{name: "#File", fun: () => storage.getStats().fileCount},
|
|
|
|
{name: "#Trash", fun: () => storage.getStats().trashCount},
|
|
|
|
]
|
|
|
|
},
|
2022-06-27 14:12:26 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
function getWeatherTemp(){
|
|
|
|
try {
|
|
|
|
var weather = storage.readJSON('weather.json').weather;
|
|
|
|
return locale.temp(weather.temp-273.15);
|
|
|
|
} catch(ex) { }
|
|
|
|
|
|
|
|
return "?";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getWeatherHumidity(){
|
|
|
|
try {
|
|
|
|
var weather = storage.readJSON('weather.json').weather;
|
|
|
|
return weather.hum = weather.hum + "%";
|
|
|
|
} catch(ex) { }
|
|
|
|
|
|
|
|
return "?";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getWeatherWind(){
|
|
|
|
try {
|
|
|
|
var weather = storage.readJSON('weather.json').weather;
|
|
|
|
var speed = locale.speed(weather.wind).replace("mph", "");
|
|
|
|
return Math.round(speed * 1.609344) + "kph";
|
|
|
|
} catch(ex) { }
|
|
|
|
|
|
|
|
return "?";
|
|
|
|
}
|
|
|
|
|
2022-02-16 18:57:22 +00:00
|
|
|
|
|
|
|
function getVersion(file) {
|
2022-06-27 14:12:26 +00:00
|
|
|
var j = storage.readJSON(file,1);
|
2022-02-16 18:57:22 +00:00
|
|
|
var v = ("object"==typeof j)?j.version:false;
|
|
|
|
return v?((v?"v"+v:"Unknown")):"NO ";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getSteps(){
|
|
|
|
try{
|
|
|
|
return Bangle.getHealthStatus("day").steps;
|
|
|
|
} catch(e) {
|
2022-06-27 14:12:26 +00:00
|
|
|
return ">2v12";
|
2022-02-16 18:57:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getBpm(){
|
|
|
|
try{
|
2022-02-16 20:31:46 +00:00
|
|
|
return Math.round(Bangle.getHealthStatus("day").bpm) + "bpm";
|
2022-02-16 18:57:22 +00:00
|
|
|
} catch(e) {
|
2022-06-27 14:12:26 +00:00
|
|
|
return ">2v12";
|
2022-02-16 18:57:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-27 14:12:26 +00:00
|
|
|
function drawData(name, value, y){
|
|
|
|
g.drawString(name, 10, y);
|
|
|
|
g.drawString(value, 100, y);
|
|
|
|
}
|
|
|
|
|
2022-02-16 18:57:22 +00:00
|
|
|
function drawInfo() {
|
|
|
|
g.reset().clearRect(Bangle.appRect);
|
|
|
|
var h=18, y = h;//-h;
|
|
|
|
|
|
|
|
// Header
|
2022-06-27 14:12:26 +00:00
|
|
|
g.drawLine(0,25,W,25);
|
|
|
|
g.drawLine(0,26,W,26);
|
2022-02-16 18:57:22 +00:00
|
|
|
|
2022-06-27 14:12:26 +00:00
|
|
|
// Info body depending on screen
|
|
|
|
g.setFont("Vector",h).setFontAlign(-1,-1);
|
|
|
|
screens[screen].items.forEach(function (item, index){
|
|
|
|
drawData(item.name, item.fun(), y+=h);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Bottom
|
|
|
|
g.drawLine(0,H-h-3,W,H-h-3);
|
|
|
|
g.drawLine(0,H-h-2,W,H-h-2);
|
|
|
|
g.setFont("Vector",h-2).setFontAlign(-1,-1);
|
|
|
|
g.drawString(screens[screen].name, 2, H-h+2);
|
2022-02-16 18:57:22 +00:00
|
|
|
g.setFont("Vector",h-2).setFontAlign(1,-1);
|
2022-06-27 14:12:26 +00:00
|
|
|
g.drawString((screen+1) + "/" + screens.length, W, H-h+2);
|
2022-02-16 18:57:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
drawInfo();
|
|
|
|
setWatch(_=>load(), BTN1);
|
|
|
|
|
|
|
|
Bangle.on('touch', function(btn, e){
|
|
|
|
var left = parseInt(g.getWidth() * 0.3);
|
|
|
|
var right = g.getWidth() - left;
|
|
|
|
var isLeft = e.x < left;
|
|
|
|
var isRight = e.x > right;
|
|
|
|
|
|
|
|
if(isRight){
|
2022-06-27 14:12:26 +00:00
|
|
|
screen = (screen + 1) % screens.length;
|
2022-02-16 18:57:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if(isLeft){
|
2022-02-16 19:44:35 +00:00
|
|
|
screen -= 1;
|
2022-06-27 14:12:26 +00:00
|
|
|
screen = screen < 0 ? screens.length-1 : screen;
|
2022-02-16 18:57:22 +00:00
|
|
|
}
|
|
|
|
|
2022-06-27 14:12:26 +00:00
|
|
|
Bangle.buzz(40, 0.6);
|
2022-02-16 18:57:22 +00:00
|
|
|
drawInfo();
|
|
|
|
});
|
|
|
|
|
|
|
|
Bangle.on('lock', function(isLocked) {
|
|
|
|
drawInfo();
|
|
|
|
});
|
|
|
|
|
|
|
|
Bangle.loadWidgets();
|
2023-02-23 11:46:49 +00:00
|
|
|
Bangle.drawWidgets();
|