diff --git a/apps.json b/apps.json index ad54b1d43..26c17a503 100644 --- a/apps.json +++ b/apps.json @@ -4971,7 +4971,8 @@ {"name":"coretemp.wid.js","url":"widget.js"}, {"name":"coretemp.app.js","url":"coretemp.js"}, {"name":"coretemp.settings.js","url":"settings.js"}, - {"name":"coretemp.img","url":"coretemp-icon.js","evaluate":true} + {"name":"coretemp.img","url":"coretemp-icon.js","evaluate":true}, + {"name":"coretemp.boot.js","url":"boot.js"} ], "data": [{"name":"coretemp.json","url":"app-settings.json"}] }, diff --git a/apps/coretemp/boot.js b/apps/coretemp/boot.js index 61eefd6c8..3ae9b41ac 100644 --- a/apps/coretemp/boot.js +++ b/apps/coretemp/boot.js @@ -1,5 +1,8 @@ +//If enabled run in the background continuously. + (function() { +var settings = {}; var device; var gatt; var service; @@ -51,11 +54,11 @@ function getSensorBatteryLevel(gatt) { } function connection_setup() { - E.showMessage("Scanning for CoreTemp sensor..."); + console.log("Scanning for CoreTemp sensor..."); NRF.requestDevice({timeout : 20000, filters : [ {namePrefix : 'CORE'} ]}) .then(function(d) { device = d; - E.showMessage("Found device"); + console.log("Found device"); return device.gatt.connect(); }) .then(function(g) { @@ -76,10 +79,10 @@ function connection_setup() { .then(function() { console.log("Done!"); // getSensorBatteryLevel(gatt); - g.reset().clearRect(Bangle.appRect).flip(); +// g.reset().clearRect(Bangle.appRect).flip(); }) .catch(function(e) { - E.showMessage(e.toString(), "ERROR"); + console.log(e.toString(), "ERROR"); console.log(e); }); } @@ -88,13 +91,17 @@ function connection_end() { if (gatt != undefined) gatt.disconnect(); } -connection_setup(); +settings = require("Storage").readJSON("coretemp.json",1)||{}; +console.log("Settings:"); +console.log(settings); + +if (settings.enabled) { + connection_setup(); + NRF.on('disconnect', connection_setup); +} E.on('kill', () => { connection_end(); }); -// move into setup -NRF.on('disconnect', connection_setup); // restart if disconnected - // Bangle.loadWidgets(); // Bangle.drawWidgets(); })(); diff --git a/apps/coretemp/coretemp.js b/apps/coretemp/coretemp.js index 086614ed9..1ad380855 100644 --- a/apps/coretemp/coretemp.js +++ b/apps/coretemp/coretemp.js @@ -1,4 +1,4 @@ -// Simply listen for core events and show +// Simply listen for core events and show data Bangle.setLCDPower(1); Bangle.setLCDTimeout(0); diff --git a/apps/coretemp/settings.js b/apps/coretemp/settings.js index 2c541f72c..5cd98ae09 100644 --- a/apps/coretemp/settings.js +++ b/apps/coretemp/settings.js @@ -22,7 +22,14 @@ storage.write(SETTINGS_FILE, s); } } - + + function updateSettings() { + require("Storage").write("coretemp.json", settings); + if (WIDGETS["sensors"]) + WIDGETS["sensors"].reload(); + return; +} + const menu = { '' : {'title' : 'CoreTemp sensor'}, '< Back' : back, diff --git a/apps/coretemp/widget.js b/apps/coretemp/widget.js index 3eabf85d6..4fe76ea38 100644 --- a/apps/coretemp/widget.js +++ b/apps/coretemp/widget.js @@ -1,124 +1,38 @@ -// Widget to run sensors -// BT HRM / coretemp / csc +// Widget to show sensor status (() => { var settings = {}; - -var device; -var gatt; -var service; -var characteristic; - -class CoreSensor { - constructor() { - this.unit = ""; - this.core = -1; - this.skin = -1; - this.battery = 0; - } - - updateSensor(event) { - if (event.target.uuid == "00002101-5b1e-4347-b07c-97b514dae121") { - var dv = event.target.value; - var flags = dv.buffer[0]; - - if (flags & 8) { - this.unit = "F"; - } else { - this.unit = "C"; - } - - if (flags & 1) this.skin = (dv.buffer[4] * 256 + dv.buffer[3]) / 100; - if (flags & 2) this.core = (dv.buffer[2] * 256 + dv.buffer[1]) / 100; - - Bangle.emit('CoreTemp', - {core : this.core, skin : this.skin, unit : this.unit}); - } - } - - updateBatteryLevel(event) { - if (event.target.uuid == "0x2a19") - this.battery = event.target.value.getUint8(0); - } -} - -var mySensor = new CoreSensor(); - -function getSensorBatteryLevel(gatt) { - gatt.getPrimaryService("180f") - .then(function(s) { return s.getCharacteristic("2a19"); }) - .then(function(c) { - c.on('characteristicvaluechanged', - (event) => mySensor.updateBatteryLevel(event)); - return c.startNotifications(); - }); -} - -function connection_setup() { - E.showMessage("Scanning for CoreTemp sensor..."); - NRF.requestDevice({timeout : 20000, filters : [ {namePrefix : 'CORE'} ]}) - .then(function(d) { - device = d; - E.showMessage("Found device"); - return device.gatt.connect(); - }) - .then(function(g) { - gatt = g; - return gatt.getPrimaryService('00002100-5b1e-4347-b07c-97b514dae121'); - }) - .then(function(s) { - service = s; - return service.getCharacteristic( - '00002101-5b1e-4347-b07c-97b514dae121'); - }) - .then(function(c) { - characteristic = c; - characteristic.on('characteristicvaluechanged', - (event) => mySensor.updateSensor(event)); - return characteristic.startNotifications(); - }) - .then(function() { - console.log("Done!"); -// getSensorBatteryLevel(gatt); - g.reset().clearRect(Bangle.appRect).flip(); - }) - .catch(function(e) { - E.showMessage(e.toString(), "ERROR"); - console.log(e); - }); -} -function connection_end() { - if (gatt != undefined) gatt.disconnect(); -} + var count=0; // draw your widget function draw() { -// if (!) return; + if (!settings.enabled) return; g.reset(); g.setFontAlign(0,0); g.clearRect(this.x,this.y,this.x+23,this.y+23); - g.setColor(settings.enabled?"#00ff00":"#80ff00"); + g.setColor((count&1)?"#00ff00":"#80ff00"); g.fillCircle(this.x+6,this.y+6,4); g.fillCircle(this.x+16,this.y+16,4); g.setColor(-1); // change color back to be nice to other apps } -// function onHRM(hrm) { -// WIDGETS["sensors"].draw(); -// } +// Set a listener to 'twinkle' + function onTemp(temp) { + count=count+1; + WIDGETS["sensors"].draw(); + } - // Called by sensor app to enable listeners + // Called by sensor app to update status function reload() { settings = require("Storage").readJSON("coretemp.json",1)||{}; // settings.fileNbr |= 0; -// Bangle.removeListener('HRM',onHRM); + Bangle.removeListener('CoreTemp',onTemp); - if (settings.coreOn) { + if (settings.enabled) { WIDGETS["sensors"].width = 24; - connection_setup(); + Bangle.on('CoreTemp', onTemp); } else { WIDGETS["sensors"].width = 0; - connection_end(); } } @@ -129,4 +43,5 @@ function connection_end() { }}; // load settings, set correct widget width reload(); + })()