130 lines
3.0 KiB
JavaScript
130 lines
3.0 KiB
JavaScript
import document from "document";
|
|
import clock from "clock";
|
|
import { preferences } from "user-settings";
|
|
import { HeartRateSensor } from "heart-rate";
|
|
import { vibration } from "haptics";
|
|
import { today } from "user-activity";
|
|
import { display } from "display";
|
|
import * as messaging from "messaging";
|
|
import * as fs from "fs";
|
|
import * as digits from "../common/digits";
|
|
|
|
let hrm = new HeartRateSensor;
|
|
let hrTimer;
|
|
|
|
let touchArea = document.getElementById('touchArea');
|
|
|
|
let settings = {
|
|
colors: ['#843E86', '#00b0a0', 'white'],
|
|
dateReverse: false // US date
|
|
};
|
|
|
|
var storedSettings;
|
|
var fileSuccess = true;
|
|
console.log('reading settings');
|
|
try {
|
|
storedSettings = fs.readFileSync("settings.txt", "cbor");
|
|
}
|
|
catch(err) {
|
|
fileSuccess = false;
|
|
console.log('settings not found');
|
|
}
|
|
if (fileSuccess) {
|
|
settings = storedSettings;
|
|
}
|
|
|
|
function updateClock() {
|
|
let currDate = new Date();
|
|
let hours = currDate.getHours();
|
|
let displayHours = hours;
|
|
let day = currDate.getDate();
|
|
let month = currDate.getMonth()+1;
|
|
|
|
if (preferences.clockDisplay === '12h') {
|
|
displayHours = displayHours % 12;
|
|
displayHours = displayHours ? displayHours : 12;
|
|
}
|
|
|
|
let minutes = currDate.getMinutes();
|
|
|
|
let newDigits = [
|
|
Math.floor(displayHours/10),
|
|
displayHours%10,
|
|
Math.floor(minutes/10),
|
|
minutes%10
|
|
];
|
|
newDigits = [1, 2, 5, 7];
|
|
let dateString;
|
|
if (settings.dateReverse) {
|
|
dateString = month+"/"+day;
|
|
} else {
|
|
dateString = day+"/"+month;
|
|
}
|
|
digits.setSmallDigits('date', dateString, true);
|
|
digits.setDigits([newDigits[0], newDigits[1], newDigits[2], newDigits[3]], settings.colors);
|
|
}
|
|
|
|
hrm.onreading = () => {
|
|
if (display.on) {
|
|
let heartRate = (hrm.heartRate || null);
|
|
digits.setSmallDigits('hr', heartRate, false);
|
|
}
|
|
clearTimeout(hrTimer);
|
|
hrTimer = setTimeout(() => {
|
|
digits.setSmallDigits('hr', null, false);
|
|
}, 5000);
|
|
hrm.stop();
|
|
}
|
|
|
|
function updateSteps() {
|
|
if (display.on) {
|
|
let steps = (today.adjusted.steps || null);
|
|
digits.setSmallDigits('steps', steps, true);
|
|
}
|
|
}
|
|
|
|
function updateHealthDisplay() {
|
|
hrm.start();
|
|
updateSteps();
|
|
}
|
|
|
|
clock.granularity = "minutes";
|
|
clock.ontick = () => updateClock();
|
|
|
|
setInterval(() => {
|
|
updateHealthDisplay();
|
|
}, 2000);
|
|
|
|
updateHealthDisplay();
|
|
|
|
messaging.peerSocket.onmessage = e => {
|
|
console.log("Message received -> "+e.data.key+": "+e.data.newValue);
|
|
display.poke();
|
|
vibration.start("bump");
|
|
switch (e.data.key) {
|
|
case 'hrcolor':
|
|
settings.colors[0] = e.data.newValue;
|
|
break;
|
|
case 'mincolor':
|
|
settings.colors[1] = e.data.newValue;
|
|
break;
|
|
case 'date':
|
|
settings.dateReverse = e.data.newValue;
|
|
break;
|
|
};
|
|
updateClock();
|
|
|
|
fs.writeFileSync("settings.txt", settings, "cbor");
|
|
}
|
|
|
|
messaging.peerSocket.onopen = () => {
|
|
console.log("Clockface opened socket");
|
|
};
|
|
|
|
messaging.peerSocket.close = () => {
|
|
console.log("Clockface closed socket");
|
|
};
|
|
|
|
messaging.peerSocket.onerror = (err) => {
|
|
console.log("Clockface socket error: " + err.code + " - " + err.message);
|
|
} |