commit dc15fe52f99a3d66883509beb52e4cc81ea908a7 Author: Alina Marquardt Date: Tue Apr 4 23:17:44 2023 +0200 initial commit diff --git a/app/index.js b/app/index.js new file mode 100644 index 0000000..e0a68eb --- /dev/null +++ b/app/index.js @@ -0,0 +1,130 @@ +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); +} \ No newline at end of file diff --git a/common/characters.js b/common/characters.js new file mode 100644 index 0000000..d382375 --- /dev/null +++ b/common/characters.js @@ -0,0 +1,64 @@ +export const charwidth = 3; +export const charheight = 5; + +export const numbers = [[ + [1,1,1], + [1,0,1], + [1,0,1], + [1,0,1], + [1,1,1] +], [ + [0,1,1], + [0,0,1], + [0,0,1], + [0,0,1], + [0,0,1] +], [ + [1,1,1], + [0,0,1], + [1,1,1], + [1,0,0], + [1,1,1] +], [ + [1,1,1], + [0,0,1], + [0,1,1], + [0,0,1], + [1,1,1] +], [ + [1,0,1], + [1,0,1], + [1,1,1], + [0,0,1], + [0,0,1] +], [ + [1,1,1], + [1,0,0], + [1,1,1], + [0,0,1], + [1,1,1] +], [ + [1,1,1], + [1,0,0], + [1,1,1], + [1,0,1], + [1,1,1] +], [ + [1,1,1], + [0,0,1], + [0,0,1], + [0,0,1], + [0,0,1] +], [ + [1,1,1], + [1,0,1], + [1,1,1], + [1,0,1], + [1,1,1] +], [ + [1,1,1], + [1,0,1], + [1,1,1], + [0,0,1], + [0,0,1] +]]; \ No newline at end of file diff --git a/common/digits.js b/common/digits.js new file mode 100644 index 0000000..d2eeceb --- /dev/null +++ b/common/digits.js @@ -0,0 +1,125 @@ +import document from "document"; +import * as characters from "characters"; + +function getSquares(character) { + return characters.numbers[character]; +} + +function splitNumber(number) { + let numberString = number.toString(); + return splitString(numberString); +} + +function splitString(input) { + let chars = []; + for (let i = 0; i < input.length; i += 1) { + chars.push(input.charAt(i)); + } + return chars; +} + +const smallDigits = ['0','1','2','3','4','5','6','7','8','9','/']; + +export function setSmallDigits(name, input, rightJustify) { + let chars = []; + let smallNumElem = document.getElementById(name); + + if (typeof input === 'number') { + chars = splitNumber(input); + } else if (typeof input === 'string') { + chars = splitString(input); + } + if (rightJustify) { + chars = chars.reverse(); + } + for (let i=0; i<6; i++) { + let digitElem = smallNumElem.getElementById('digit'+(i+1)); + let char = chars[i]; + if (rightJustify) { + char = chars[5-i]; + } + if (typeof char === 'number') { + char = char.toString(); + } + if (typeof char !== 'undefined' && smallDigits.indexOf(char) > -1) { + if (char == "/") { + char = "slash"; + } + digitElem.href="img/"+char+".png"; + } else { + digitElem.href=""; + } + } +} + +export function setDigits(chars, colors) { + let matrix = [ + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0], + ]; + + for (let char = 0; char < 4; char++) { + let squares = getSquares(chars[char]); + let offsX = 0; + let offsY = 0; + let color = 0; + switch (char) { + case 0: + color = 1; + break; + case 1: + color = 1; + offsX = 4; + break; + case 2: + color = 2; + offsY = 2; + break; + case 3: + color = 2; + offsX = 4; + offsY = 2; + break; + } + for (let i = 0; i < (characters.charwidth*characters.charheight); i++) { + let row = Math.floor(i/characters.charwidth); + let col = i%characters.charwidth; + matrix[row+offsY][col+offsX] += color*squares[row][col]; + } + } + + for (let i = 0; i < (7*7); i++) { + let col = i%7; + let row = Math.floor(i/7); + let square = matrix[row][col]; + let locationCode = (row+1)+'-'+(col+1); + let squareElem = document.getElementById('squares').getElementById(locationCode); + + if (square >= 1) { + squareElem.style.display = 'inline'; + squareElem.href = "img/"+locationCode+".png"; + switch (square) { + case 1: + squareElem.layer = 1; + squareElem.style.fill = colors[0]; + break; + case 2: + squareElem.layer = 2; + squareElem.style.fill = colors[1]; + break; + case 3: + squareElem.layer = 3; + squareElem.style.fill = colors[2]; + break; + } + } else { + squareElem.style.display = 'none'; + squareElem.href = ""; + } + } +} \ No newline at end of file diff --git a/companion/index.js b/companion/index.js new file mode 100644 index 0000000..f219174 --- /dev/null +++ b/companion/index.js @@ -0,0 +1,43 @@ +import * as messaging from "messaging"; +import { settingsStorage } from "settings"; + +//console.log("Companion Started"); + +messaging.peerSocket.onopen = () => { +}; + +messaging.peerSocket.close = () => { +}; + +settingsStorage.onchange = evt => { + let data = {} + switch(evt.key) { + case 'mincolor': + case 'hrcolor': + data = { + key: evt.key, + newValue: JSON.parse(evt.newValue) + }; + break; + case 'date': + data = { + key: evt.key, + newValue: (evt.newValue === 'true') + }; + break; + default: + data = { + key: evt.key, + newValue: evt.newValue + }; + break; + } + + sendVal(data); +}; + +function sendVal(data) { + if (messaging.peerSocket.readyState === messaging.peerSocket.OPEN) { + messaging.peerSocket.send(data); + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..9c1feb4 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "fitbit": { + "appUUID": "06f0823f-7344-4ed2-a1f3-68427356c245", + "appType": "clockface", + "appDisplayName": "Frosted", + "iconFile": "resources/icon.png", + "wipeColor": "#607d8b", + "requestedPermissions": [ + "access_activity", + "access_heart_rate" + ], + "buildTargets": [ + "meson", + "higgs" + ], + "i18n": { + "en": { + "name": "Frosted" + } + } + } +} \ No newline at end of file diff --git a/resources/img/0.png b/resources/img/0.png new file mode 100644 index 0000000..c4be0f1 Binary files /dev/null and b/resources/img/0.png differ diff --git a/resources/img/1-1.png b/resources/img/1-1.png new file mode 100644 index 0000000..9e31278 Binary files /dev/null and b/resources/img/1-1.png differ diff --git a/resources/img/1-2.png b/resources/img/1-2.png new file mode 100644 index 0000000..185d457 Binary files /dev/null and b/resources/img/1-2.png differ diff --git a/resources/img/1-3.png b/resources/img/1-3.png new file mode 100644 index 0000000..a17d2e7 Binary files /dev/null and b/resources/img/1-3.png differ diff --git a/resources/img/1-4.png b/resources/img/1-4.png new file mode 100644 index 0000000..3f108b1 Binary files /dev/null and b/resources/img/1-4.png differ diff --git a/resources/img/1-5.png b/resources/img/1-5.png new file mode 100644 index 0000000..001ceb8 Binary files /dev/null and b/resources/img/1-5.png differ diff --git a/resources/img/1-6.png b/resources/img/1-6.png new file mode 100644 index 0000000..1aec03d Binary files /dev/null and b/resources/img/1-6.png differ diff --git a/resources/img/1-7.png b/resources/img/1-7.png new file mode 100644 index 0000000..609ae99 Binary files /dev/null and b/resources/img/1-7.png differ diff --git a/resources/img/1.png b/resources/img/1.png new file mode 100644 index 0000000..8bcebda Binary files /dev/null and b/resources/img/1.png differ diff --git a/resources/img/2-1.png b/resources/img/2-1.png new file mode 100644 index 0000000..cda6891 Binary files /dev/null and b/resources/img/2-1.png differ diff --git a/resources/img/2-2.png b/resources/img/2-2.png new file mode 100644 index 0000000..7704e28 Binary files /dev/null and b/resources/img/2-2.png differ diff --git a/resources/img/2-3.png b/resources/img/2-3.png new file mode 100644 index 0000000..6c3754b Binary files /dev/null and b/resources/img/2-3.png differ diff --git a/resources/img/2-4.png b/resources/img/2-4.png new file mode 100644 index 0000000..76500f5 Binary files /dev/null and b/resources/img/2-4.png differ diff --git a/resources/img/2-5.png b/resources/img/2-5.png new file mode 100644 index 0000000..fbbc96a Binary files /dev/null and b/resources/img/2-5.png differ diff --git a/resources/img/2-6.png b/resources/img/2-6.png new file mode 100644 index 0000000..fc3da7a Binary files /dev/null and b/resources/img/2-6.png differ diff --git a/resources/img/2-7.png b/resources/img/2-7.png new file mode 100644 index 0000000..ed8c405 Binary files /dev/null and b/resources/img/2-7.png differ diff --git a/resources/img/2.png b/resources/img/2.png new file mode 100644 index 0000000..f9cf0c2 Binary files /dev/null and b/resources/img/2.png differ diff --git a/resources/img/3-1.png b/resources/img/3-1.png new file mode 100644 index 0000000..7250fc0 Binary files /dev/null and b/resources/img/3-1.png differ diff --git a/resources/img/3-2.png b/resources/img/3-2.png new file mode 100644 index 0000000..e3debcc Binary files /dev/null and b/resources/img/3-2.png differ diff --git a/resources/img/3-3.png b/resources/img/3-3.png new file mode 100644 index 0000000..2fc4573 Binary files /dev/null and b/resources/img/3-3.png differ diff --git a/resources/img/3-4.png b/resources/img/3-4.png new file mode 100644 index 0000000..8c4bce0 Binary files /dev/null and b/resources/img/3-4.png differ diff --git a/resources/img/3-5.png b/resources/img/3-5.png new file mode 100644 index 0000000..eb4f423 Binary files /dev/null and b/resources/img/3-5.png differ diff --git a/resources/img/3-6.png b/resources/img/3-6.png new file mode 100644 index 0000000..4e302d7 Binary files /dev/null and b/resources/img/3-6.png differ diff --git a/resources/img/3-7.png b/resources/img/3-7.png new file mode 100644 index 0000000..c0a2898 Binary files /dev/null and b/resources/img/3-7.png differ diff --git a/resources/img/3.png b/resources/img/3.png new file mode 100644 index 0000000..670d8f6 Binary files /dev/null and b/resources/img/3.png differ diff --git a/resources/img/4-1.png b/resources/img/4-1.png new file mode 100644 index 0000000..2cf4468 Binary files /dev/null and b/resources/img/4-1.png differ diff --git a/resources/img/4-2.png b/resources/img/4-2.png new file mode 100644 index 0000000..8426db9 Binary files /dev/null and b/resources/img/4-2.png differ diff --git a/resources/img/4-3.png b/resources/img/4-3.png new file mode 100644 index 0000000..673603a Binary files /dev/null and b/resources/img/4-3.png differ diff --git a/resources/img/4-4.png b/resources/img/4-4.png new file mode 100644 index 0000000..3eb3491 Binary files /dev/null and b/resources/img/4-4.png differ diff --git a/resources/img/4-5.png b/resources/img/4-5.png new file mode 100644 index 0000000..a1fea50 Binary files /dev/null and b/resources/img/4-5.png differ diff --git a/resources/img/4-6.png b/resources/img/4-6.png new file mode 100644 index 0000000..5384709 Binary files /dev/null and b/resources/img/4-6.png differ diff --git a/resources/img/4-7.png b/resources/img/4-7.png new file mode 100644 index 0000000..4e9a1cf Binary files /dev/null and b/resources/img/4-7.png differ diff --git a/resources/img/4.png b/resources/img/4.png new file mode 100644 index 0000000..d98c0ba Binary files /dev/null and b/resources/img/4.png differ diff --git a/resources/img/5-1.png b/resources/img/5-1.png new file mode 100644 index 0000000..5db4927 Binary files /dev/null and b/resources/img/5-1.png differ diff --git a/resources/img/5-2.png b/resources/img/5-2.png new file mode 100644 index 0000000..8086c38 Binary files /dev/null and b/resources/img/5-2.png differ diff --git a/resources/img/5-3.png b/resources/img/5-3.png new file mode 100644 index 0000000..7c7c794 Binary files /dev/null and b/resources/img/5-3.png differ diff --git a/resources/img/5-4.png b/resources/img/5-4.png new file mode 100644 index 0000000..8aa6c11 Binary files /dev/null and b/resources/img/5-4.png differ diff --git a/resources/img/5-5.png b/resources/img/5-5.png new file mode 100644 index 0000000..99a4011 Binary files /dev/null and b/resources/img/5-5.png differ diff --git a/resources/img/5-6.png b/resources/img/5-6.png new file mode 100644 index 0000000..eecc352 Binary files /dev/null and b/resources/img/5-6.png differ diff --git a/resources/img/5-7.png b/resources/img/5-7.png new file mode 100644 index 0000000..68b620f Binary files /dev/null and b/resources/img/5-7.png differ diff --git a/resources/img/5.png b/resources/img/5.png new file mode 100644 index 0000000..70b53ff Binary files /dev/null and b/resources/img/5.png differ diff --git a/resources/img/6-1.png b/resources/img/6-1.png new file mode 100644 index 0000000..a25ee48 Binary files /dev/null and b/resources/img/6-1.png differ diff --git a/resources/img/6-2.png b/resources/img/6-2.png new file mode 100644 index 0000000..aee2111 Binary files /dev/null and b/resources/img/6-2.png differ diff --git a/resources/img/6-3.png b/resources/img/6-3.png new file mode 100644 index 0000000..e23090e Binary files /dev/null and b/resources/img/6-3.png differ diff --git a/resources/img/6-4.png b/resources/img/6-4.png new file mode 100644 index 0000000..fc84e44 Binary files /dev/null and b/resources/img/6-4.png differ diff --git a/resources/img/6-5.png b/resources/img/6-5.png new file mode 100644 index 0000000..d247c5e Binary files /dev/null and b/resources/img/6-5.png differ diff --git a/resources/img/6-6.png b/resources/img/6-6.png new file mode 100644 index 0000000..589d4ab Binary files /dev/null and b/resources/img/6-6.png differ diff --git a/resources/img/6-7.png b/resources/img/6-7.png new file mode 100644 index 0000000..744e6bc Binary files /dev/null and b/resources/img/6-7.png differ diff --git a/resources/img/6.png b/resources/img/6.png new file mode 100644 index 0000000..f503b2a Binary files /dev/null and b/resources/img/6.png differ diff --git a/resources/img/7-1.png b/resources/img/7-1.png new file mode 100644 index 0000000..269ec45 Binary files /dev/null and b/resources/img/7-1.png differ diff --git a/resources/img/7-2.png b/resources/img/7-2.png new file mode 100644 index 0000000..c608c8a Binary files /dev/null and b/resources/img/7-2.png differ diff --git a/resources/img/7-3.png b/resources/img/7-3.png new file mode 100644 index 0000000..22435ae Binary files /dev/null and b/resources/img/7-3.png differ diff --git a/resources/img/7-4.png b/resources/img/7-4.png new file mode 100644 index 0000000..35b3ac8 Binary files /dev/null and b/resources/img/7-4.png differ diff --git a/resources/img/7-5.png b/resources/img/7-5.png new file mode 100644 index 0000000..a7c8812 Binary files /dev/null and b/resources/img/7-5.png differ diff --git a/resources/img/7-6.png b/resources/img/7-6.png new file mode 100644 index 0000000..c140289 Binary files /dev/null and b/resources/img/7-6.png differ diff --git a/resources/img/7-7.png b/resources/img/7-7.png new file mode 100644 index 0000000..d25e969 Binary files /dev/null and b/resources/img/7-7.png differ diff --git a/resources/img/7.png b/resources/img/7.png new file mode 100644 index 0000000..95ff06c Binary files /dev/null and b/resources/img/7.png differ diff --git a/resources/img/8.png b/resources/img/8.png new file mode 100644 index 0000000..bef2259 Binary files /dev/null and b/resources/img/8.png differ diff --git a/resources/img/9.png b/resources/img/9.png new file mode 100644 index 0000000..26ce02b Binary files /dev/null and b/resources/img/9.png differ diff --git a/resources/img/coordinates.txt b/resources/img/coordinates.txt new file mode 100644 index 0000000..e60673b --- /dev/null +++ b/resources/img/coordinates.txt @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/img/slash.png b/resources/img/slash.png new file mode 100644 index 0000000..57bf0e3 Binary files /dev/null and b/resources/img/slash.png differ diff --git a/resources/index.gui b/resources/index.gui new file mode 100644 index 0000000..6c4a132 --- /dev/null +++ b/resources/index.gui @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/index~348x250.gui b/resources/index~348x250.gui new file mode 100644 index 0000000..50f580e --- /dev/null +++ b/resources/index~348x250.gui @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/styles.css b/resources/styles.css new file mode 100644 index 0000000..e69de29 diff --git a/resources/widgets.gui b/resources/widgets.gui new file mode 100644 index 0000000..e2fa684 --- /dev/null +++ b/resources/widgets.gui @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/settings/index.jsx b/settings/index.jsx new file mode 100644 index 0000000..bceae31 --- /dev/null +++ b/settings/index.jsx @@ -0,0 +1,76 @@ +function Frosted(props) { + return ( + +
+ + + +
+
+ ); +} + +registerSettingsPage(Frosted); \ No newline at end of file