Battery improvements
parent
fc35cda136
commit
63b46e2df2
|
|
@ -1,2 +1,3 @@
|
||||||
0.01: Launch app.
|
0.01: Launch app.
|
||||||
0.02: 12k steps are 360 degrees - improves readability of steps.
|
0.02: 12k steps are 360 degrees - improves readability of steps.
|
||||||
|
0.03: Battery improvements through sleep (no minute updates) and partial updates of drawing.
|
||||||
|
|
@ -28,7 +28,8 @@ var state = {
|
||||||
maxSteps: 10000,
|
maxSteps: 10000,
|
||||||
bat: 0,
|
bat: 0,
|
||||||
has_weather: false,
|
has_weather: false,
|
||||||
temp: "-"
|
temp: "-",
|
||||||
|
sleep: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
var chargeImg = {
|
var chargeImg = {
|
||||||
|
|
@ -172,42 +173,44 @@ function drawData() {
|
||||||
drawDataHand(parseInt(state.steps*360/12000));
|
drawDataHand(parseInt(state.steps*360/12000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function drawTextCleared(s, x, y){
|
||||||
|
g.clearRect(x-15, y-22, x+15, y+15);
|
||||||
|
g.drawString(s, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function drawTime(){
|
function drawTime(){
|
||||||
g.setTimeFont();
|
g.setTimeFont();
|
||||||
g.setFontAlign(0,0,0);
|
g.setFontAlign(0,0,0);
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
|
|
||||||
var currentDate = new Date();
|
|
||||||
var posX = 14;
|
var posX = 14;
|
||||||
var posY = 14;
|
var posY = 14;
|
||||||
|
|
||||||
// Hour
|
// Hour
|
||||||
var h = currentDate.getHours();
|
var h = state.currentDate.getHours();
|
||||||
var h1 = parseInt(h / 10);
|
var h1 = parseInt(h / 10);
|
||||||
var h2 = h < 10 ? h : h - h1*10;
|
var h2 = h < 10 ? h : h - h1*10;
|
||||||
g.drawString(h1, cx, posY+8);
|
drawTextCleared(h1, cx, posY+8);
|
||||||
g.drawString(h2, W-posX, cy+5);
|
drawTextCleared(h2, W-posX, cy+5);
|
||||||
|
|
||||||
// Minutes
|
// Minutes
|
||||||
var m = currentDate.getMinutes();
|
var m = state.currentDate.getMinutes();
|
||||||
var m1 = parseInt(m / 10);
|
var m1 = parseInt(m / 10);
|
||||||
var m2 = m < 10 ? m : m - m1*10;
|
var m2 = m < 10 ? m : m - m1*10;
|
||||||
g.drawString(m2, cx, H-posY);
|
drawTextCleared(m2, cx, H-posY);
|
||||||
g.drawString(m1, posX-1, cy+5);
|
drawTextCleared(m1, posX-1, cy+5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function drawDate(){
|
function drawDate(){
|
||||||
var currentDate = new Date();
|
|
||||||
|
|
||||||
// Date
|
// Date
|
||||||
g.setFontAlign(-1,0,0);
|
g.setFontAlign(-1,0,0);
|
||||||
g.setNormalFont();
|
g.setNormalFont();
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
var dayStr = locale.dow(currentDate, true).toUpperCase();
|
var dayStr = locale.dow(state.currentDate, true).toUpperCase();
|
||||||
g.drawString(dayStr, cx/2-15, cy/2-5);
|
g.drawString(dayStr, cx/2-15, cy/2-5);
|
||||||
g.drawString(currentDate.getDate(), cx/2-15, cy/2+17);
|
g.drawString(state.currentDate.getDate(), cx/2-15, cy/2+17);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -222,11 +225,20 @@ function drawLock(){
|
||||||
|
|
||||||
|
|
||||||
function handleState(fastUpdate){
|
function handleState(fastUpdate){
|
||||||
// Set theme color
|
state.currentDate = new Date();
|
||||||
|
|
||||||
|
// Color based on state
|
||||||
state.color = isAlarmEnabled() ? "#FF6A00" :
|
state.color = isAlarmEnabled() ? "#FF6A00" :
|
||||||
state.steps > state.maxSteps ? "#00ff00" :
|
state.steps > state.maxSteps ? "#00ff00" :
|
||||||
"#ff0000";
|
"#ff0000";
|
||||||
|
|
||||||
|
var minutes = state.currentDate.getMinutes();
|
||||||
|
var hours = state.currentDate.getHours();
|
||||||
|
if(fastUpdate && hours == 0 && minutes == 5){
|
||||||
|
state.sleep = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(fastUpdate){
|
if(fastUpdate){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -238,27 +250,48 @@ function handleState(fastUpdate){
|
||||||
state.steps = getSteps();
|
state.steps = getSteps();
|
||||||
|
|
||||||
// Set weather
|
// Set weather
|
||||||
state.has_weather = true;
|
// We do this every 5 minutes only to save some battery.
|
||||||
try {
|
if(minutes & 5 == 0 || !state.has_weather){
|
||||||
weather = require('weather').get();
|
state.has_weather = true;
|
||||||
if (weather === undefined){
|
try {
|
||||||
|
weather = require('weather').get();
|
||||||
|
if (weather === undefined){
|
||||||
|
state.has_weather = false;
|
||||||
|
state.temp = "-";
|
||||||
|
} else {
|
||||||
|
state.temp = locale.temp(Math.round(weather.temp-273.15));
|
||||||
|
}
|
||||||
|
} catch(ex) {
|
||||||
state.has_weather = false;
|
state.has_weather = false;
|
||||||
state.temp = "-";
|
|
||||||
} else {
|
|
||||||
state.temp = locale.temp(Math.round(weather.temp-273.15));
|
|
||||||
}
|
}
|
||||||
} catch(ex) {
|
|
||||||
state.has_weather = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function drawSleep(){
|
||||||
|
g.reset();
|
||||||
|
g.clearRect(0, 0, g.getWidth(), g.getHeight());
|
||||||
|
|
||||||
|
drawBackground();
|
||||||
|
|
||||||
|
g.setNormalFont();
|
||||||
|
g.setFontAlign(0,0,0);
|
||||||
|
g.drawString("SLEEPING", cx, cy-20);
|
||||||
|
g.drawString("PRESS BTN", cx, cy);
|
||||||
|
g.drawString("TO CONTINUE...", cx, cy+20);
|
||||||
|
}
|
||||||
|
|
||||||
function draw(fastUpdate){
|
function draw(fastUpdate){
|
||||||
// Execute handlers
|
// Execute handlers
|
||||||
handleState(fastUpdate);
|
handleState(fastUpdate);
|
||||||
handleAlarm();
|
handleAlarm();
|
||||||
|
|
||||||
|
if(state.sleep){
|
||||||
|
drawSleep();
|
||||||
|
// We don't queue draw again - so its sleeping until
|
||||||
|
// the user presses the btn again.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Clear watch face
|
// Clear watch face
|
||||||
if(fastUpdate){
|
if(fastUpdate){
|
||||||
var innerRect = 20;
|
var innerRect = 20;
|
||||||
|
|
@ -291,7 +324,7 @@ function draw(fastUpdate){
|
||||||
*/
|
*/
|
||||||
Bangle.on('lcdPower',on=>{
|
Bangle.on('lcdPower',on=>{
|
||||||
if (on) {
|
if (on) {
|
||||||
draw(false);
|
draw(true);
|
||||||
} else { // stop draw timer
|
} else { // stop draw timer
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
drawTimeout = undefined;
|
drawTimeout = undefined;
|
||||||
|
|
@ -299,11 +332,16 @@ Bangle.on('lcdPower',on=>{
|
||||||
});
|
});
|
||||||
|
|
||||||
Bangle.on('charging',function(charging) {
|
Bangle.on('charging',function(charging) {
|
||||||
draw(false);
|
draw(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
Bangle.on('lock', function(isLocked) {
|
Bangle.on('lock', function(isLocked) {
|
||||||
drawLock();
|
if(state.sleep){
|
||||||
|
state.sleep=false;
|
||||||
|
draw(false);
|
||||||
|
} else {
|
||||||
|
drawLock();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Bangle.on('touch', function(btn, e){
|
Bangle.on('touch', function(btn, e){
|
||||||
|
|
@ -334,7 +372,7 @@ function queueDraw() {
|
||||||
if (drawTimeout) clearTimeout(drawTimeout);
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
drawTimeout = setTimeout(function() {
|
drawTimeout = setTimeout(function() {
|
||||||
drawTimeout = undefined;
|
drawTimeout = undefined;
|
||||||
draw(false);
|
draw(true);
|
||||||
}, 60000 - (Date.now() % 60000));
|
}, 60000 - (Date.now() % 60000));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue