mirror of https://github.com/espruino/BangleApps
parent
c3605c42c1
commit
13525cd11d
|
@ -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);
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -19,6 +19,9 @@ ${track[0].Heartrate!==undefined ? `<gx:SimpleArrayField name="heartrate" type="
|
|||
</gx:SimpleArrayField>`:``}
|
||||
${track[0].Steps!==undefined ? `<gx:SimpleArrayField name="steps" type="int">
|
||||
<displayName>Step Count</displayName>`:``}
|
||||
${track[0].Core!==undefined ? `<gx:SimpleArrayField name="temp" type="int">
|
||||
<displayName>Core Temp</displayName>
|
||||
</gx:SimpleArrayField>`:``}
|
||||
</gx:SimpleArrayField>
|
||||
</Schema>
|
||||
<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.map(pt=>` <gx:value>${0|pt.Steps}</gx:value>\n`).join("")}
|
||||
</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>
|
||||
</ExtendedData>
|
||||
</gx:Track>
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue