bthrm - Better mechanism for HRM fallback
parent
26a8940af0
commit
e38c7832c6
|
|
@ -94,13 +94,24 @@
|
||||||
"0x180f", // Battery
|
"0x180f", // Battery
|
||||||
];
|
];
|
||||||
|
|
||||||
|
var bpmTimeout;
|
||||||
|
|
||||||
var supportedCharacteristics = {
|
var supportedCharacteristics = {
|
||||||
"0x2a37": {
|
"0x2a37": {
|
||||||
//Heart rate measurement
|
//Heart rate measurement
|
||||||
|
active: false,
|
||||||
handler: function (dv){
|
handler: function (dv){
|
||||||
var flags = dv.getUint8(0);
|
var flags = dv.getUint8(0);
|
||||||
|
|
||||||
var bpm = (flags & 1) ? (dv.getUint16(1) / 100 /* ? */ ) : dv.getUint8(1); // 8 or 16 bit
|
var bpm = (flags & 1) ? (dv.getUint16(1) / 100 /* ? */ ) : dv.getUint8(1); // 8 or 16 bit
|
||||||
|
supportedCharacteristics["0x2a37"].active = bpm > 0;
|
||||||
|
log("BTHRM BPM " + supportedCharacteristics["0x2a37"].active);
|
||||||
|
if (supportedCharacteristics["0x2a37"].active) stopFallback();
|
||||||
|
if (bpmTimeout) clearTimeout(bpmTimeout);
|
||||||
|
bpmTimeout = setTimeout(()=>{
|
||||||
|
supportedCharacteristics["0x2a37"].active = false;
|
||||||
|
startFallback();
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
var sensorContact;
|
var sensorContact;
|
||||||
|
|
||||||
|
|
@ -202,6 +213,10 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
if (settings.enabled){
|
if (settings.enabled){
|
||||||
|
Bangle.isBTHRMActive = function (){
|
||||||
|
return supportedCharacteristics["0x2a37"].active;
|
||||||
|
};
|
||||||
|
|
||||||
Bangle.isBTHRMOn = function(){
|
Bangle.isBTHRMOn = function(){
|
||||||
return (Bangle._PWR && Bangle._PWR.BTHRM && Bangle._PWR.BTHRM.length > 0);
|
return (Bangle._PWR && Bangle._PWR.BTHRM && Bangle._PWR.BTHRM.length > 0);
|
||||||
};
|
};
|
||||||
|
|
@ -263,7 +278,8 @@
|
||||||
log("GATT", gatt);
|
log("GATT", gatt);
|
||||||
log("Characteristics", characteristics);
|
log("Characteristics", characteristics);
|
||||||
clearRetryTimeout();
|
clearRetryTimeout();
|
||||||
switchInternalHrm();
|
supportedCharacteristics["0x2a37"].active = false;
|
||||||
|
startFallback();
|
||||||
blockInit = false;
|
blockInit = false;
|
||||||
if (settings.warnDisconnect && !buzzing){
|
if (settings.warnDisconnect && !buzzing){
|
||||||
buzzing = true;
|
buzzing = true;
|
||||||
|
|
@ -496,7 +512,7 @@
|
||||||
isOn = Bangle._PWR.BTHRM.length;
|
isOn = Bangle._PWR.BTHRM.length;
|
||||||
// so now we know if we're really on
|
// so now we know if we're really on
|
||||||
if (isOn) {
|
if (isOn) {
|
||||||
switchInternalHrm();
|
switchFallback();
|
||||||
if (!Bangle.isBTHRMConnected()) initBt();
|
if (!Bangle.isBTHRMConnected()) initBt();
|
||||||
} else { // not on
|
} else { // not on
|
||||||
log("Power off for " + app);
|
log("Power off for " + app);
|
||||||
|
|
@ -559,28 +575,38 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var fallbackInterval;
|
|
||||||
var fallbackActive = false;
|
var fallbackActive = false;
|
||||||
|
var inSwitch = false;
|
||||||
|
|
||||||
var switchInternalHrm = function() {
|
var stopFallback = function(){
|
||||||
log("Try falling back to HRM");
|
if (fallbackActive){
|
||||||
if (!fallbackActive && Bangle.isBTHRMOn() && settings.allowFallback && !fallbackInterval){
|
|
||||||
log("Fallback to HRM enabled");
|
|
||||||
fallbackActive = true;
|
|
||||||
origSetHRMPower(1, "bthrm_fallback");
|
|
||||||
fallbackInterval = setInterval(()=>{
|
|
||||||
log("Still in HRM fallback");
|
|
||||||
if (Bangle.isBTHRMConnected() || !Bangle.isBTHRMOn()){
|
|
||||||
origSetHRMPower(0, "bthrm_fallback");
|
origSetHRMPower(0, "bthrm_fallback");
|
||||||
clearInterval(fallbackInterval);
|
|
||||||
fallbackInterval = undefined;
|
|
||||||
fallbackActive = false;
|
fallbackActive = false;
|
||||||
log("Fallback to HRM disabled");
|
log("Fallback to HRM disabled");
|
||||||
}
|
}
|
||||||
}, settings.fallbackTimeout * 1000);
|
};
|
||||||
|
|
||||||
|
var startFallback = function(){
|
||||||
|
if (!fallbackActive && settings.allowFallback) {
|
||||||
|
fallbackActive = true;
|
||||||
|
origSetHRMPower(1, "bthrm_fallback");
|
||||||
|
log("Fallback to HRM enabled");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var switchFallback = function() {
|
||||||
|
log("Check falling back to HRM");
|
||||||
|
if (!inSwitch){
|
||||||
|
inSwitch = true;
|
||||||
|
if (Bangle.isBTHRMActive()){
|
||||||
|
stopFallback();
|
||||||
|
} else {
|
||||||
|
startFallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inSwitch = false;
|
||||||
|
};
|
||||||
|
|
||||||
if (settings.replace){
|
if (settings.replace){
|
||||||
log("Replace HRM event");
|
log("Replace HRM event");
|
||||||
if (Bangle._PWR && Bangle._PWR.HRM){
|
if (Bangle._PWR && Bangle._PWR.HRM){
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue