diff --git a/apps/coretemp/boot.js b/apps/coretemp/boot.js index 59e227dad..a73c67b47 100644 --- a/apps/coretemp/boot.js +++ b/apps/coretemp/boot.js @@ -1,23 +1,47 @@ (function() { - var gatt; - - //Would it be better to scan by uuid rather than name? - NRF.requestDevice({ timeout: 20000, filters: [{ name: 'CORE [a]' }] }).then(function(device) { - return device.gatt.connect(); - }).then(function(g) { - gatt = g; - return gatt.getPrimaryService("1809"); - }).then(function(service) { - return service.getCharacteristic("2A1C"); - }).then(function(characteristic) { - characteristic.on('characteristicvaluechanged', function(event) { - var dv = event.target.value; - var core = (dv.buffer[2]*256+dv.buffer[1])/100; - Bangle.emit('Core',{ - temp:core - }); - }); - return characteristic.startNotifications(); - }).then(function() { + +var state = {gatt : null, primary : null, temp : null, data : null}; +// Would it be better to scan by uuid rather than name? +NRF.requestDevice({timeout : 20000, filters : [ {namePrefix : 'CORE'} ]}) + // NRF.requestDevice({timeout : 20000, filters : [ {services : + // '1809','2100'} ]}) + .then(function(device) { + return device.gatt.connect(); + }) + .then(function(g) { + state.gatt = g; + return state.gatt + .getPrimaryService('00002100-5b1e-4347-b07c-97b514dae121') + .then(function(service) { + state.primary = service; + return state.primary.getCharacteristic( + '00002101-5b1e-4347-b07c-97b514dae121'); + }) + .then(function(c) { + state.data = c; + state.data.on('characteristicvaluechanged', function(event) { + var dv = event.target.value; + var flags = dv.buffer[0]; + var unit, core = -1, skin = -1; + + if (flags & 8) { + unit = "F"; + } else { + unit = "C"; + } + + if (flags & 1) + skin = (dv.buffer[4] * 256 + dv.buffer[3]) / 100; + if (flags & 2) + core = (dv.buffer[2] * 256 + dv.buffer[1]) / 100; + + Bangle.emit('CoreTemp', {core : core, skin : skin, unit : unit}); + }); + return c.startNotifications(); + }) + .catch(function(e) { + E.showMessage(e.toString(), "ERROR"); + console.log(e); + }); }); })(); diff --git a/apps/coretemp/coretemp.js b/apps/coretemp/coretemp.js index 226508c83..1856057a4 100644 --- a/apps/coretemp/coretemp.js +++ b/apps/coretemp/coretemp.js @@ -1,19 +1,25 @@ + + Bangle.setLCDPower(1); Bangle.setLCDTimeout(0); -var btm = g.getHeight()-1; +var btm = g.getHeight() - 1; function onCore(c) { - var px = g.getWidth()/2; - g.setFontAlign(0,0); - g.clearRect(0,24,g.getWidth(),80); - var str = c.temp + "C"; - g.setFontVector(40).drawString(str,px,45); + var px = g.getWidth() / 2; + g.setFontAlign(0, 0); + g.clearRect(0, 24, g.getWidth(), g.getHeight() - 24); + + var core = "Core: " + c.core + c.unit; + var skin = "Skin: " + c.skin + c.unit; + + g.setFontVector(24).drawString(core, px, 45); + g.setFontVector(24).drawString(skin, px, 65); } -Bangle.on('Core', onCore); +Bangle.on('CoreTemp', onCore); g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); -g.reset().setFont("6x8",2).setFontAlign(0,0); -g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16); +g.reset().setFont("6x8", 2).setFontAlign(0, 0); +g.drawString("Please wait...", g.getWidth() / 2, g.getHeight() / 2 - 16); diff --git a/apps/recorder/interface.html b/apps/recorder/interface.html index ad0de4887..81ce71e5d 100644 --- a/apps/recorder/interface.html +++ b/apps/recorder/interface.html @@ -19,6 +19,9 @@ ${track[0].Heartrate!==undefined ? ` Step Count`:``} +${track[0].Core!==undefined ? ` + Core Temp + `:``} @@ -37,6 +40,9 @@ ${track.map(pt=>` ${0|pt.Heartrate}\n`).join("") ${track[0].Steps!==undefined ? ` ${track.map(pt=>` ${0|pt.Steps}\n`).join("")} `:``} +${track[0].Core!==undefined ? ` +${track.map(pt=>` ${0|pt.Core}\n`).join("")} + `:``} diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 09893bbb7..144164f4c 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -82,6 +82,34 @@ draw : (x,y) => g.setColor(hasBPM?"#f00":"#888").drawImage(atob("DAyBAAAAAD/H/n/n/j/D/B+AYAAAAA=="),x,y) }; }, + + temp:function() { + var temp = 0; + var hasCore = false; + function onCore(c) { + temp=c.core; + hasCore = true; + } + return { + name : "Core", + fields : ["Core"], + getValues : () => { + var r = temp; + return r; + }, + start : () => { + hasCore = false; + Bangle.on('CoreTemp', onCore); +// Bangle.setHRMPower(1,"recorder"); + }, + stop : () => { + hasCore = false; + Bangle.removeListener('CoreTemp', onCore); +// Bangle.setHRMPower(0,"recorder"); + }, + draw : (x,y) => g.reset().drawImage(atob("DAyBAAADDHnnnnnnnnnnjDmDnDnAAA=="),x,y) + }; + }, steps:function() { var lastSteps = 0; return {