@ovok/native 1.6.40 → 1.6.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/commonjs/modules/bt-device/constants/supported-devices.js +13 -1
- package/lib/commonjs/modules/bt-device/constants/supported-devices.js.map +1 -1
- package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js +1 -1
- package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
- package/lib/commonjs/modules/bt-management/index.js +33 -0
- package/lib/commonjs/modules/bt-management/index.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-tmb.js +34 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-tmb.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js +5 -0
- package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/device-creator.js +4 -1
- package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.device.js +50 -0
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.protocol.js +113 -0
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.protocol.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.js +74 -0
- package/lib/commonjs/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +16 -0
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.bp-handler.js +70 -0
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.bp-handler.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.command-sequencer.js +100 -0
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.command-sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.frame-reader.js +54 -0
- package/lib/commonjs/modules/bt-management/services/devices/tmb/tmb.frame-reader.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +51 -2
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/custom-tmb-spec.js +2 -0
- package/lib/commonjs/modules/bt-management/types/custom-tmb-spec.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js +2 -0
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/module/modules/bt-device/constants/supported-devices.js +14 -2
- package/lib/module/modules/bt-device/constants/supported-devices.js.map +1 -1
- package/lib/module/modules/bt-management/constants/integrated-devices-map.js +1 -1
- package/lib/module/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
- package/lib/module/modules/bt-management/index.js +3 -0
- package/lib/module/modules/bt-management/index.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-tmb.js +30 -0
- package/lib/module/modules/bt-management/services/custom/compile-custom-tmb.js.map +1 -0
- package/lib/module/modules/bt-management/services/custom/define-custom-device.js +5 -0
- package/lib/module/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/device-creator.js +4 -1
- package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.device.js +45 -0
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.protocol.js +104 -0
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.protocol.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.js +69 -0
- package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +16 -0
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.bp-handler.js +65 -0
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.bp-handler.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.command-sequencer.js +96 -0
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.command-sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.frame-reader.js +49 -0
- package/lib/module/modules/bt-management/services/devices/tmb/tmb.frame-reader.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +49 -1
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
- package/lib/module/modules/bt-management/types/custom-device-definition.js.map +1 -1
- package/lib/module/modules/bt-management/types/custom-tmb-spec.js +2 -0
- package/lib/module/modules/bt-management/types/custom-tmb-spec.js.map +1 -0
- package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
- package/lib/module/modules/bt-management/types/integrated-devices.js +2 -0
- package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-tmb.d.ts +5 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-tmb.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.device.d.ts +22 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.protocol.d.ts +37 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.protocol.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.d.ts +26 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.bp-handler.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.bp-handler.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.command-sequencer.d.ts +28 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.command-sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.frame-reader.d.ts +8 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/tmb/tmb.frame-reader.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +4 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-tmb-spec.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-tmb-spec.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/index.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-tmb.d.ts +5 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-tmb.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.device.d.ts +22 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.protocol.d.ts +37 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.protocol.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.d.ts +26 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.bp-handler.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.bp-handler.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.command-sequencer.d.ts +28 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.command-sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.frame-reader.d.ts +8 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/tmb/tmb.frame-reader.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +4 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-tmb-spec.d.ts +7 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-tmb-spec.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
- package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* eslint-disable import/group-exports */
|
|
4
|
+
|
|
5
|
+
import { FrameReadStatus } from "../../../types/frame-read-status.js";
|
|
6
|
+
import { calculateCrc8 } from "../../../utils/calculate-crc-8.js";
|
|
7
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
8
|
+
export const CHECKME_POD_SERVICE = "14839ac4-7d7e-415c-9a42-167340cf2339";
|
|
9
|
+
export const CHECKME_POD_WRITE = "8b00ace7-eb0b-49b0-bbe9-9aee0a26e1a3";
|
|
10
|
+
export const CHECKME_POD_NOTIFY = "0734594a-a8e7-4b1a-a6b1-cd5243059a57";
|
|
11
|
+
export const CheckmePodCommand = {
|
|
12
|
+
info: 0x14,
|
|
13
|
+
syncParameters: 0x16,
|
|
14
|
+
realtimeData: 0x20
|
|
15
|
+
};
|
|
16
|
+
const byte = value => (value & 0xff).toString(16).padStart(2, "0");
|
|
17
|
+
const littleEndian16 = (bytes, offset) => hexToByte(bytes[offset] ?? "00") | hexToByte(bytes[offset + 1] ?? "00") << 8;
|
|
18
|
+
const ascii = value => [...value].map(character => byte(character.charCodeAt(0)));
|
|
19
|
+
|
|
20
|
+
/** Builds the AA command envelope used by Checkme Pod and Checkme Pod-WPS. */
|
|
21
|
+
export const checkmePodCommand = (command, payload = [], sequence = 0) => {
|
|
22
|
+
const frame = ["aa", byte(command), byte(~command), byte(sequence), byte(sequence >> 8), byte(payload.length), byte(payload.length >> 8), ...payload, "00"];
|
|
23
|
+
frame[frame.length - 1] = byte(calculateCrc8(frame, frame.length - 1));
|
|
24
|
+
return frame;
|
|
25
|
+
};
|
|
26
|
+
export const checkmePodSyncTime = (now = new Date()) => {
|
|
27
|
+
const pad = value => value.toString().padStart(2, "0");
|
|
28
|
+
const time = `${now.getFullYear().toString().padStart(4, "0")}-${pad(now.getMonth() + 1)}-${pad(now.getDate())},${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;
|
|
29
|
+
return checkmePodCommand(CheckmePodCommand.syncParameters, ascii(JSON.stringify({
|
|
30
|
+
SetTIME: time
|
|
31
|
+
})));
|
|
32
|
+
};
|
|
33
|
+
export const decodeCheckmePodResponse = frame => {
|
|
34
|
+
if (hexToByte(frame[0] ?? "00") !== 0x55) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const length = littleEndian16(frame, 5);
|
|
38
|
+
if (frame.length !== length + 8) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
state: hexToByte(frame[1] ?? "01") === 0,
|
|
43
|
+
sequence: littleEndian16(frame, 3),
|
|
44
|
+
content: frame.slice(7, 7 + length)
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
/** Decodes the 20-byte RtParam prefix used by the vendor's realtime response. */
|
|
48
|
+
export const parseCheckmePodRealtimeReading = content => {
|
|
49
|
+
if (content.length < 20) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const state = hexToByte(content[7] ?? "00");
|
|
53
|
+
return {
|
|
54
|
+
pulseRate: littleEndian16(content, 0),
|
|
55
|
+
bloodOxygen: littleEndian16(content, 2),
|
|
56
|
+
perfusionIndex: hexToByte(content[4] ?? "00") / 10,
|
|
57
|
+
temperature: littleEndian16(content, 5) / 10,
|
|
58
|
+
oxygenState: state & 0x03,
|
|
59
|
+
temperatureState: (state & 0x0c) >> 2,
|
|
60
|
+
batteryState: hexToByte(content[8] ?? "00"),
|
|
61
|
+
battery: hexToByte(content[9] ?? "00"),
|
|
62
|
+
runStatus: hexToByte(content[10] ?? "00")
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/** Reads split and concatenated Checkme Pod notifications with CRC validation. */
|
|
67
|
+
export class CheckmePodFrameReader {
|
|
68
|
+
readFrame(buffer) {
|
|
69
|
+
const start = buffer.findIndex((value, index) => hexToByte(value) === 0x55 && index + 2 < buffer.length && hexToByte(buffer[index + 1] ?? "00") === (~hexToByte(buffer[index + 2] ?? "00") & 0xff));
|
|
70
|
+
if (start < 0) {
|
|
71
|
+
return {
|
|
72
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
73
|
+
consumedBytes: Math.max(0, buffer.length - 1)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const payloadLength = littleEndian16(buffer, start + 5);
|
|
77
|
+
const frameLength = payloadLength + 8;
|
|
78
|
+
if (frameLength < 8) {
|
|
79
|
+
return {
|
|
80
|
+
status: FrameReadStatus.CORRUPT,
|
|
81
|
+
consumedBytes: start + 1
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (start + frameLength > buffer.length) {
|
|
85
|
+
return {
|
|
86
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
87
|
+
consumedBytes: start
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const frame = buffer.slice(start, start + frameLength);
|
|
91
|
+
if (calculateCrc8([...frame], frame.length - 1) !== hexToByte(frame.at(-1) ?? "00")) {
|
|
92
|
+
return {
|
|
93
|
+
status: FrameReadStatus.CORRUPT,
|
|
94
|
+
consumedBytes: start + 1
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
status: FrameReadStatus.COMPLETE,
|
|
99
|
+
consumedBytes: start + frameLength,
|
|
100
|
+
frame
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=checkme-pod.protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FrameReadStatus","calculateCrc8","hexToByte","CHECKME_POD_SERVICE","CHECKME_POD_WRITE","CHECKME_POD_NOTIFY","CheckmePodCommand","info","syncParameters","realtimeData","byte","value","toString","padStart","littleEndian16","bytes","offset","ascii","map","character","charCodeAt","checkmePodCommand","command","payload","sequence","frame","length","checkmePodSyncTime","now","Date","pad","time","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","JSON","stringify","SetTIME","decodeCheckmePodResponse","undefined","state","content","slice","parseCheckmePodRealtimeReading","pulseRate","bloodOxygen","perfusionIndex","temperature","oxygenState","temperatureState","batteryState","battery","runStatus","CheckmePodFrameReader","readFrame","buffer","start","findIndex","index","status","INCOMPLETE","consumedBytes","Math","max","payloadLength","frameLength","CORRUPT","at","COMPLETE"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/checkme/checkme-pod.protocol.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
import { CaseType } from "../../../types/case-type.js";
|
|
5
|
+
import { CheckmePodCommand, checkmePodCommand, checkmePodSyncTime, decodeCheckmePodResponse, parseCheckmePodRealtimeReading } from "./checkme-pod.protocol.js";
|
|
6
|
+
const command = (write, frame) => ({
|
|
7
|
+
...write,
|
|
8
|
+
frame,
|
|
9
|
+
withoutResponse: true
|
|
10
|
+
});
|
|
11
|
+
const valid = value => Number.isFinite(value) && value > 0;
|
|
12
|
+
|
|
13
|
+
/** Drives the info -> clock sync -> realtime exchange used by Checkme Pod. */
|
|
14
|
+
export class CheckmePodSequencer {
|
|
15
|
+
phase = "info";
|
|
16
|
+
constructor(params) {
|
|
17
|
+
this.params = params;
|
|
18
|
+
}
|
|
19
|
+
initialCommands = () => [this.write(checkmePodCommand(CheckmePodCommand.info))];
|
|
20
|
+
nextCommand = frame => {
|
|
21
|
+
const response = decodeCheckmePodResponse(frame);
|
|
22
|
+
if (!response?.state) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
if (this.phase === "info") {
|
|
26
|
+
this.phase = "sync";
|
|
27
|
+
return [this.write(checkmePodSyncTime(this.params.now?.() ?? new Date()))];
|
|
28
|
+
}
|
|
29
|
+
if (this.phase === "sync") {
|
|
30
|
+
this.phase = "realtime";
|
|
31
|
+
return [this.write(checkmePodCommand(CheckmePodCommand.realtimeData))];
|
|
32
|
+
}
|
|
33
|
+
this.report(response);
|
|
34
|
+
return [this.write(checkmePodCommand(CheckmePodCommand.realtimeData))];
|
|
35
|
+
};
|
|
36
|
+
write = frame => command(this.params.write, frame);
|
|
37
|
+
report = response => {
|
|
38
|
+
const reading = parseCheckmePodRealtimeReading(response.content);
|
|
39
|
+
if (!reading) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const recordedAt = this.params.now?.() ?? new Date();
|
|
43
|
+
if (valid(reading.bloodOxygen) || valid(reading.pulseRate)) {
|
|
44
|
+
this.params.onResult({
|
|
45
|
+
caseType: CaseType.RESULT,
|
|
46
|
+
measurementTypeKey: MeasurementTypeKey.bloodOxygenPulseRate,
|
|
47
|
+
...(valid(reading.bloodOxygen) ? {
|
|
48
|
+
bloodOxygen: reading.bloodOxygen
|
|
49
|
+
} : {}),
|
|
50
|
+
...(valid(reading.pulseRate) ? {
|
|
51
|
+
pulseRate: reading.pulseRate
|
|
52
|
+
} : {}),
|
|
53
|
+
...(valid(reading.perfusionIndex) ? {
|
|
54
|
+
perfusionIndex: reading.perfusionIndex
|
|
55
|
+
} : {}),
|
|
56
|
+
recordedAt
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (valid(reading.temperature)) {
|
|
60
|
+
this.params.onResult({
|
|
61
|
+
caseType: CaseType.RESULT,
|
|
62
|
+
measurementTypeKey: MeasurementTypeKey.temperature,
|
|
63
|
+
bodyTemp: reading.temperature,
|
|
64
|
+
recordedAt
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=checkme-pod.sequencer.js.map
|
package/lib/module/modules/bt-management/services/devices/checkme/checkme-pod.sequencer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","CaseType","CheckmePodCommand","checkmePodCommand","checkmePodSyncTime","decodeCheckmePodResponse","parseCheckmePodRealtimeReading","command","write","frame","withoutResponse","valid","value","Number","isFinite","CheckmePodSequencer","phase","constructor","params","initialCommands","info","nextCommand","response","state","undefined","now","Date","realtimeData","report","reading","content","recordedAt","bloodOxygen","pulseRate","onResult","caseType","RESULT","measurementTypeKey","bloodOxygenPulseRate","perfusionIndex","temperature","bodyTemp"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/checkme/checkme-pod.sequencer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,6 +11,8 @@ import { BTManagedDevice } from "../bt-managed-device.js";
|
|
|
11
11
|
import { LepuCommandBuilder } from "../lepu/lepu.command-builder.js";
|
|
12
12
|
import { LepuEcgTransferSequencer } from "../lepu/lepu.ecg-transfer.js";
|
|
13
13
|
import { LepuFrameReader } from "../lepu/lepu.frame-reader.js";
|
|
14
|
+
import { TmbCommandSequencer } from "../tmb/tmb.command-sequencer.js";
|
|
15
|
+
import { TmbFrameReader } from "../tmb/tmb.frame-reader.js";
|
|
14
16
|
import { decodeViatomBp3File } from "../viatom/viatom.bp3-files.js";
|
|
15
17
|
import { decodeViatomEcgRecording, recordedAtFromViatomFileName } from "../viatom/viatom.ecg-files.js";
|
|
16
18
|
import { createLepuSequencer, recordLepuIdentity, selectLepu } from "./custom-lepu-sequencer.js";
|
|
@@ -46,11 +48,25 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
46
48
|
this.preferredMtu = definition.preferredMtu;
|
|
47
49
|
}
|
|
48
50
|
this.declareLepuProtocol(definition, params.clockSync);
|
|
51
|
+
this.declareTmbProtocol(definition, params.clockSync);
|
|
49
52
|
definition.frames.forEach((frame, uuid) => {
|
|
50
53
|
this.validators.set(uuid, createFrameValidator(frame));
|
|
51
54
|
});
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
/** Gives a TMB declaration its length-prefixed reader and history command sequence. */
|
|
58
|
+
declareTmbProtocol(definition, clockSync) {
|
|
59
|
+
const tmb = definition.tmb;
|
|
60
|
+
if (!tmb) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.frameReader = new TmbFrameReader();
|
|
64
|
+
this.createCommandSequencer = () => new TmbCommandSequencer({
|
|
65
|
+
protocol: tmb,
|
|
66
|
+
clockSync
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
54
70
|
/**
|
|
55
71
|
* Gives a Lepu declaration its frame reader and its command sequence.
|
|
56
72
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeasurementTypeKey","CaseType","createFrameValidator","parseMeasurement","discardedReadingError","rejectCustomReading","decodeBP2File","BTManagedDevice","LepuCommandBuilder","LepuEcgTransferSequencer","LepuFrameReader","decodeViatomBp3File","decodeViatomEcgRecording","recordedAtFromViatomFileName","createLepuSequencer","recordLepuIdentity","selectLepu","CustomDevice","reportedHistoryIds","Set","validators","Map","sessionAggregates","constructor","device","params","definition","oneReadingPerConnection","frameHandler","createFrameHandler","sessionPolicy","deviceData","clockSync","deliveredFileNames","deliveredEcgFileNames","selectedLepu","lepu","manufacturerData","undefined","mainServices","manufacturerDataProtocol","filter","service","uuid","write","serviceUuid","frameReader","stuckDataTimeout","reportsBondedEvent","preferredMtu","declareLepuProtocol","frames","forEach","frame","set","startBytes","createCommandSequencer","fileTransfer","clear","characteristicUuid","builder","rejectEncryptionAtBytes","expectedDeviceTypes","onIdentified","onRefused","onIdentityRefused","onFile","reportViatomEcgFile","reportViatomBp2File","reportViatomBp3File","skipFiles","acceptFile","name","ecgFileDecoder","test","pollCommand","pollIntervalMs","afterTransfer","build","onError","reason","Error","onProgress","progress","onConnectionEvent","kind","current","receivedBytes","total","totalBytes","file","decoded","content","samples","length","onResult","measurementTypeKey","ecg","caseType","RESULT","diagramPoints","duration","recordedAt","recordingId","has","add","info","id","validatePackage","pkg","validate","get","String","toLowerCase","handleDependentResult","data","parsingCase","requiresStream","isMeasuring","OTHER","handleFrame","parsedData","handlerOnly","captureSessionSample","STREAM","shouldReportDependentResult","reportFrame","error","_data","handleSuccessResult","successResult","collectedValues","emit","reading","handleMeasurementEnd","policy","aggregates","values","sessionStartedAt","aggregate","count","minSamples","summary","sample","Object","fromEntries","sums","entries","map","sessionAverage","decorateReading","value","decimals","fields","Math","trunc","Number","toFixed","measurements","frameRecordedAt","Date","measurement","createMeasurement","rejection","measurementRejection","key","existing","fieldNames","recordOffset","repeated","repeatedRecords","report","records","floor","from","recordBytes","record","discard","reportMeasurement","find","message"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom.device.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","CaseType","createFrameValidator","parseMeasurement","discardedReadingError","rejectCustomReading","decodeBP2File","BTManagedDevice","LepuCommandBuilder","LepuEcgTransferSequencer","LepuFrameReader","TmbCommandSequencer","TmbFrameReader","decodeViatomBp3File","decodeViatomEcgRecording","recordedAtFromViatomFileName","createLepuSequencer","recordLepuIdentity","selectLepu","CustomDevice","reportedHistoryIds","Set","validators","Map","sessionAggregates","constructor","device","params","definition","oneReadingPerConnection","frameHandler","createFrameHandler","sessionPolicy","deviceData","clockSync","deliveredFileNames","deliveredEcgFileNames","selectedLepu","lepu","manufacturerData","undefined","mainServices","manufacturerDataProtocol","filter","service","uuid","write","serviceUuid","frameReader","stuckDataTimeout","reportsBondedEvent","preferredMtu","declareLepuProtocol","declareTmbProtocol","frames","forEach","frame","set","tmb","createCommandSequencer","protocol","startBytes","fileTransfer","clear","characteristicUuid","builder","rejectEncryptionAtBytes","expectedDeviceTypes","onIdentified","onRefused","onIdentityRefused","onFile","reportViatomEcgFile","reportViatomBp2File","reportViatomBp3File","skipFiles","acceptFile","name","ecgFileDecoder","test","pollCommand","pollIntervalMs","afterTransfer","build","onError","reason","Error","onProgress","progress","onConnectionEvent","kind","current","receivedBytes","total","totalBytes","file","decoded","content","samples","length","onResult","measurementTypeKey","ecg","caseType","RESULT","diagramPoints","duration","recordedAt","recordingId","has","add","info","id","validatePackage","pkg","validate","get","String","toLowerCase","handleDependentResult","data","parsingCase","requiresStream","isMeasuring","OTHER","handleFrame","parsedData","handlerOnly","captureSessionSample","STREAM","shouldReportDependentResult","reportFrame","error","_data","handleSuccessResult","successResult","collectedValues","emit","reading","handleMeasurementEnd","policy","aggregates","values","sessionStartedAt","aggregate","count","minSamples","summary","sample","Object","fromEntries","sums","entries","map","sessionAverage","decorateReading","value","decimals","fields","Math","trunc","Number","toFixed","measurements","frameRecordedAt","Date","measurement","createMeasurement","rejection","measurementRejection","key","existing","fieldNames","recordOffset","repeated","repeatedRecords","report","records","floor","from","recordBytes","record","discard","reportMeasurement","find","message"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom.device.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
import { CaseType } from "../../../types/case-type.js";
|
|
5
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
6
|
+
import { recordedAtFromLocalSeconds } from "../bp2/bp2.files.js";
|
|
7
|
+
import { TMB_EPOCH_SECONDS } from "./tmb.command-sequencer.js";
|
|
8
|
+
const RECORD_BYTES = 21;
|
|
9
|
+
const RECORD_RESPONSE = 0x4902;
|
|
10
|
+
const uint16 = (values, offset) => hexToByte(values[offset] ?? "00") << 8 | hexToByte(values[offset + 1] ?? "00");
|
|
11
|
+
const uint32 = (values, offset) => hexToByte(values[offset] ?? "00") << 24 | hexToByte(values[offset + 1] ?? "00") << 16 | hexToByte(values[offset + 2] ?? "00") << 8 | hexToByte(values[offset + 3] ?? "00");
|
|
12
|
+
const commandOf = frame => {
|
|
13
|
+
const head = hexToByte(frame[0] ?? "00");
|
|
14
|
+
if (head === 0x21 || head === 0) {
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
return hexToByte(frame[2] ?? "00") << 8 | hexToByte(frame[3] ?? "00");
|
|
18
|
+
};
|
|
19
|
+
const payload = frame => frame.slice(hexToByte(frame[0] ?? "00") === 0x21 ? 2 : 4);
|
|
20
|
+
|
|
21
|
+
/** Decodes the fixed 21-byte TMB blood-pressure history records. */
|
|
22
|
+
export const createTmbBloodPressureFrameHandler = () => {
|
|
23
|
+
const pending = [];
|
|
24
|
+
const reported = new Set();
|
|
25
|
+
return ({
|
|
26
|
+
frame,
|
|
27
|
+
emit
|
|
28
|
+
}) => {
|
|
29
|
+
const head = hexToByte(frame[0] ?? "00");
|
|
30
|
+
const opcode = commandOf(frame);
|
|
31
|
+
if (head !== 0x21 && opcode !== RECORD_RESPONSE) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
pending.push(...payload(frame));
|
|
35
|
+
while (pending.length >= RECORD_BYTES) {
|
|
36
|
+
const record = pending.splice(0, RECORD_BYTES);
|
|
37
|
+
const timestamp = uint32(record, 17) + TMB_EPOCH_SECONDS;
|
|
38
|
+
const systolic = uint16(record, 6);
|
|
39
|
+
const diastolic = uint16(record, 8);
|
|
40
|
+
const meanArterialPressure = uint16(record, 10);
|
|
41
|
+
const heartRate = uint16(record, 14);
|
|
42
|
+
const userId = hexToByte(record[16] ?? "00");
|
|
43
|
+
const recordingId = `tmb:${userId}:${timestamp}:${systolic}:${diastolic}`;
|
|
44
|
+
if (reported.has(recordingId) || systolic < 50 || systolic > 300 || diastolic < 30 || diastolic > 200 || meanArterialPressure < 30 || meanArterialPressure > 250 || heartRate < 20 || heartRate > 240) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
reported.add(recordingId);
|
|
48
|
+
const recordedAt = recordedAtFromLocalSeconds(timestamp);
|
|
49
|
+
emit({
|
|
50
|
+
measurementTypeKey: MeasurementTypeKey.bloodPressure,
|
|
51
|
+
caseType: CaseType.RESULT,
|
|
52
|
+
systolic,
|
|
53
|
+
diastolic,
|
|
54
|
+
meanArterialPressure,
|
|
55
|
+
heartRate,
|
|
56
|
+
memorySlot: userId,
|
|
57
|
+
...(recordedAt ? {
|
|
58
|
+
recordedAt
|
|
59
|
+
} : {}),
|
|
60
|
+
recordingId
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=tmb.bp-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","CaseType","hexToByte","recordedAtFromLocalSeconds","TMB_EPOCH_SECONDS","RECORD_BYTES","RECORD_RESPONSE","uint16","values","offset","uint32","commandOf","frame","head","payload","slice","createTmbBloodPressureFrameHandler","pending","reported","Set","emit","opcode","push","length","record","splice","timestamp","systolic","diastolic","meanArterialPressure","heartRate","userId","recordingId","has","add","recordedAt","measurementTypeKey","bloodPressure","caseType","RESULT","memorySlot"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/tmb/tmb.bp-handler.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isClockSyncEnabled } from "../../../types/clock-sync.js";
|
|
4
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
5
|
+
const TMB_EPOCH_SECONDS = 1_262_304_000;
|
|
6
|
+
const LOGIN_RESPONSE = 7;
|
|
7
|
+
const SETTING_RESPONSE = 0x1100;
|
|
8
|
+
const SET_TIME = 0x1102;
|
|
9
|
+
const GET_RECORD = 0x4901;
|
|
10
|
+
const GET_RECORD_RESPONSE = 0x4902;
|
|
11
|
+
const ACK_SUCCESS = ["00", "01", "01"];
|
|
12
|
+
const bytes = frame => frame.map(hexToByte);
|
|
13
|
+
const byte = value => (value & 0xff).toString(16).padStart(2, "0");
|
|
14
|
+
const command = (opcode, content) => {
|
|
15
|
+
const payload = [opcode >> 8 & 0xff, opcode & 0xff, ...content];
|
|
16
|
+
return [0x10, payload.length, ...payload].map(byte);
|
|
17
|
+
};
|
|
18
|
+
const responseCommand = frame => {
|
|
19
|
+
const head = hexToByte(frame[0] ?? "00");
|
|
20
|
+
if (head === 0x21 || head === 0) {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
return hexToByte(frame[2] ?? "00") << 8 | hexToByte(frame[3] ?? "00");
|
|
24
|
+
};
|
|
25
|
+
const content = frame => {
|
|
26
|
+
const head = hexToByte(frame[0] ?? "00");
|
|
27
|
+
return bytes(frame.slice(head === 0x21 || head === 0 ? 2 : 4));
|
|
28
|
+
};
|
|
29
|
+
const nowSeconds = clockSync => {
|
|
30
|
+
const now = clockSync?.now?.() ?? new Date();
|
|
31
|
+
const offsetSeconds = clockSync?.timezone === "utc" ? 0 : -now.getTimezoneOffset() * 60;
|
|
32
|
+
return Math.floor(now.getTime() / 1000) - TMB_EPOCH_SECONDS + offsetSeconds;
|
|
33
|
+
};
|
|
34
|
+
const syncTime = clockSync => {
|
|
35
|
+
const seconds = nowSeconds(clockSync);
|
|
36
|
+
return command(SET_TIME, [0x01, seconds >>> 24 & 0xff, seconds >>> 16 & 0xff, seconds >>> 8 & 0xff, seconds & 0xff]);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** Drives login, clock synchronisation, acknowledgements and history download for TMB. */
|
|
40
|
+
class TmbCommandSequencer {
|
|
41
|
+
phase = "login";
|
|
42
|
+
userId = 0;
|
|
43
|
+
constructor(params) {
|
|
44
|
+
this.params = params;
|
|
45
|
+
}
|
|
46
|
+
initialCommands = () => [];
|
|
47
|
+
nextCommand = frame => {
|
|
48
|
+
const opcode = responseCommand(frame);
|
|
49
|
+
const frameContent = content(frame);
|
|
50
|
+
if (opcode === LOGIN_RESPONSE && frameContent.length >= 8) {
|
|
51
|
+
this.userId = frameContent[6] ?? 0;
|
|
52
|
+
this.phase = "login";
|
|
53
|
+
return [this.ack(true), this.write(command(8, [1, ...frameContent.slice(0, 6), 0, 2]))];
|
|
54
|
+
}
|
|
55
|
+
if (this.phase === "login" && opcode === 0 && frameContent[0] === 1) {
|
|
56
|
+
this.phase = "clock";
|
|
57
|
+
return isClockSyncEnabled(this.params.clockSync) ? [this.write(syncTime(this.params.clockSync))] : [this.history()];
|
|
58
|
+
}
|
|
59
|
+
if (opcode === SETTING_RESPONSE && frameContent.length >= 3) {
|
|
60
|
+
const setting = frameContent[0] << 8 | frameContent[1];
|
|
61
|
+
const success = frameContent[2] === 1;
|
|
62
|
+
if (setting === SET_TIME && success) {
|
|
63
|
+
this.phase = "history";
|
|
64
|
+
return [this.ack(true), this.history()];
|
|
65
|
+
}
|
|
66
|
+
return [this.ack(success)];
|
|
67
|
+
}
|
|
68
|
+
if (opcode === GET_RECORD_RESPONSE) {
|
|
69
|
+
this.phase = "history";
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
if (hexToByte(frame[0] ?? "00") === 0x21) {
|
|
73
|
+
return [this.ack(true)];
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
};
|
|
77
|
+
commandTimeoutMs = () => 15_000;
|
|
78
|
+
onCommandTimeout = () => ({
|
|
79
|
+
terminal: true
|
|
80
|
+
});
|
|
81
|
+
commandProgress = frame => hexToByte(frame[0] ?? "00") === 0x21 ? "partial" : "complete";
|
|
82
|
+
isHistoryTransfer = () => true;
|
|
83
|
+
write = frame => ({
|
|
84
|
+
serviceUuid: this.params.protocol.serviceUuid,
|
|
85
|
+
characteristicUuid: this.params.protocol.writeUuid,
|
|
86
|
+
frame
|
|
87
|
+
});
|
|
88
|
+
ack = success => ({
|
|
89
|
+
serviceUuid: this.params.protocol.serviceUuid,
|
|
90
|
+
characteristicUuid: this.params.protocol.ackUuid,
|
|
91
|
+
frame: success ? ACK_SUCCESS : ["00", "01", "02"]
|
|
92
|
+
});
|
|
93
|
+
history = () => this.write(command(GET_RECORD, [this.userId, 1]));
|
|
94
|
+
}
|
|
95
|
+
export { TmbCommandSequencer, TMB_EPOCH_SECONDS };
|
|
96
|
+
//# sourceMappingURL=tmb.command-sequencer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isClockSyncEnabled","hexToByte","TMB_EPOCH_SECONDS","LOGIN_RESPONSE","SETTING_RESPONSE","SET_TIME","GET_RECORD","GET_RECORD_RESPONSE","ACK_SUCCESS","bytes","frame","map","byte","value","toString","padStart","command","opcode","content","payload","length","responseCommand","head","slice","nowSeconds","clockSync","now","Date","offsetSeconds","timezone","getTimezoneOffset","Math","floor","getTime","syncTime","seconds","TmbCommandSequencer","phase","userId","constructor","params","initialCommands","nextCommand","frameContent","ack","write","history","setting","success","undefined","commandTimeoutMs","onCommandTimeout","terminal","commandProgress","isHistoryTransfer","serviceUuid","protocol","characteristicUuid","writeUuid","ackUuid"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/tmb/tmb.command-sequencer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { FrameReadStatus } from "../../../types/frame-read-status.js";
|
|
4
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
5
|
+
const HEADS = new Set([0x10, 0x20, 0x21]);
|
|
6
|
+
const isHead = (buffer, index) => {
|
|
7
|
+
const head = hexToByte(buffer[index] ?? "00");
|
|
8
|
+
return HEADS.has(head) || head === 0 && hexToByte(buffer[index + 1] ?? "00") === 1;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/** Reads the length-prefixed frames emitted by Viatom's TMB blood-pressure family. */
|
|
12
|
+
export class TmbFrameReader {
|
|
13
|
+
readFrame(buffer) {
|
|
14
|
+
const start = this.findStart(buffer);
|
|
15
|
+
if (start < 0) {
|
|
16
|
+
return {
|
|
17
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
18
|
+
consumedBytes: Math.max(0, buffer.length - 1)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (start + 2 > buffer.length) {
|
|
22
|
+
return {
|
|
23
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
24
|
+
consumedBytes: start
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const frameLength = 2 + hexToByte(buffer[start + 1] ?? "00");
|
|
28
|
+
if (start + frameLength > buffer.length) {
|
|
29
|
+
return {
|
|
30
|
+
status: FrameReadStatus.INCOMPLETE,
|
|
31
|
+
consumedBytes: start
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
status: FrameReadStatus.COMPLETE,
|
|
36
|
+
consumedBytes: start + frameLength,
|
|
37
|
+
frame: buffer.slice(start, start + frameLength)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
findStart(buffer) {
|
|
41
|
+
for (let index = 0; index < buffer.length; index++) {
|
|
42
|
+
if (isHead(buffer, index)) {
|
|
43
|
+
return index;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return -1;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=tmb.frame-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FrameReadStatus","hexToByte","HEADS","Set","isHead","buffer","index","head","has","TmbFrameReader","readFrame","start","findStart","status","INCOMPLETE","consumedBytes","Math","max","length","frameLength","COMPLETE","frame","slice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/tmb/tmb.frame-reader.ts"],"mappings":";;AACA,SAASA,eAAe,QAAQ,qCAAkC;AAElE,SAASC,SAAS,QAAQ,+BAA4B;AAEtD,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEzC,MAAMC,MAAM,GAAGA,CAACC,MAAyB,EAAEC,KAAa,KAAc;EACpE,MAAMC,IAAI,GAAGN,SAAS,CAACI,MAAM,CAACC,KAAK,CAAC,IAAI,IAAI,CAAC;EAE7C,OAAOJ,KAAK,CAACM,GAAG,CAACD,IAAI,CAAC,IAAKA,IAAI,KAAK,CAAC,IAAIN,SAAS,CAACI,MAAM,CAACC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAE;AACtF,CAAC;;AAED;AACA,OAAO,MAAMG,cAAc,CAAwB;EAC1CC,SAASA,CAACL,MAAyB,EAAmB;IAC3D,MAAMM,KAAK,GAAG,IAAI,CAACC,SAAS,CAACP,MAAM,CAAC;IAEpC,IAAIM,KAAK,GAAG,CAAC,EAAE;MACb,OAAO;QACLE,MAAM,EAAEb,eAAe,CAACc,UAAU;QAClCC,aAAa,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEZ,MAAM,CAACa,MAAM,GAAG,CAAC;MAC9C,CAAC;IACH;IAEA,IAAIP,KAAK,GAAG,CAAC,GAAGN,MAAM,CAACa,MAAM,EAAE;MAC7B,OAAO;QAAEL,MAAM,EAAEb,eAAe,CAACc,UAAU;QAAEC,aAAa,EAAEJ;MAAM,CAAC;IACrE;IAEA,MAAMQ,WAAW,GAAG,CAAC,GAAGlB,SAAS,CAACI,MAAM,CAACM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAE5D,IAAIA,KAAK,GAAGQ,WAAW,GAAGd,MAAM,CAACa,MAAM,EAAE;MACvC,OAAO;QAAEL,MAAM,EAAEb,eAAe,CAACc,UAAU;QAAEC,aAAa,EAAEJ;MAAM,CAAC;IACrE;IAEA,OAAO;MACLE,MAAM,EAAEb,eAAe,CAACoB,QAAQ;MAChCL,aAAa,EAAEJ,KAAK,GAAGQ,WAAW;MAClCE,KAAK,EAAEhB,MAAM,CAACiB,KAAK,CAACX,KAAK,EAAEA,KAAK,GAAGQ,WAAW;IAChD,CAAC;EACH;EAEQP,SAASA,CAACP,MAAyB,EAAU;IACnD,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,MAAM,CAACa,MAAM,EAAEZ,KAAK,EAAE,EAAE;MAClD,IAAIF,MAAM,CAACC,MAAM,EAAEC,KAAK,CAAC,EAAE;QACzB,OAAOA,KAAK;MACd;IACF;IAEA,OAAO,CAAC,CAAC;EACX;AACF","ignoreList":[]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { le32FromHex } from "../../../utils/le-32-from-hex.js";
|
|
4
|
+
import { defineCustomDevice } from "../../custom/define-custom-device.js";
|
|
4
5
|
import { recordedAtFromLocalSeconds } from "../bp2/bp2.files.js";
|
|
5
6
|
import { lepuNameMatch } from "../lepu/lepu.name-match.js";
|
|
6
7
|
import { lepuDevice } from "../lepu/lepu.transports.js";
|
|
8
|
+
import { createTmbBloodPressureFrameHandler } from "../tmb/tmb.bp-handler.js";
|
|
7
9
|
import { createViatomFrameHandler } from "./viatom.bp-ecg-handler.js";
|
|
8
10
|
import { BP2_CASES, BP2_ECG_CASES, BP3_CASES, BP3_ECG_CASES } from "./viatom.bp-monitor-cases.js";
|
|
9
11
|
|
|
@@ -86,6 +88,51 @@ const bp2tMonitor = params => viatomBpMonitor("BP2T", params);
|
|
|
86
88
|
|
|
87
89
|
/** BP2W. Documented in its own section, but decoding the same realtime struct. */
|
|
88
90
|
const bp2wMonitor = params => viatomBpMonitor("BP2W", params);
|
|
91
|
+
const TMB_SERVICE = "0000a610-0000-1000-8000-00805f9b34fb";
|
|
92
|
+
const TMB_WRITE = "0000a624-0000-1000-8000-00805f9b34fb";
|
|
93
|
+
const TMB_ACK = "0000a622-0000-1000-8000-00805f9b34fb";
|
|
94
|
+
const TMB_NOTIFY = "0000a621-0000-1000-8000-00805f9b34fb";
|
|
95
|
+
const TMB_INDICATE = "0000a620-0000-1000-8000-00805f9b34fb";
|
|
96
|
+
|
|
97
|
+
/** Declares a Viatom TMB monitor, whose history protocol is separate from the BP3 Lepu flow. */
|
|
98
|
+
const tmbBpMonitor = (advertisedName, params) => defineCustomDevice({
|
|
99
|
+
id: params.id ?? `viatom-tmb-${advertisedName.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`,
|
|
100
|
+
nameMatch: params.nameMatch ?? lepuNameMatch(advertisedName),
|
|
101
|
+
clockSync: "supported",
|
|
102
|
+
stuckDataTimeoutMs: 120_000,
|
|
103
|
+
preferredMtu: 247,
|
|
104
|
+
tmb: {
|
|
105
|
+
serviceUuid: TMB_SERVICE,
|
|
106
|
+
writeUuid: TMB_WRITE,
|
|
107
|
+
ackUuid: TMB_ACK
|
|
108
|
+
},
|
|
109
|
+
services: [{
|
|
110
|
+
uuid: TMB_SERVICE,
|
|
111
|
+
monitor: [{
|
|
112
|
+
uuid: TMB_NOTIFY,
|
|
113
|
+
caseSelectorBytes: [0],
|
|
114
|
+
frame: {
|
|
115
|
+
minLengthBytes: 2
|
|
116
|
+
},
|
|
117
|
+
cases: [{
|
|
118
|
+
selector: "*",
|
|
119
|
+
kind: "event"
|
|
120
|
+
}]
|
|
121
|
+
}, {
|
|
122
|
+
uuid: TMB_INDICATE,
|
|
123
|
+
caseSelectorBytes: [0],
|
|
124
|
+
frame: {
|
|
125
|
+
minLengthBytes: 2
|
|
126
|
+
},
|
|
127
|
+
cases: [{
|
|
128
|
+
selector: "*",
|
|
129
|
+
kind: "event"
|
|
130
|
+
}]
|
|
131
|
+
}]
|
|
132
|
+
}]
|
|
133
|
+
}, {
|
|
134
|
+
createFrameHandler: createTmbBloodPressureFrameHandler
|
|
135
|
+
});
|
|
89
136
|
|
|
90
137
|
/**
|
|
91
138
|
* The names the BP3 range advertises.
|
|
@@ -100,5 +147,6 @@ const bp2wMonitor = params => viatomBpMonitor("BP2W", params);
|
|
|
100
147
|
* ```
|
|
101
148
|
*/
|
|
102
149
|
const BP3_MODEL_NAMES = ["BP3", "BP3-B", "BP3-C1", "BP3-C2", "BP3A", "BP3B", "BP3C", "BP3D", "BP3E", "BP3F", "BP3G", "BP3H", "BP3K", "BP3L", "BP3Z", "HDM3D", "HDM3G"];
|
|
103
|
-
|
|
150
|
+
const TMB_MODEL_NAMES = ["BP3-B", "BP3-C1", "BP3-C2", "BP2A Nexus", "BP4 Flex", "TMB-2288", "TMB_2088"];
|
|
151
|
+
export { bp2aMonitor, bp2tMonitor, bp2wMonitor, BP3_MODEL_NAMES, TMB_MODEL_NAMES, tmbBpMonitor, viatomBpMonitor };
|
|
104
152
|
//# sourceMappingURL=viatom.bp-monitors.js.map
|