Merge pull request #1286 from halemmerich/bthrm_fixmultireadings

BTHRM - Prevent mixed readings from both sensors
pull/1282/head^2
Gordon Williams 2022-01-13 08:31:42 +00:00 committed by GitHub
commit ba3ad2a6f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 14 deletions

View File

@ -1042,7 +1042,7 @@
"id": "bthrm",
"name": "Bluetooth Heart Rate Monitor",
"shortName": "BT HRM",
"version": "0.02",
"version": "0.03",
"description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.",
"icon": "app.png",
"type": "app",

View File

@ -2,3 +2,6 @@
0.02: Make overriding the HRM event optional
Emit BTHRM event for external sensor
Add recorder app plugin
0.03: Prevent readings from internal sensor mixing into BT values
Mark events with src property
Show actual source of event in app

View File

@ -12,7 +12,6 @@
Bangle.isHRMOn = function() {
var settings = require('Storage').readJSON("bthrm.json", true) || {};
print(settings);
if (settings.enabled && !settings.replace){
return origIsHRMOn();
} else if (settings.enabled && settings.replace){
@ -69,12 +68,10 @@
var interval = dv.getUint16(idx,1); // in milliseconds
}*/
var eventName = settings.replace ? "HRM" : "BTHRM";
Bangle.emit(eventName, {
Bangle.emit(settings.replace?"HRM":"BTHRM", {
bpm:bpm,
confidence:100
confidence:100,
src:settings.replace?"bthrm":undefined
});
});
return characteristic.startNotifications();
@ -107,8 +104,20 @@
if (settings.enabled || !isOn){
Bangle.setBTHRMPower(isOn, app);
}
if (settings.enabled && !settings.replace || !isOn){
if ((settings.enabled && !settings.replace) || !settings.enabled || !isOn){
origSetHRMPower(isOn, app);
}
}
var settings = require('Storage').readJSON("bthrm.json", true) || {};
if (settings.enabled && settings.replace){
if (!(Bangle._PWR===undefined) && !(Bangle._PWR.HRM===undefined)){
for (var i = 0; i < Bangle._PWR.HRM.length; i++){
var app = Bangle._PWR.HRM[i];
origSetHRMPower(0, app);
Bangle.setBTHRMPower(1, app);
if (Bangle._PWR.HRM===undefined) break;
}
}
}
})();

View File

@ -9,13 +9,14 @@ function draw(y, event, type, counter) {
var px = g.getWidth()/2;
g.reset();
g.setFontAlign(0,0);
g.clearRect(0,y,g.getWidth(),y+80);
g.clearRect(0,y,g.getWidth(),y+75);
if (type == null || event == null || counter == 0) return;
var str = event.bpm + "";
g.setFontVector(40).drawString(str,px,y+20);
str = "Confidence: " + event.confidence;
g.setFontVector(12).drawString(str,px,y+50);
str = "Event: " + type;
if (type == "HRM") str += " Source: " + (event.src ? event.src : "internal");
g.setFontVector(12).drawString(str,px,y+60);
}
@ -35,7 +36,6 @@ Bangle.on('BTHRM', onBtHrm);
Bangle.on('HRM', onHrm);
Bangle.setHRMPower(1,'bthrm')
Bangle.setBTHRMPower(1,'bthrm')
g.clear();
Bangle.loadWidgets();

View File

@ -1,6 +1,6 @@
(function(recorders) {
recorders.bthrm = function() {
var bpm = 0;
var bpm = "";
function onHRM(h) {
bpm = h.bpm;
}
@ -9,7 +9,7 @@
fields : ["BT Heartrate"],
getValues : () => {
result = [bpm];
bpm = 0;
bpm = "";
return result;
},
start : () => {