forked from FOSS/BangleApps
115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
//
|
|
// If enabled in settings run constantly in background
|
|
//
|
|
(function() {
|
|
var log = function() {};//print
|
|
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;
|
|
} else {
|
|
this.skin = 0;
|
|
}
|
|
if (flags & 2) {
|
|
this.core = (dv.buffer[2] * 256 + dv.buffer[1]) / 100;
|
|
} else {
|
|
this.core = 0;
|
|
}
|
|
|
|
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() {
|
|
log("Scanning for CoreTemp sensor...");
|
|
NRF.requestDevice({active:true,timeout : 20000, filters : [ {namePrefix : 'CORE'} ]})
|
|
.then(function(d) {
|
|
device = d;
|
|
log("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() {
|
|
log("Done!");
|
|
// getSensorBatteryLevel(gatt);
|
|
})
|
|
.catch(function(e) {
|
|
log(e.toString(), "ERROR");
|
|
log(e);
|
|
});
|
|
}
|
|
|
|
function connection_end() {
|
|
if (gatt != undefined)
|
|
gatt.disconnect();
|
|
}
|
|
|
|
settings = require("Storage").readJSON("coretemp.json", 1) || {};
|
|
log("Settings:");
|
|
log(settings);
|
|
|
|
if (settings.enabled) {
|
|
connection_setup();
|
|
NRF.on('disconnect', connection_setup);
|
|
}
|
|
|
|
E.on('kill', () => { connection_end(); });
|
|
|
|
})();
|