btadv: minimum confidence level for HRM
parent
cd7723eb53
commit
2d1a3cec8f
|
|
@ -13,11 +13,13 @@ var __assign = (this && this.__assign) || function () {
|
||||||
var Layout = require("Layout");
|
var Layout = require("Layout");
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
|
var HRM_MIN_CONFIDENCE = 75;
|
||||||
var services = ["0x180d", "0x181a", "0x1819"];
|
var services = ["0x180d", "0x181a", "0x1819"];
|
||||||
var acc;
|
var acc;
|
||||||
var bar;
|
var bar;
|
||||||
var gps;
|
var gps;
|
||||||
var hrm;
|
var hrm;
|
||||||
|
var hrmAny;
|
||||||
var mag;
|
var mag;
|
||||||
var btnsShown = false;
|
var btnsShown = false;
|
||||||
var prevBtnsShown = undefined;
|
var prevBtnsShown = undefined;
|
||||||
|
|
@ -126,6 +128,11 @@ var drawInfo = function (force) {
|
||||||
y += g.getFontHeight();
|
y += g.getFontHeight();
|
||||||
drawn = true;
|
drawn = true;
|
||||||
}
|
}
|
||||||
|
else if (hrmAny) {
|
||||||
|
g.drawString("~".concat(hrmAny.bpm, " BPM (").concat(hrmAny.confidence, "%)"), mid, y);
|
||||||
|
y += g.getFontHeight();
|
||||||
|
drawn = true;
|
||||||
|
}
|
||||||
if (mag) {
|
if (mag) {
|
||||||
g.drawString("".concat(mag.x, " ").concat(mag.y, " ").concat(mag.z), mid, y);
|
g.drawString("".concat(mag.x, " ").concat(mag.y, " ").concat(mag.z), mid, y);
|
||||||
y += g.getFontHeight();
|
y += g.getFontHeight();
|
||||||
|
|
@ -330,7 +337,11 @@ var updateServices = function () {
|
||||||
var onAccel = function (newAcc) { return acc = newAcc; };
|
var onAccel = function (newAcc) { return acc = newAcc; };
|
||||||
var onPressure = function (newBar) { return bar = newBar; };
|
var onPressure = function (newBar) { return bar = newBar; };
|
||||||
var onGPS = function (newGps) { return gps = newGps; };
|
var onGPS = function (newGps) { return gps = newGps; };
|
||||||
var onHRM = function (newHrm) { return hrm = newHrm; };
|
var onHRM = function (newHrm) {
|
||||||
|
if (newHrm.confidence >= HRM_MIN_CONFIDENCE)
|
||||||
|
hrm = newHrm;
|
||||||
|
hrmAny = newHrm;
|
||||||
|
};
|
||||||
var onMag = function (newMag) { return mag = newMag; };
|
var onMag = function (newMag) { return mag = newMag; };
|
||||||
var hook = function (enable) {
|
var hook = function (enable) {
|
||||||
if (enable) {
|
if (enable) {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ const enum Intervals {
|
||||||
|
|
||||||
type Hrm = { bpm: number, confidence: number };
|
type Hrm = { bpm: number, confidence: number };
|
||||||
|
|
||||||
|
const HRM_MIN_CONFIDENCE = 75;
|
||||||
|
|
||||||
// https://github.com/sputnikdev/bluetooth-gatt-parser/blob/master/src/main/resources/gatt/
|
// https://github.com/sputnikdev/bluetooth-gatt-parser/blob/master/src/main/resources/gatt/
|
||||||
const enum BleServ {
|
const enum BleServ {
|
||||||
// org.bluetooth.service.heart_rate
|
// org.bluetooth.service.heart_rate
|
||||||
|
|
@ -82,6 +84,7 @@ let acc: undefined | AccelData;
|
||||||
let bar: undefined | PressureData;
|
let bar: undefined | PressureData;
|
||||||
let gps: undefined | GPSFix;
|
let gps: undefined | GPSFix;
|
||||||
let hrm: undefined | Hrm;
|
let hrm: undefined | Hrm;
|
||||||
|
let hrmAny: undefined | Hrm;
|
||||||
let mag: undefined | CompassData;
|
let mag: undefined | CompassData;
|
||||||
let btnsShown = false;
|
let btnsShown = false;
|
||||||
let prevBtnsShown: boolean | undefined = undefined;
|
let prevBtnsShown: boolean | undefined = undefined;
|
||||||
|
|
@ -275,6 +278,12 @@ const drawInfo = (force?: true) => {
|
||||||
y += g.getFontHeight();
|
y += g.getFontHeight();
|
||||||
|
|
||||||
drawn = true;
|
drawn = true;
|
||||||
|
} else if (hrmAny) {
|
||||||
|
g.drawString(`~${hrmAny.bpm} BPM (${hrmAny.confidence}%)`, mid, y);
|
||||||
|
y += g.getFontHeight();
|
||||||
|
|
||||||
|
drawn = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mag) {
|
if (mag) {
|
||||||
|
|
@ -586,11 +595,15 @@ const updateServices = () => {
|
||||||
NRF.updateServices(newAdvert);
|
NRF.updateServices(newAdvert);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onAccel = (newAcc: typeof acc) => acc = newAcc;
|
const onAccel = (newAcc: NonNull<typeof acc>) => acc = newAcc;
|
||||||
const onPressure = (newBar: typeof bar) => bar = newBar;
|
const onPressure = (newBar: NonNull<typeof bar>) => bar = newBar;
|
||||||
const onGPS = (newGps: typeof gps) => gps = newGps;
|
const onGPS = (newGps: NonNull<typeof gps>) => gps = newGps;
|
||||||
const onHRM = (newHrm: typeof hrm) => hrm = newHrm;
|
const onHRM = (newHrm: NonNull<typeof hrm>) => {
|
||||||
const onMag = (newMag: typeof mag) => mag = newMag;
|
if (newHrm.confidence >= HRM_MIN_CONFIDENCE)
|
||||||
|
hrm = newHrm;
|
||||||
|
hrmAny = newHrm;
|
||||||
|
};
|
||||||
|
const onMag = (newMag: NonNull<typeof mag>) => mag = newMag;
|
||||||
|
|
||||||
const hook = (enable: boolean) => {
|
const hook = (enable: boolean) => {
|
||||||
// need to disable for perf reasons, when buttons are shown
|
// need to disable for perf reasons, when buttons are shown
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,5 @@ interface IArguments {
|
||||||
type Exclude<T, U> = T extends U ? never : T;
|
type Exclude<T, U> = T extends U ? never : T;
|
||||||
|
|
||||||
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
|
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
|
||||||
|
|
||||||
|
type NonNull<T> = Exclude<T, undefined | null>;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue