From 3286d6cb2d4a7144f887a4e77c4eeac95fe12a72 Mon Sep 17 00:00:00 2001 From: Ivor Hewitt Date: Sat, 18 Dec 2021 22:10:59 +0000 Subject: [PATCH] Switch to widget --- apps.json | 7 +- apps/coretemp/app-settings.json | 3 + apps/coretemp/widget.js | 132 ++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 apps/coretemp/app-settings.json create mode 100644 apps/coretemp/widget.js diff --git a/apps.json b/apps.json index 9200ade1e..ad54b1d43 100644 --- a/apps.json +++ b/apps.json @@ -4960,7 +4960,7 @@ { "id": "coretemp", "name": "Core Temp Display", - "version": "0.02", + "version": "0.03", "description": "Display CoreTemp device sensor data", "icon": "coretemp.png", "type": "app", @@ -4968,11 +4968,12 @@ "readme": "README.md", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"coretemp.boot.js","url":"boot.js"}, + {"name":"coretemp.wid.js","url":"widget.js"}, {"name":"coretemp.app.js","url":"coretemp.js"}, {"name":"coretemp.settings.js","url":"settings.js"}, {"name":"coretemp.img","url":"coretemp-icon.js","evaluate":true} - ] + ], + "data": [{"name":"coretemp.json","url":"app-settings.json"}] }, { "id": "showimg", diff --git a/apps/coretemp/app-settings.json b/apps/coretemp/app-settings.json new file mode 100644 index 000000000..05e922f9d --- /dev/null +++ b/apps/coretemp/app-settings.json @@ -0,0 +1,3 @@ +{ + "enabled":false +} diff --git a/apps/coretemp/widget.js b/apps/coretemp/widget.js new file mode 100644 index 000000000..3eabf85d6 --- /dev/null +++ b/apps/coretemp/widget.js @@ -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(); +})()