forked from FOSS/BangleApps
30 lines
630 B
TypeScript
30 lines
630 B
TypeScript
|
import { AppState } from './state';
|
||
|
|
||
|
interface HrmData {
|
||
|
bpm: number;
|
||
|
confidence: number;
|
||
|
raw: string;
|
||
|
}
|
||
|
|
||
|
declare var Bangle: any;
|
||
|
|
||
|
function initHrm(state: AppState) {
|
||
|
Bangle.on('HRM', (hrm: HrmData) => updateHrm(state, hrm));
|
||
|
Bangle.setHRMPower(1);
|
||
|
}
|
||
|
|
||
|
function updateHrm(state: AppState, hrm: HrmData) {
|
||
|
if (hrm.confidence === 0) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const dHr = hrm.bpm - state.hr;
|
||
|
const hrError = Math.abs(dHr) + 101 - hrm.confidence;
|
||
|
const hrGain = state.hrError / (state.hrError + hrError);
|
||
|
|
||
|
state.hr += dHr * hrGain;
|
||
|
state.hrError += (hrError - state.hrError) * hrGain;
|
||
|
}
|
||
|
|
||
|
export { initHrm, updateHrm };
|