Switch to widget

pull/1189/head
Ivor Hewitt 2021-12-18 22:10:59 +00:00
parent fa66b67816
commit 3286d6cb2d
3 changed files with 139 additions and 3 deletions

View File

@ -4960,7 +4960,7 @@
{ {
"id": "coretemp", "id": "coretemp",
"name": "Core Temp Display", "name": "Core Temp Display",
"version": "0.02", "version": "0.03",
"description": "Display CoreTemp device sensor data", "description": "Display CoreTemp device sensor data",
"icon": "coretemp.png", "icon": "coretemp.png",
"type": "app", "type": "app",
@ -4968,11 +4968,12 @@
"readme": "README.md", "readme": "README.md",
"supports": ["BANGLEJS","BANGLEJS2"], "supports": ["BANGLEJS","BANGLEJS2"],
"storage": [ "storage": [
{"name":"coretemp.boot.js","url":"boot.js"}, {"name":"coretemp.wid.js","url":"widget.js"},
{"name":"coretemp.app.js","url":"coretemp.js"}, {"name":"coretemp.app.js","url":"coretemp.js"},
{"name":"coretemp.settings.js","url":"settings.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}
] ],
"data": [{"name":"coretemp.json","url":"app-settings.json"}]
}, },
{ {
"id": "showimg", "id": "showimg",

View File

@ -0,0 +1,3 @@
{
"enabled":false
}

132
apps/coretemp/widget.js Normal file
View File

@ -0,0 +1,132 @@
// Widget to run sensors
// BT HRM / coretemp / csc
(() => {
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();
}
// draw your widget
function draw() {
// if (!) 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.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();
// }
// Called by sensor app to enable listeners
function reload() {
settings = require("Storage").readJSON("coretemp.json",1)||{};
// settings.fileNbr |= 0;
// Bangle.removeListener('HRM',onHRM);
if (settings.coreOn) {
WIDGETS["sensors"].width = 24;
connection_setup();
} else {
WIDGETS["sensors"].width = 0;
connection_end();
}
}
// add the widget
WIDGETS["sensors"]={area:"tl",width:24,draw:draw,reload:function() {
reload();
Bangle.drawWidgets(); // relayout all widgets
}};
// load settings, set correct widget width
reload();
})()