Change to skin temp characteristic.

Add logging
master
Ivor Hewitt 2021-12-15 22:11:18 +00:00
parent c3605c42c1
commit 13525cd11d
4 changed files with 93 additions and 29 deletions

View File

@ -1,23 +1,47 @@
(function() { (function() {
var gatt;
var state = {gatt : null, primary : null, temp : null, data : null};
//Would it be better to scan by uuid rather than name? // Would it be better to scan by uuid rather than name?
NRF.requestDevice({ timeout: 20000, filters: [{ name: 'CORE [a]' }] }).then(function(device) { NRF.requestDevice({timeout : 20000, filters : [ {namePrefix : 'CORE'} ]})
return device.gatt.connect(); // NRF.requestDevice({timeout : 20000, filters : [ {services :
}).then(function(g) { // '1809','2100'} ]})
gatt = g; .then(function(device) {
return gatt.getPrimaryService("1809"); return device.gatt.connect();
}).then(function(service) { })
return service.getCharacteristic("2A1C"); .then(function(g) {
}).then(function(characteristic) { state.gatt = g;
characteristic.on('characteristicvaluechanged', function(event) { return state.gatt
var dv = event.target.value; .getPrimaryService('00002100-5b1e-4347-b07c-97b514dae121')
var core = (dv.buffer[2]*256+dv.buffer[1])/100; .then(function(service) {
Bangle.emit('Core',{ state.primary = service;
temp:core return state.primary.getCharacteristic(
}); '00002101-5b1e-4347-b07c-97b514dae121');
}); })
return characteristic.startNotifications(); .then(function(c) {
}).then(function() { 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);
});
}); });
})(); })();

View File

@ -1,19 +1,25 @@
Bangle.setLCDPower(1); Bangle.setLCDPower(1);
Bangle.setLCDTimeout(0); Bangle.setLCDTimeout(0);
var btm = g.getHeight()-1; var btm = g.getHeight() - 1;
function onCore(c) { function onCore(c) {
var px = g.getWidth()/2; var px = g.getWidth() / 2;
g.setFontAlign(0,0); g.setFontAlign(0, 0);
g.clearRect(0,24,g.getWidth(),80); g.clearRect(0, 24, g.getWidth(), g.getHeight() - 24);
var str = c.temp + "C";
g.setFontVector(40).drawString(str,px,45); 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(); g.clear();
Bangle.loadWidgets(); Bangle.loadWidgets();
Bangle.drawWidgets(); Bangle.drawWidgets();
g.reset().setFont("6x8",2).setFontAlign(0,0); g.reset().setFont("6x8", 2).setFontAlign(0, 0);
g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16); g.drawString("Please wait...", g.getWidth() / 2, g.getHeight() / 2 - 16);

View File

@ -19,6 +19,9 @@ ${track[0].Heartrate!==undefined ? `<gx:SimpleArrayField name="heartrate" type="
</gx:SimpleArrayField>`:``} </gx:SimpleArrayField>`:``}
${track[0].Steps!==undefined ? `<gx:SimpleArrayField name="steps" type="int"> ${track[0].Steps!==undefined ? `<gx:SimpleArrayField name="steps" type="int">
<displayName>Step Count</displayName>`:``} <displayName>Step Count</displayName>`:``}
${track[0].Core!==undefined ? `<gx:SimpleArrayField name="temp" type="int">
<displayName>Core Temp</displayName>
</gx:SimpleArrayField>`:``}
</gx:SimpleArrayField> </gx:SimpleArrayField>
</Schema> </Schema>
<Folder> <Folder>
@ -37,6 +40,9 @@ ${track.map(pt=>` <gx:value>${0|pt.Heartrate}</gx:value>\n`).join("")
${track[0].Steps!==undefined ? `<gx:SimpleArrayData name="steps"> ${track[0].Steps!==undefined ? `<gx:SimpleArrayData name="steps">
${track.map(pt=>` <gx:value>${0|pt.Steps}</gx:value>\n`).join("")} ${track.map(pt=>` <gx:value>${0|pt.Steps}</gx:value>\n`).join("")}
</gx:SimpleArrayData>`:``} </gx:SimpleArrayData>`:``}
${track[0].Core!==undefined ? `<gx:SimpleArrayData name="temp">
${track.map(pt=>` <gx:value>${0|pt.Core}</gx:value>\n`).join("")}
</gx:SimpleArrayData>`:``}
</SchemaData> </SchemaData>
</ExtendedData> </ExtendedData>
</gx:Track> </gx:Track>

View File

@ -82,6 +82,34 @@
draw : (x,y) => g.setColor(hasBPM?"#f00":"#888").drawImage(atob("DAyBAAAAAD/H/n/n/j/D/B+AYAAAAA=="),x,y) 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() { steps:function() {
var lastSteps = 0; var lastSteps = 0;
return { return {