@ovok/native 1.16.1-dev.2187 → 1.16.1-dev.2191
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-management/components/bt-provider-child-wrapper.js +13 -0
- package/lib/commonjs/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
- package/lib/commonjs/modules/bt-management/hooks/runtime-context.js.map +1 -1
- package/lib/commonjs/modules/bt-management/index.js +12 -0
- package/lib/commonjs/modules/bt-management/index.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/bt-manager.js +7 -0
- package/lib/commonjs/modules/bt-management/services/bt-manager.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js +20 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +2 -1
- package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +4 -0
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +25 -7
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +19 -14
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js +75 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recorder.js +52 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recorder.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recording-watch.js +17 -15
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recording-watch.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.waveform.js +27 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.waveform.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +3 -5
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js +13 -1
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/device-waveform.js +6 -0
- package/lib/commonjs/modules/bt-management/types/device-waveform.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/i-16-from-hex.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/ble-plx/legacy-driver.js +14 -0
- package/lib/commonjs/modules/next/bluetooth/ble-plx/legacy-driver.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/connections.js +7 -1
- package/lib/commonjs/modules/next/bluetooth/connections.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/driver.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/runtime.js +8 -1
- package/lib/commonjs/modules/next/bluetooth/runtime.js.map +1 -1
- package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js +13 -0
- package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
- package/lib/module/modules/bt-management/hooks/runtime-context.js.map +1 -1
- package/lib/module/modules/bt-management/index.js +1 -0
- package/lib/module/modules/bt-management/index.js.map +1 -1
- package/lib/module/modules/bt-management/services/bt-manager.js +7 -0
- package/lib/module/modules/bt-management/services/bt-manager.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js +20 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +2 -1
- package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +4 -0
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +25 -7
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +19 -14
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js +72 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.recorder.js +48 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.recorder.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.recording-watch.js +17 -15
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.recording-watch.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.waveform.js +22 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.waveform.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +3 -6
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js +14 -1
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js.map +1 -1
- package/lib/module/modules/bt-management/types/device-waveform.js +4 -0
- package/lib/module/modules/bt-management/types/device-waveform.js.map +1 -0
- package/lib/module/modules/bt-management/utils/i-16-from-hex.js.map +1 -1
- package/lib/module/modules/next/bluetooth/ble-plx/legacy-driver.js +14 -0
- package/lib/module/modules/next/bluetooth/ble-plx/legacy-driver.js.map +1 -1
- package/lib/module/modules/next/bluetooth/connections.js +7 -1
- package/lib/module/modules/next/bluetooth/connections.js.map +1 -1
- package/lib/module/modules/next/bluetooth/driver.js.map +1 -1
- package/lib/module/modules/next/bluetooth/runtime.js +8 -1
- package/lib/module/modules/next/bluetooth/runtime.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/hooks/runtime-context.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/hooks/runtime-context.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -1
- 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/lepu/lepu.file-transfer.d.ts +4 -3
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts +42 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts +5 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/create-device-params.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/create-device-params.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts +11 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-waveform.d.ts +15 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-waveform.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/i-16-from-hex.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/i-16-from-hex.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/ble-plx/legacy-driver.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/connections.d.ts +3 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/connections.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/driver.d.ts +6 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/driver.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/runtime.d.ts +4 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/runtime.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/snapshot.d.ts +14 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/snapshot.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/hooks/runtime-context.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/hooks/runtime-context.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/index.d.ts +1 -0
- package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -1
- 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/lepu/lepu.file-transfer.d.ts +4 -3
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts +42 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts +30 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts +5 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts +9 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/create-device-params.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/types/create-device-params.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts +11 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/device-waveform.d.ts +15 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-waveform.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/i-16-from-hex.d.ts +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/i-16-from-hex.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/ble-plx/legacy-driver.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/connections.d.ts +3 -1
- package/lib/typescript/module/src/modules/next/bluetooth/connections.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/driver.d.ts +6 -1
- package/lib/typescript/module/src/modules/next/bluetooth/driver.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/runtime.d.ts +4 -1
- package/lib/typescript/module/src/modules/next/bluetooth/runtime.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/snapshot.d.ts +14 -1
- package/lib/typescript/module/src/modules/next/bluetooth/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/* eslint-disable max-lines */
|
|
4
4
|
import { MeasurementTypeKey } from "@ovok/core/next";
|
|
5
5
|
import { CaseType } from "../../../types/case-type.js";
|
|
6
|
+
import { bytesToHex } from "../../../utils/bytes-to-hex.js";
|
|
6
7
|
import { createFrameValidator } from "../../../utils/create-frame-validator.js";
|
|
7
8
|
import { parseMeasurement } from "../../../utils/parse-measurement.js";
|
|
8
9
|
import { discardedReadingError, rejectCustomReading } from "../../../utils/reject-custom-reading.js";
|
|
@@ -12,7 +13,7 @@ import { LepuCommandBuilder } from "../lepu/lepu.command-builder.js";
|
|
|
12
13
|
import { LepuEcgTransferSequencer } from "../lepu/lepu.ecg-transfer.js";
|
|
13
14
|
import { withLepuEncryption } from "../lepu/lepu.encryption-handshake.js";
|
|
14
15
|
import { LepuFrameReader } from "../lepu/lepu.frame-reader.js";
|
|
15
|
-
import {
|
|
16
|
+
import { LepuRecorder } from "../lepu/lepu.recorder.js";
|
|
16
17
|
import { LepuSession } from "../lepu/lepu.session.js";
|
|
17
18
|
import { TmbCommandSequencer } from "../tmb/tmb.command-sequencer.js";
|
|
18
19
|
import { TmbFrameReader } from "../tmb/tmb.frame-reader.js";
|
|
@@ -153,7 +154,7 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
153
154
|
/** Stops the open recording; the device stores it when it is long enough, and the files are then read. */
|
|
154
155
|
stopRecording = async () => {
|
|
155
156
|
const stopCommand = this.definition.lepu?.recordingStatus?.stopCommand;
|
|
156
|
-
if (stopCommand === undefined || !this.
|
|
157
|
+
if (stopCommand === undefined || !this.recorder?.isOpen()) {
|
|
157
158
|
throw new Error(`Custom device "${this.definition.id}" has no open recording to stop.`);
|
|
158
159
|
}
|
|
159
160
|
this.requestedStop = stopCommand;
|
|
@@ -162,8 +163,24 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
162
163
|
/** ECG files are read again only on the poll answer that says a record was just saved. */
|
|
163
164
|
watchRecording = lepu => {
|
|
164
165
|
this.requestedStop = undefined;
|
|
165
|
-
this.
|
|
166
|
-
|
|
166
|
+
this.recorder = lepu.recordingStatus ? new LepuRecorder(lepu.recordingStatus, {
|
|
167
|
+
onRecordingChanged: this.reportRecording,
|
|
168
|
+
onSamples: (samples, at) => this.reportSamples(lepu, samples, at),
|
|
169
|
+
onChunk: chunk => this.onResult?.(chunk)
|
|
170
|
+
}) : undefined;
|
|
171
|
+
return this.recorder?.observe ?? (() => false);
|
|
172
|
+
};
|
|
173
|
+
reportSamples = (lepu, samples, at) => {
|
|
174
|
+
const waveform = lepu.recordingStatus?.waveform;
|
|
175
|
+
if (waveform) {
|
|
176
|
+
this.onWaveform?.({
|
|
177
|
+
deviceData: this.deviceData,
|
|
178
|
+
samples,
|
|
179
|
+
sampleRateHz: waveform.sampleRateHz,
|
|
180
|
+
millivoltsPerCount: waveform.millivoltsPerCount,
|
|
181
|
+
at
|
|
182
|
+
});
|
|
183
|
+
}
|
|
167
184
|
};
|
|
168
185
|
takeStopRequest = () => {
|
|
169
186
|
const stop = this.requestedStop;
|
|
@@ -178,7 +195,7 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
178
195
|
} : {})
|
|
179
196
|
});
|
|
180
197
|
reportViatomEcgFile = file => {
|
|
181
|
-
const decoded = decodeViatomEcgRecording(file.
|
|
198
|
+
const decoded = decodeViatomEcgRecording(file.bytes);
|
|
182
199
|
this.deliveredFileNames.add(file.name);
|
|
183
200
|
if (decoded.samples.length === 0) {
|
|
184
201
|
this.onError?.(new Error(`Viatom ECG: file "${file.name}" does not decode to its recorded length.`));
|
|
@@ -194,13 +211,13 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
194
211
|
});
|
|
195
212
|
};
|
|
196
213
|
reportViatomBp2File = file => {
|
|
197
|
-
const decoded = decodeBP2File(file.name, file.
|
|
214
|
+
const decoded = decodeBP2File(file.name, bytesToHex(Array.from(file.bytes)));
|
|
198
215
|
if (decoded) {
|
|
199
216
|
this.reportHistoryOnce(decoded);
|
|
200
217
|
}
|
|
201
218
|
};
|
|
202
219
|
reportViatomBp3File = file => {
|
|
203
|
-
decodeViatomBp3File(file.name, file.
|
|
220
|
+
decodeViatomBp3File(file.name, bytesToHex(Array.from(file.bytes)))?.forEach(decoded => {
|
|
204
221
|
if (!this.deliveredFileNames.has(decoded.recordingId)) {
|
|
205
222
|
this.reportHistoryOnce(decoded);
|
|
206
223
|
}
|
|
@@ -307,6 +324,7 @@ export class CustomDevice extends BTManagedDevice {
|
|
|
307
324
|
|
|
308
325
|
/** Emits a completed session before the state machine returns to CONNECTED. */
|
|
309
326
|
handleMeasurementEnd() {
|
|
327
|
+
this.recorder?.flush();
|
|
310
328
|
const policy = this.sessionPolicy;
|
|
311
329
|
if (!policy) {
|
|
312
330
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeasurementTypeKey","CaseType","createFrameValidator","parseMeasurement","discardedReadingError","rejectCustomReading","decodeBP2File","BTManagedDevice","LepuCommandBuilder","LepuEcgTransferSequencer","withLepuEncryption","LepuFrameReader","LepuRecordingWatch","LepuSession","TmbCommandSequencer","TmbFrameReader","decodeViatomBp3File","decodeViatomEcgRecording","recordedAtFromViatomFileName","createLepuSequencer","recordLepuIdentity","selectLepu","CustomDevice","reportedHistoryIds","Set","validators","Map","sessionAggregates","lepuSession","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","syncsCurrentTime","preferredMtu","declareLepuProtocol","declareTmbProtocol","declareSequencerFactory","frames","forEach","frame","set","create","createCommandSequencer","deviceId","id","recordCursorStorage","tmb","protocol","startBytes","fileTransfer","clear","withEncryption","characteristicUuid","builder","rejectEncryptionAtBytes","expectedDeviceTypes","onIdentified","onRefused","onIdentityRefused","onFile","reportViatomEcgFile","reportViatomBp2File","reportViatomBp3File","skipFiles","acceptFile","name","ecgFileDecoder","test","pollCommand","pollIntervalMs","shouldStartTransfer","watchRecording","takeRequestedCommand","takeStopRequest","onError","reason","Error","onProgress","progress","onConnectionEvent","kind","current","receivedBytes","total","totalBytes","sequencer","session","startByte","stopRecording","stopCommand","recordingStatus","recordingWatch","isOpen","requestedStop","reportRecording","observe","stop","recording","file","decoded","content","add","samples","length","onResult","measurementTypeKey","ecg","caseType","RESULT","diagramPoints","duration","recordedAt","recordingId","reportHistoryOnce","has","info","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","policyFor","key","existing","readingFields","fieldNames","recordOffset","decorate","repeated","repeatedRecords","report","records","floor","from","recordBytes","record","discard","reportMeasurement","parsedFields","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","bytesToHex","createFrameValidator","parseMeasurement","discardedReadingError","rejectCustomReading","decodeBP2File","BTManagedDevice","LepuCommandBuilder","LepuEcgTransferSequencer","withLepuEncryption","LepuFrameReader","LepuRecorder","LepuSession","TmbCommandSequencer","TmbFrameReader","decodeViatomBp3File","decodeViatomEcgRecording","recordedAtFromViatomFileName","createLepuSequencer","recordLepuIdentity","selectLepu","CustomDevice","reportedHistoryIds","Set","validators","Map","sessionAggregates","lepuSession","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","syncsCurrentTime","preferredMtu","declareLepuProtocol","declareTmbProtocol","declareSequencerFactory","frames","forEach","frame","set","create","createCommandSequencer","deviceId","id","recordCursorStorage","tmb","protocol","startBytes","fileTransfer","clear","withEncryption","characteristicUuid","builder","rejectEncryptionAtBytes","expectedDeviceTypes","onIdentified","onRefused","onIdentityRefused","onFile","reportViatomEcgFile","reportViatomBp2File","reportViatomBp3File","skipFiles","acceptFile","name","ecgFileDecoder","test","pollCommand","pollIntervalMs","shouldStartTransfer","watchRecording","takeRequestedCommand","takeStopRequest","onError","reason","Error","onProgress","progress","onConnectionEvent","kind","current","receivedBytes","total","totalBytes","sequencer","session","startByte","stopRecording","stopCommand","recordingStatus","recorder","isOpen","requestedStop","onRecordingChanged","reportRecording","onSamples","samples","at","reportSamples","onChunk","chunk","onResult","observe","waveform","onWaveform","sampleRateHz","millivoltsPerCount","stop","recording","file","decoded","bytes","add","length","measurementTypeKey","ecg","caseType","RESULT","diagramPoints","duration","recordedAt","recordingId","Array","from","reportHistoryOnce","has","info","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","flush","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","policyFor","key","existing","readingFields","fieldNames","recordOffset","decorate","repeated","repeatedRecords","report","records","floor","recordBytes","record","discard","reportMeasurement","parsedFields","find","message"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/custom/custom.device.ts"],"mappings":";;AAAA;AACA,SAASA,kBAAkB,QAAQ,iBAAiB;AAGpD,SAASC,QAAQ,QAAQ,6BAA0B;AAiBnD,SAASC,UAAU,QAAQ,gCAA6B;AACxD,SAASC,oBAAoB,QAAQ,0CAAuC;AAC5E,SAASC,gBAAgB,QAAQ,qCAAkC;AACnE,SACEC,qBAAqB,EACrBC,mBAAmB,QACd,yCAAsC;AAC7C,SAASC,aAAa,QAAQ,qBAAkB;AAChD,SAASC,eAAe,QAAQ,yBAAsB;AACtD,SAASC,kBAAkB,QAAQ,iCAA8B;AAEjE,SAASC,wBAAwB,QAAQ,8BAA2B;AACpE,SAASC,kBAAkB,QAAQ,sCAAmC;AAEtE,SAASC,eAAe,QAAQ,8BAA2B;AAE3D,SAASC,YAAY,QAAQ,0BAAuB;AACpD,SAASC,WAAW,QAAQ,yBAAsB;AAClD,SAASC,mBAAmB,QAAQ,iCAA8B;AAClE,SAASC,cAAc,QAAQ,4BAAyB;AACxD,SAASC,mBAAmB,QAAQ,+BAA4B;AAChE,SACEC,wBAAwB,EACxBC,4BAA4B,QACvB,+BAA4B;AAEnC,SACEC,mBAAmB,EACnBC,kBAAkB,EAClBC,UAAU,QACL,4BAAyB;AAWhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASf,eAAe,CAAiB;EAOxDgB,kBAAkB,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC7BC,UAAU,GAAG,IAAIC,GAAG,CAAsC,CAAC;EAE3DC,iBAAiB,GAAG,IAAID,GAAG,CAA2B,CAAC;EACvDE,WAAW,GAAG,IAAIf,WAAW,CAAC,CAAC;EAKhDgB,WAAWA,CACTC,MAAc,EACdC,MAA0C,EAC1CC,UAAkC,EAClC;IACA,KAAK,CAACF,MAAM,EAAE;MACZ,GAAGC,MAAM;MACTE,uBAAuB,EACrBF,MAAM,CAACE,uBAAuB,IAAID,UAAU,CAACC;IACjD,CAAC,CAAC;IAEF,IAAI,CAACD,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACE,YAAY,GAAGF,UAAU,CAACG,kBAAkB,GAAG,CAAC;IACrD,IAAI,CAACC,aAAa,GAAGJ,UAAU,CAACI,aAAa;IAC7C,IAAI,CAACC,UAAU,CAACC,SAAS,GAAGN,UAAU,CAACM,SAAS;IAChD,IAAI,CAACC,kBAAkB,GAAG,IAAIf,GAAG,CAAC,CAChC,IAAIO,MAAM,CAACS,qBAAqB,IAAI,EAAE,CAAC,EACvC,IAAIT,MAAM,CAACQ,kBAAkB,IAAI,EAAE,CAAC,CACrC,CAAC;IACF,MAAME,YAAY,GAAGT,UAAU,CAACU,IAAI,GAChCrB,UAAU,CAACW,UAAU,CAACU,IAAI,EAAEZ,MAAM,CAACa,gBAAgB,IAAIC,SAAS,CAAC,GACjEA,SAAS;IAEb,IAAI,CAACC,YAAY,GACfJ,YAAY,EAAEK,wBAAwB,KAAK,eAAe,GACtDd,UAAU,CAACa,YAAY,CAACE,MAAM,CAC3BC,OAAO,IAAKA,OAAO,CAACC,IAAI,KAAKR,YAAY,CAACS,KAAK,CAACC,WACnD,CAAC,GACDnB,UAAU,CAACa,YAAY;IAC7B,IAAI,CAACO,WAAW,GAAGpB,UAAU,CAACoB,WAAW;IACzC,IAAI,CAACC,gBAAgB,GAAGrB,UAAU,CAACqB,gBAAgB;IACnD,IAAI,CAACC,kBAAkB,GAAGtB,UAAU,CAACsB,kBAAkB,KAAK,IAAI;IAChE,IAAI,CAACC,gBAAgB,GAAGvB,UAAU,CAACM,SAAS,KAAK,SAAS;IAE1D,IAAIN,UAAU,CAACwB,YAAY,KAAKZ,SAAS,EAAE;MACzC,IAAI,CAACY,YAAY,GAAGxB,UAAU,CAACwB,YAAY;IAC7C;IAEA,IAAI,CAACC,mBAAmB,CAACzB,UAAU,EAAED,MAAM,CAACO,SAAS,CAAC;IACtD,IAAI,CAACoB,kBAAkB,CAAC1B,UAAU,EAAED,MAAM,CAACO,SAAS,CAAC;IACrD,IAAI,CAACqB,uBAAuB,CAAC3B,UAAU,EAAED,MAAM,CAAC;IAEhDC,UAAU,CAAC4B,MAAM,CAACC,OAAO,CAAC,CAACC,KAAK,EAAEb,IAAI,KAAK;MACzC,IAAI,CAACxB,UAAU,CAACsC,GAAG,CAACd,IAAI,EAAE/C,oBAAoB,CAAC4D,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC;EACJ;;EAEA;EACQH,uBAAuBA,CAC7B3B,UAAkC,EAClCD,MAA0C,EACpC;IACN,MAAMiC,MAAM,GAAGhC,UAAU,CAACiC,sBAAsB;IAEhD,IAAI,CAACD,MAAM,EAAE;MACX;IACF;IAEA,IAAI,CAACC,sBAAsB,GAAG,MAC5BD,MAAM,CAAC;MACLE,QAAQ,EAAE,IAAI,CAACpC,MAAM,CAACqC,EAAE;MACxBC,mBAAmB,EAAErC,MAAM,CAACqC;IAC9B,CAAC,CAAC;EACN;;EAEA;EACQV,kBAAkBA,CACxB1B,UAAkC,EAClCM,SAA0D,EACpD;IACN,MAAM+B,GAAG,GAAGrC,UAAU,CAACqC,GAAG;IAE1B,IAAI,CAACA,GAAG,EAAE;MACR;IACF;IAEA,IAAI,CAACjB,WAAW,GAAG,IAAIrC,cAAc,CAAC,CAAC;IACvC,IAAI,CAACkD,sBAAsB,GAAG,MAC5B,IAAInD,mBAAmB,CAAC;MACtBwD,QAAQ,EAAED,GAAG;MACb/B;IACF,CAAC,CAAC;EACN;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACUmB,mBAAmBA,CACzBzB,UAAkC,EAClCM,SAA0D,EACpD;IACN,MAAMI,IAAI,GAAGV,UAAU,CAACU,IAAI;IAE5B,IAAI,CAACA,IAAI,EAAE;MACT;IACF;IAEA,IAAI,CAACU,WAAW,GAAG,IAAIzC,eAAe,CAAC+B,IAAI,CAAC6B,UAAU,EAAE,IAAI,CAAC3C,WAAW,CAAC;IAEzE,IAAI,CAACqC,sBAAsB,GAAG,MAAM;MAClC,IAAIvB,IAAI,CAAC8B,YAAY,KAAK5B,SAAS,EAAE;QACnC,IAAI,CAACrB,kBAAkB,CAACkD,KAAK,CAAC,CAAC;QAE/B,OAAO,IAAI,CAACC,cAAc,CAAChC,IAAI,EAAE,IAAIjC,wBAAwB,CAAC;UAC5DyC,KAAK,EAAE;YACLC,WAAW,EAAET,IAAI,CAACQ,KAAK,CAACC,WAAW;YACnCwB,kBAAkB,EAAEjC,IAAI,CAACQ,KAAK,CAACyB;UACjC,CAAC;UACDC,OAAO,EAAE,IAAIpE,kBAAkB,CAACkC,IAAI,CAAC6B,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;UAC3DjC,SAAS;UACTK,gBAAgB,EAAE,IAAI,CAACb,MAAM,CAACa,gBAAgB,IAAIC,SAAS;UAC3DiC,uBAAuB,EAAEnC,IAAI,CAACmC,uBAAuB;UACrDC,mBAAmB,EAAEpC,IAAI,CAACoC,mBAAmB;UAC7CC,YAAY,EAAE,IAAI,CAACA,YAAY;UAC/BC,SAAS,EAAE,IAAI,CAACC,iBAAiB;UACjCC,MAAM,EACJxC,IAAI,CAAC8B,YAAY,KAAK,KAAK,GACvB,IAAI,CAACW,mBAAmB,GACxBzC,IAAI,CAAC8B,YAAY,KAAK,KAAK,GACzB,IAAI,CAACY,mBAAmB,GACxB,IAAI,CAACC,mBAAmB;UAChCC,SAAS,EACP5C,IAAI,CAAC8B,YAAY,KAAK,KAAK,GAAG5B,SAAS,GAAG,IAAI,CAACL,kBAAkB;UACnEgD,UAAU,EACR7C,IAAI,CAAC8B,YAAY,KAAK,KAAK,GACtBgB,IAAI,IACH9C,IAAI,CAAC+C,cAAc,KAAK7C,SAAS,IAAI,KAAK,CAAC8C,IAAI,CAACF,IAAI,CAAC,GACvD9C,IAAI,CAAC8B,YAAY,KAAK,KAAK,GACxBgB,IAAI,IAAK,aAAa,CAACE,IAAI,CAACF,IAAI,CAAC,GAClC5C,SAAS;UACjB+C,WAAW,EAAEjD,IAAI,CAACiD,WAAW;UAC7BC,cAAc,EAAElD,IAAI,CAACkD,cAAc;UACnCC,mBAAmB,EACjBnD,IAAI,CAAC8B,YAAY,KAAK,KAAK,GAAG,IAAI,CAACsB,cAAc,CAACpD,IAAI,CAAC,GAAGE,SAAS;UACrEmD,oBAAoB,EAAE,IAAI,CAACC,eAAe;UAC1CC,OAAO,EAAGC,MAAM,IACd,IAAI,CAACD,OAAO,GAAG,IAAIE,KAAK,CAAC,eAAeD,MAAM,EAAE,CAAC,CAAC;UACpDE,UAAU,EAAGC,QAAQ,IACnB,IAAI,CAACC,iBAAiB,GAAG;YACvBjE,UAAU,EAAE,IAAI,CAACA,UAAU;YAC3BkE,IAAI,EAAE,kBAAkB;YACxBF,QAAQ,EAAE;cACRG,OAAO,EAAEH,QAAQ,CAACI,aAAa;cAC/BC,KAAK,EAAEL,QAAQ,CAACM;YAClB;UACF,CAAC;QACL,CAAC,CAAC,CAAC;MACL;MAEA,OAAO,IAAI,CAACjC,cAAc,CACxBhC,IAAI,EACJvB,mBAAmB,CACjBuB,IAAI,EACJ;QACEqC,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BC,SAAS,EAAE,IAAI,CAACC;MAClB,CAAC,EACD3C,SAAS,EACT,IAAI,CAACR,MAAM,CAACa,gBAAgB,IAAIC,SAClC,CACF,CAAC;IACH,CAAC;EACH;;EAEA;EACQ8B,cAAc,GAAGA,CACvBhC,IAAoB,EACpBkE,SAAsD,KAEtDlE,IAAI,CAAC4B,QAAQ,KAAK1B,SAAS,GACvBlC,kBAAkB,CAACkG,SAAS,EAAE;IAC5B1D,KAAK,EAAE;MACLC,WAAW,EAAET,IAAI,CAACQ,KAAK,CAACC,WAAW;MACnCwB,kBAAkB,EAAEjC,IAAI,CAACQ,KAAK,CAACyB;IACjC,CAAC;IACDkC,OAAO,EAAE,IAAI,CAACjF,WAAW;IACzBe,gBAAgB,EAAE,IAAI,CAACb,MAAM,CAACa,gBAAgB,IAAIC,SAAS;IAC3DkE,SAAS,EAAEpE,IAAI,CAAC6B,UAAU,CAAC,CAAC,CAAC;IAC7BS,SAAS,EAAE,IAAI,CAACC;EAClB,CAAC,CAAC,GACF2B,SAAS;;EAEf;EACOG,aAAa,GAAG,MAAAA,CAAA,KAA2B;IAChD,MAAMC,WAAW,GAAG,IAAI,CAAChF,UAAU,CAACU,IAAI,EAAEuE,eAAe,EAAED,WAAW;IAEtE,IAAIA,WAAW,KAAKpE,SAAS,IAAI,CAAC,IAAI,CAACsE,QAAQ,EAAEC,MAAM,CAAC,CAAC,EAAE;MACzD,MAAM,IAAIhB,KAAK,CACb,kBAAkB,IAAI,CAACnE,UAAU,CAACmC,EAAE,kCACtC,CAAC;IACH;IAEA,IAAI,CAACiD,aAAa,GAAGJ,WAAW;EAClC,CAAC;;EAED;EACQlB,cAAc,GACpBpD,IAAoB,IAC6B;IACjD,IAAI,CAAC0E,aAAa,GAAGxE,SAAS;IAC9B,IAAI,CAACsE,QAAQ,GAAGxE,IAAI,CAACuE,eAAe,GAChC,IAAIrG,YAAY,CAAC8B,IAAI,CAACuE,eAAe,EAAE;MACrCI,kBAAkB,EAAE,IAAI,CAACC,eAAe;MACxCC,SAAS,EAAEA,CAACC,OAAO,EAAEC,EAAE,KAAK,IAAI,CAACC,aAAa,CAAChF,IAAI,EAAE8E,OAAO,EAAEC,EAAE,CAAC;MACjEE,OAAO,EAAGC,KAAK,IAAK,IAAI,CAACC,QAAQ,GAAGD,KAAgC;IACtE,CAAC,CAAC,GACFhF,SAAS;IAEb,OAAO,IAAI,CAACsE,QAAQ,EAAEY,OAAO,KAAK,MAAM,KAAK,CAAC;EAChD,CAAC;EAEOJ,aAAa,GAAGA,CACtBhF,IAAoB,EACpB8E,OAA0B,EAC1BC,EAAQ,KACC;IACT,MAAMM,QAAQ,GAAGrF,IAAI,CAACuE,eAAe,EAAEc,QAAQ;IAE/C,IAAIA,QAAQ,EAAE;MACZ,IAAI,CAACC,UAAU,GAAG;QAChB3F,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3BmF,OAAO;QACPS,YAAY,EAAEF,QAAQ,CAACE,YAAY;QACnCC,kBAAkB,EAAEH,QAAQ,CAACG,kBAAkB;QAC/CT;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAEOzB,eAAe,GAAGA,CAAA,KAA0B;IAClD,MAAMmC,IAAI,GAAG,IAAI,CAACf,aAAa;IAE/B,IAAI,CAACA,aAAa,GAAGxE,SAAS;IAE9B,OAAOuF,IAAI;EACb,CAAC;EAEOb,eAAe,GACrBc,SAA6C,IAE7C,IAAI,CAAC9B,iBAAiB,GAAG;IACvBjE,UAAU,EAAE,IAAI,CAACA,UAAU;IAC3BkE,IAAI,EAAE,WAAW;IACjB,IAAI6B,SAAS,GAAG;MAAEA;IAAU,CAAC,GAAG,CAAC,CAAC;EACpC,CAAC,CAAC;EAEIjD,mBAAmB,GAAIkD,IAAc,IAAW;IACtD,MAAMC,OAAO,GAAGrH,wBAAwB,CAACoH,IAAI,CAACE,KAAK,CAAC;IAEpD,IAAI,CAAChG,kBAAkB,CAACiG,GAAG,CAACH,IAAI,CAAC7C,IAAI,CAAC;IAEtC,IAAI8C,OAAO,CAACd,OAAO,CAACiB,MAAM,KAAK,CAAC,EAAE;MAChC,IAAI,CAACxC,OAAO,GACV,IAAIE,KAAK,CACP,qBAAqBkC,IAAI,CAAC7C,IAAI,2CAChC,CACF,CAAC;MAED;IACF;IAEA,IAAI,CAACqC,QAAQ,GAAG;MACda,kBAAkB,EAAE3I,kBAAkB,CAAC4I,GAAG;MAC1CC,QAAQ,EAAE5I,QAAQ,CAAC6I,MAAM;MACzBC,aAAa,EAAER,OAAO,CAACd,OAAO;MAC9BuB,QAAQ,EAAET,OAAO,CAACS,QAAQ;MAC1BC,UAAU,EAAE9H,4BAA4B,CAACmH,IAAI,CAAC7C,IAAI,CAAC;MACnDyD,WAAW,EAAEZ,IAAI,CAAC7C;IACpB,CAA4B,CAAC;EAC/B,CAAC;EAEOJ,mBAAmB,GAAIiD,IAAc,IAAW;IACtD,MAAMC,OAAO,GAAGhI,aAAa,CAAC+H,IAAI,CAAC7C,IAAI,EAAEvF,UAAU,CAACiJ,KAAK,CAACC,IAAI,CAACd,IAAI,CAACE,KAAK,CAAC,CAAC,CAAC;IAE5E,IAAID,OAAO,EAAE;MACX,IAAI,CAACc,iBAAiB,CAACd,OAAO,CAAC;IACjC;EACF,CAAC;EAEOjD,mBAAmB,GAAIgD,IAAc,IAAW;IACtDrH,mBAAmB,CAACqH,IAAI,CAAC7C,IAAI,EAAEvF,UAAU,CAACiJ,KAAK,CAACC,IAAI,CAACd,IAAI,CAACE,KAAK,CAAC,CAAC,CAAC,EAAE1E,OAAO,CAAEyE,OAAO,IAAK;MACvF,IAAI,CAAC,IAAI,CAAC/F,kBAAkB,CAAC8G,GAAG,CAACf,OAAO,CAACW,WAAW,CAAC,EAAE;QACrD,IAAI,CAACG,iBAAiB,CAACd,OAAO,CAAC;MACjC;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACQc,iBAAiB,GAAId,OAAgC,IAAW;IACtE,IAAI,IAAI,CAAC/G,kBAAkB,CAAC8H,GAAG,CAACf,OAAO,CAACW,WAAW,CAAC,EAAE;MACpD;IACF;IAEA,IAAI,CAAC1H,kBAAkB,CAACiH,GAAG,CAACF,OAAO,CAACW,WAAW,CAAC;IAChD,IAAI,CAACpB,QAAQ,GAAG;MACd,GAAGS,OAAO;MACVM,QAAQ,EAAE5I,QAAQ,CAAC6I;IACrB,CAA4B,CAAC;EAC/B,CAAC;EAEO9D,YAAY,GAAIuE,IAAoB,IAC1ClI,kBAAkB,CAAC,IAAI,CAACiB,UAAU,EAAEiH,IAAI,CAAC;EAEnCrE,iBAAiB,GAAIiB,MAAc,IAAW;IACpD,IAAI,CAACD,OAAO,GACV,IAAIE,KAAK,CACP,kBAAkB,IAAI,CAACnE,UAAU,CAACmC,EAAE,wBAAwB+B,MAAM,GACpE,CACF,CAAC;EACH,CAAC;EAESqD,eAAe,GAAGA,CAACC,GAAa,EAAEvG,IAAY,KAAc;IACpE,MAAMwG,QAAQ,GAAG,IAAI,CAAChI,UAAU,CAACiI,GAAG,CAACC,MAAM,CAAC1G,IAAI,IAAI,EAAE,CAAC,CAAC2G,WAAW,CAAC,CAAC,CAAC;IAEtE,IAAI,CAACH,QAAQ,EAAE;MACb,OAAO,KAAK;IACd;IAEA,OAAOA,QAAQ,CAACD,GAAG,CAAC;EACtB,CAAC;;EAED;AACF;AACA;AACA;AACA;EACYK,qBAAqB,GAC7BC,IAAuD,IACD;IACtD,IAAI;MACF,IAAIA,IAAI,CAACC,WAAW,CAACC,cAAc,IAAI,CAACF,IAAI,CAACG,WAAW,EAAE;QACxD,OAAO;UACL,GAAGH,IAAI;UACPC,WAAW,EAAE;YAAE,GAAGD,IAAI,CAACC,WAAW;YAAEnB,QAAQ,EAAE5I,QAAQ,CAACkK;UAAM;QAC/D,CAAC;MACH;MAEA,IAAI,CAACC,WAAW,CACdL,IAAI,CAACM,UAAU,EACfN,IAAI,CAACC,WAAW,EAChBD,IAAI,CAAChG,KAAK,IAAI,EAAE,EAChBgG,IAAI,CAACG,WAAW,KAAK,IACvB,CAAC;MAED,IAAIH,IAAI,CAACC,WAAW,CAACM,WAAW,EAAE;QAChC,OAAO;UACL,GAAGP,IAAI;UACPC,WAAW,EAAE;YAAE,GAAGD,IAAI,CAACC,WAAW;YAAEnB,QAAQ,EAAE5I,QAAQ,CAACkK;UAAM;QAC/D,CAAC;MACH;MAEA,IAAI,IAAI,CAAC9H,aAAa,EAAE;QACtB,IAAI,CAACkI,oBAAoB,CAACR,IAAI,CAAC;QAE/B,OAAO;UACL,GAAGA,IAAI;UACPC,WAAW,EAAE;YAAE,GAAGD,IAAI,CAACC,WAAW;YAAEnB,QAAQ,EAAE5I,QAAQ,CAACuK;UAAO;QAChE,CAAC;MACH;MAEA,IAAI,IAAI,CAACC,2BAA2B,CAACV,IAAI,CAAC,EAAE;QAC1C,IAAI,CAACW,WAAW,CAACX,IAAI,CAAC;MACxB;IACF,CAAC,CAAC,OAAOY,KAAK,EAAE;MACd,IAAI,CAACzE,OAAO,GAAGyE,KAAc,CAAC;IAChC;IAEA,OAAO;MACL,GAAGZ,IAAI;MACPC,WAAW,EAAE;QAAE,GAAGD,IAAI,CAACC,WAAW;QAAEnB,QAAQ,EAAE5I,QAAQ,CAACkK;MAAM;IAC/D,CAAC;EACH,CAAC;;EAED;EACUM,2BAA2B,GACnCG,KAAwD,IAC5C,IAAI;;EAElB;AACF;AACA;AACA;EACYC,mBAAmBA,CAC3BC,aAA2B,EAC3BC,eAAyB,EACT;IAChB,IAAI,CAACX,WAAW,CAACU,aAAa,EAAEjI,SAAS,EAAEkI,eAAe,EAAE,IAAI,CAAC;IAEjE;EACF;EAEQX,WAAWA,CACjBC,UAAwB,EACxBL,WAAoC,EACpCjG,KAAwB,EACxBmG,WAAoB,EACd;IACN,IAAI,CAAC/H,YAAY,GAAG;MAClBkI,UAAU;MACVL,WAAW;MACXjG,KAAK;MACLmG,WAAW;MACXc,IAAI,EAAGC,OAAO,IACZ,IAAI,CAACnD,QAAQ,GAAG;QACd,GAAGmD,OAAO;QACVpC,QAAQ,EAAE5I,QAAQ,CAAC6I;MACrB,CAAiB;IACrB,CAAC,CAAC;EACJ;;EAEA;EACUoC,oBAAoBA,CAAA,EAAS;IACrC,IAAI,CAAC/D,QAAQ,EAAEgE,KAAK,CAAC,CAAC;IAEtB,MAAMC,MAAM,GAAG,IAAI,CAAC/I,aAAa;IAEjC,IAAI,CAAC+I,MAAM,EAAE;MACX;IACF;IAEA,MAAMC,UAAU,GAAG,CAAC,GAAG,IAAI,CAACzJ,iBAAiB,CAAC0J,MAAM,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC1J,iBAAiB,CAAC8C,KAAK,CAAC,CAAC;IAC9B,MAAMuE,UAAU,GAAG,IAAI,CAACsC,gBAAgB;IAExC,IAAI,CAACA,gBAAgB,GAAG1I,SAAS;IAEjC,IAAI,CAACoG,UAAU,IAAImC,MAAM,CAACJ,IAAI,KAAK,MAAM,EAAE;MACzC;IACF;IAEAK,UAAU,CAACvH,OAAO,CAAE0H,SAAS,IAAK;MAChC,IAAIA,SAAS,CAACC,KAAK,GAAGL,MAAM,CAACM,UAAU,EAAE;QACvC;MACF;MAEA,MAAMC,OAAO,GAAG;QACd,GAAGH,SAAS,CAACI,MAAM;QACnB,GAAGC,MAAM,CAACC,WAAW,CACnB,CAAC,GAAGN,SAAS,CAACO,IAAI,CAACC,OAAO,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAACxG,IAAI,EAAEkB,KAAK,CAAC,KAAK,CACnDlB,IAAI,EACJ,IAAI,CAACyG,cAAc,CACjBV,SAAS,CAACI,MAAM,CAACjD,kBAAkB,EACnClD,IAAI,EACJkB,KAAK,GAAG6E,SAAS,CAACC,KACpB,CAAC,CACF,CACH,CAAC;QACD5C,QAAQ,EAAE5I,QAAQ,CAAC6I,MAAM;QACzBG;MACF,CAA4B;MAE5B,IAAI,CAAC+B,IAAI,CAAC,IAAI,CAACmB,eAAe,CAACR,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC;EACJ;EAEQO,cAAcA,CACpBvD,kBAAsC,EACtClD,IAAY,EACZ2G,KAAa,EACL;IACR,MAAMC,QAAQ,GAAG,IAAI,CAACpK,UAAU,CAACqK,MAAM,CAAC3C,GAAG,CACzC,GAAGhB,kBAAkB,IAAIlD,IAAI,EAC/B,CAAC,EAAE4G,QAAQ;IAEX,OAAOA,QAAQ,KAAKxJ,SAAS,GACzB0J,IAAI,CAACC,KAAK,CAACJ,KAAK,CAAC,GACjBK,MAAM,CAACL,KAAK,CAACM,OAAO,CAACL,QAAQ,CAAC,CAAC;EACrC;;EAEA;EACQ9B,oBAAoBA,CAC1BR,IAAuD,EACjD;IACN,MAAM4C,YAAY,GAAG5C,IAAI,CAACC,WAAW,CAAC2C,YAAY,IAAI,EAAE;IACxD,MAAMC,eAAe,GAAG,IAAI,CAACrB,gBAAgB,IAAI,IAAIsB,IAAI,CAAC,CAAC;IAE3DF,YAAY,CAAC7I,OAAO,CAAEgJ,WAAW,IAAK;MACpC,MAAM7B,OAAO,GAAG,IAAI,CAAC8B,iBAAiB,CAAChD,IAAI,CAACM,UAAU,EAAEyC,WAAW,CAAC;MACpE,MAAME,SAAS,GAAG,IAAI,CAACC,oBAAoB,CAAChC,OAAO,EAAE6B,WAAW,CAAC;;MAEjE;MACA;MACA,IAAIE,SAAS,EAAE;QACb;MACF;;MAEA;MACA,IAAI,IAAI,CAACE,SAAS,CAACJ,WAAW,CAACnE,kBAAkB,CAAC,KAAK,QAAQ,EAAE;QAC/D,IAAI,CAACb,QAAQ,GAAGmD,OAAO,CAAC;QAExB;MACF;MAEA,MAAMkC,GAAG,GAAGvD,MAAM,CAACkD,WAAW,CAACnE,kBAAkB,CAAC;MAClD,MAAMyE,QAAQ,GAAG,IAAI,CAACxL,iBAAiB,CAAC+H,GAAG,CAACwD,GAAG,CAAC;MAChD,MAAMpB,IAAI,GAAGqB,QAAQ,EAAErB,IAAI,IAAI,IAAIpK,GAAG,CAAiB,CAAC;MACxD,MAAM0L,aAAa,GAAGpC,OAAiD;MAEvE6B,WAAW,CAACQ,UAAU,CAACxJ,OAAO,CAAE2B,IAAI,IAAK;QACvC,MAAM2G,KAAK,GAAGiB,aAAa,CAAC5H,IAAI,CAAC;QAEjC,IAAI,OAAO2G,KAAK,KAAK,QAAQ,EAAE;UAC7BL,IAAI,CAAC/H,GAAG,CAACyB,IAAI,EAAE,CAACsG,IAAI,CAACpC,GAAG,CAAClE,IAAI,CAAC,IAAI,CAAC,IAAI2G,KAAK,CAAC;QAC/C;MACF,CAAC,CAAC;MAEF,IAAI,CAACxK,iBAAiB,CAACoC,GAAG,CAACmJ,GAAG,EAAE;QAC9B1B,KAAK,EAAE,CAAC2B,QAAQ,EAAE3B,KAAK,IAAI,CAAC,IAAI,CAAC;QACjCG,MAAM,EAAEwB,QAAQ,EAAExB,MAAM,IAAIX,OAAO;QACnCc;MACF,CAAC,CAAC;MACF,IAAI,CAACR,gBAAgB,KAAKqB,eAAe;IAC3C,CAAC,CAAC;EACJ;;EAEA;EACUT,eAAe,GAAGA,CAC1BlB,OAAqB,EACrBlH,KAAyB,EACzBwJ,YAAqB,KACG;IACxB,MAAMC,QAAQ,GAAG,IAAI,CAACvL,UAAU,CAACkK,eAAe;IAEhD,OAAOqB,QAAQ,GACVA,QAAQ,CAACvC,OAAO,EAAElH,KAAK,EAAEwJ,YAAY,CAAC,GACvCtC,OAAO;EACb,CAAC;EAEOD,IAAIA,CAACC,OAA4B,EAAQ;IAC/C,IAAIA,OAAO,EAAE;MACX,IAAI,CAACnD,QAAQ,GAAGmD,OAAO,CAAC;IAC1B;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACUP,WAAWA,CAACX,IAAuD,EAAE;IAC3E,MAAM0D,QAAQ,GAAG1D,IAAI,CAACC,WAAW,CAAC0D,eAAe;IAEjD,IAAI,CAACD,QAAQ,IAAI,CAAC1D,IAAI,CAAChG,KAAK,EAAE;MAC5B,IAAI,CAAC4J,MAAM,CAAC5D,IAAI,CAACM,UAAU,EAAEN,IAAI,CAACC,WAAW,EAAED,IAAI,CAAChG,KAAK,CAAC;MAE1D;IACF;IAEA,MAAM6J,OAAO,GAAGrB,IAAI,CAACsB,KAAK,CACxB,CAAC9D,IAAI,CAAChG,KAAK,CAAC2E,MAAM,GAAG+E,QAAQ,CAACrE,IAAI,IAAIqE,QAAQ,CAACK,WACjD,CAAC;IAED,KAAK,IAAIC,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGH,OAAO,EAAEG,MAAM,EAAE,EAAE;MAC/C,IAAI,CAACJ,MAAM,CACTvN,gBAAgB,CACd2J,IAAI,CAAChG,KAAK,EACVgG,IAAI,CAACC,WAAW,EAChByD,QAAQ,CAACrE,IAAI,GAAG2E,MAAM,GAAGN,QAAQ,CAACK,WACpC,CAAC,EACD/D,IAAI,CAACC,WAAW,EAChBD,IAAI,CAAChG,KAAK,EACV0J,QAAQ,CAACrE,IAAI,GAAG2E,MAAM,GAAGN,QAAQ,CAACK,WACpC,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACUH,MAAMA,CACZtD,UAAwB,EACxBL,WAAwB,EACxBjG,KAAyB,EACzBwJ,YAAqB,EACf;IACN,MAAMZ,YAAY,GAAG3C,WAAW,CAAC2C,YAAY,IAAI,EAAE;IAEnD,IAAIA,YAAY,CAACjE,MAAM,KAAK,CAAC,EAAE;MAC7B,IAAI,CAACsF,OAAO,CAAC,4CAA4C,EAAE3D,UAAU,CAAC;MAEtE;IACF;IAEAsC,YAAY,CAAC7I,OAAO,CAAEgJ,WAAW,IAC/B,IAAI,CAACmB,iBAAiB,CAAC5D,UAAU,EAAEyC,WAAW,EAAE/I,KAAK,EAAEwJ,YAAY,CACrE,CAAC;EACH;EAEQS,OAAOA,CAAC7H,MAAc,EAAEkE,UAAwB,EAAQ;IAC9D,IAAI,CAACnE,OAAO,GACV7F,qBAAqB,CAAC,IAAI,CAAC4B,UAAU,CAACmC,EAAE,EAAE+B,MAAM,EAAEkE,UAAU,CAC9D,CAAC;EACH;EAEQ4D,iBAAiBA,CACvB5D,UAAwB,EACxByC,WAA6B,EAC7B/I,KAAyB,EACzBwJ,YAAqB,EACf;IACN,MAAMtC,OAAO,GAAG,IAAI,CAAC8B,iBAAiB,CAAC1C,UAAU,EAAEyC,WAAW,CAAC;IAC/D,MAAME,SAAS,GAAG,IAAI,CAACC,oBAAoB,CAAChC,OAAO,EAAE6B,WAAW,CAAC;IAEjE,IAAIE,SAAS,EAAE;MACb,IAAI,CAACgB,OAAO,CAAChB,SAAS,EAAE/B,OAAO,CAAC;MAEhC;IACF;IAEA,IAAI,CAACD,IAAI,CAAC,IAAI,CAACmB,eAAe,CAAClB,OAAO,EAAElH,KAAK,EAAEwJ,YAAY,CAAC,CAAC;EAC/D;EAEQR,iBAAiBA,CACvB1C,UAAwB,EACxByC,WAA6B,EACf;IACd,MAAM7B,OAAO,GAAG;MACdpC,QAAQ,EAAEwB,UAAU,CAACxB,QAAQ;MAC7BF,kBAAkB,EAAEmE,WAAW,CAACnE;IAClC,CAAiB;IAEjB,MAAM0E,aAAa,GAAGpC,OAAiD;IACvE,MAAMiD,YAAY,GAAG7D,UAAoD;IAEzEyC,WAAW,CAACQ,UAAU,CAACxJ,OAAO,CAAE2B,IAAI,IAAK;MACvC4H,aAAa,CAAC5H,IAAI,CAAC,GAAGyI,YAAY,CAACzI,IAAI,CAAC;IAC1C,CAAC,CAAC;IAEF,OAAOwF,OAAO;EAChB;EAEQgC,oBAAoBA,CAC1BhC,OAAqB,EACrB6B,WAA6B,EACT;IACpB,OAAOA,WAAW,CAACQ,UAAU,CAC1BrB,GAAG,CAAExG,IAAI,IACRnF,mBAAmB,CACjB,IAAI,CAAC2B,UAAU,CAACqK,MAAM,EACtBQ,WAAW,CAACnE,kBAAkB,EAC9BlD,IAAI,EACHwF,OAAO,CAA4CxF,IAAI,CAC1D,CACF,CAAC,CACA0I,IAAI,CAAEC,OAAO,IAAKA,OAAO,KAAKvL,SAAS,CAAC;EAC7C;AACF","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
/* eslint-disable max-lines */
|
|
4
4
|
|
|
5
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
5
6
|
import { le32FromHex } from "../../../utils/le-32-from-hex.js";
|
|
6
7
|
import { le32ToBytes } from "../../../utils/le-32-to-bytes.js";
|
|
7
8
|
import { LepuCommand } from "./lepu.commands.js";
|
|
@@ -11,11 +12,10 @@ import { describeLepuResponseType, isLepuSuccess } from "./lepu.response-type.js
|
|
|
11
12
|
const FILE_SIZE_OFFSET = 0;
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
|
-
* A
|
|
15
|
-
*
|
|
16
|
-
* is a length to refuse rather than try to hold on a low-memory tablet.
|
|
15
|
+
* A size beyond this is a corrupt length field rather than a recording. A holter ECG takes about
|
|
16
|
+
* a byte per sample at 125 Hz, so this holds about 140 hours.
|
|
17
17
|
*/
|
|
18
|
-
const MAX_FILE_BYTES =
|
|
18
|
+
const MAX_FILE_BYTES = 64 * 1_024 * 1_024;
|
|
19
19
|
const TRANSFER_COMMANDS = [LepuCommand.GET_FILE_LIST, LepuCommand.READ_FILE_START, LepuCommand.READ_FILE_DATA, LepuCommand.READ_FILE_END];
|
|
20
20
|
|
|
21
21
|
/** A file read from a Lepu device. */
|
|
@@ -44,7 +44,8 @@ class LepuFileTransfer {
|
|
|
44
44
|
fileIndex = 0;
|
|
45
45
|
name = "";
|
|
46
46
|
totalBytes = 0;
|
|
47
|
-
|
|
47
|
+
bytes = new Uint8Array(0);
|
|
48
|
+
received = 0;
|
|
48
49
|
isSessionOpen = false;
|
|
49
50
|
isDone = false;
|
|
50
51
|
constructor(params) {
|
|
@@ -88,7 +89,8 @@ class LepuFileTransfer {
|
|
|
88
89
|
}
|
|
89
90
|
this.name = name;
|
|
90
91
|
this.totalBytes = 0;
|
|
91
|
-
this.
|
|
92
|
+
this.bytes = new Uint8Array(0);
|
|
93
|
+
this.received = 0;
|
|
92
94
|
return [this.commandFor(LepuCommand.READ_FILE_START, [...lepuNameBytes(name), ...le32ToBytes(0)])];
|
|
93
95
|
};
|
|
94
96
|
|
|
@@ -103,6 +105,7 @@ class LepuFileTransfer {
|
|
|
103
105
|
if (this.totalBytes === 0) {
|
|
104
106
|
return this.closeFile();
|
|
105
107
|
}
|
|
108
|
+
this.bytes = new Uint8Array(this.totalBytes);
|
|
106
109
|
return [this.commandFor(LepuCommand.READ_FILE_DATA, le32ToBytes(0))];
|
|
107
110
|
};
|
|
108
111
|
|
|
@@ -113,28 +116,30 @@ class LepuFileTransfer {
|
|
|
113
116
|
*/
|
|
114
117
|
appendChunk = payload => {
|
|
115
118
|
if (payload.length === 0) {
|
|
116
|
-
return this.fail(`"${this.name}" stopped sending at ${this.
|
|
119
|
+
return this.fail(`"${this.name}" stopped sending at ${this.received} of ${this.totalBytes} bytes`);
|
|
117
120
|
}
|
|
118
|
-
this.
|
|
121
|
+
const fits = payload.slice(0, this.totalBytes - this.received);
|
|
122
|
+
this.bytes.set(fits.map(hexToByte), this.received);
|
|
123
|
+
this.received += fits.length;
|
|
119
124
|
this.params.onProgress?.({
|
|
120
125
|
name: this.name,
|
|
121
|
-
receivedBytes: this.
|
|
126
|
+
receivedBytes: this.received,
|
|
122
127
|
totalBytes: this.totalBytes
|
|
123
128
|
});
|
|
124
|
-
if (this.
|
|
129
|
+
if (this.received >= this.totalBytes) {
|
|
125
130
|
return this.closeFile();
|
|
126
131
|
}
|
|
127
|
-
return [this.commandFor(LepuCommand.READ_FILE_DATA, le32ToBytes(this.
|
|
132
|
+
return [this.commandFor(LepuCommand.READ_FILE_DATA, le32ToBytes(this.received))];
|
|
128
133
|
};
|
|
129
134
|
closedFile = () => {
|
|
130
135
|
this.isSessionOpen = false;
|
|
131
|
-
if (this.totalBytes > 0 && this.
|
|
132
|
-
return this.fail(`"${this.name}" ended at ${this.
|
|
136
|
+
if (this.totalBytes > 0 && this.received !== this.totalBytes) {
|
|
137
|
+
return this.fail(`"${this.name}" ended at ${this.received} of ${this.totalBytes} bytes`);
|
|
133
138
|
}
|
|
134
139
|
if (this.totalBytes > 0) {
|
|
135
140
|
this.params.onFile({
|
|
136
141
|
name: this.name,
|
|
137
|
-
|
|
142
|
+
bytes: this.bytes
|
|
138
143
|
});
|
|
139
144
|
}
|
|
140
145
|
this.fileIndex++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["le32FromHex","le32ToBytes","LepuCommand","lepuNameBytes","lepuNamesFrom","lepuCommandOf","lepuPayloadOf","describeLepuResponseType","isLepuSuccess","FILE_SIZE_OFFSET","MAX_FILE_BYTES","TRANSFER_COMMANDS","GET_FILE_LIST","READ_FILE_START","READ_FILE_DATA","READ_FILE_END","LepuFileTransfer","files","fileIndex","name","totalBytes","
|
|
1
|
+
{"version":3,"names":["hexToByte","le32FromHex","le32ToBytes","LepuCommand","lepuNameBytes","lepuNamesFrom","lepuCommandOf","lepuPayloadOf","describeLepuResponseType","isLepuSuccess","FILE_SIZE_OFFSET","MAX_FILE_BYTES","TRANSFER_COMMANDS","GET_FILE_LIST","READ_FILE_START","READ_FILE_DATA","READ_FILE_END","LepuFileTransfer","files","fileIndex","name","totalBytes","bytes","Uint8Array","received","isSessionOpen","isDone","constructor","params","isHistoryTransfer","initialCommands","delayBeforeWriteMs","commandFor","nextCommand","frame","command","afterTransfer","includes","undefined","fail","openNextFile","openedFile","appendChunk","closedFile","skipFiles","has","acceptFile","payload","limit","maxFileBytes","closeFile","length","fits","slice","set","map","onProgress","receivedBytes","onFile","reason","onError","write","builder","build"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.file-transfer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core/next";
|
|
4
|
+
import { CaseType } from "../../../types/case-type.js";
|
|
5
|
+
import { millivoltsOf } from "./lepu.waveform.js";
|
|
6
|
+
|
|
7
|
+
/** How long a live chunk grows before it is handed over. */
|
|
8
|
+
const CHUNK_SECONDS = 300;
|
|
9
|
+
const MS_PER_SECOND = 1_000;
|
|
10
|
+
const COVERAGE_DECIMALS = 2;
|
|
11
|
+
|
|
12
|
+
/** A stretch of a recording sent live, before the device's own file supersedes it. */
|
|
13
|
+
|
|
14
|
+
/** Collects one recording's live samples and hands them over in chunks of five minutes or less. */
|
|
15
|
+
class LiveEcgChunks {
|
|
16
|
+
counts = [];
|
|
17
|
+
index = 0;
|
|
18
|
+
constructor(waveform, onChunk) {
|
|
19
|
+
this.waveform = waveform;
|
|
20
|
+
this.onChunk = onChunk;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Adds the samples an answer at `at` carried, `recordedSeconds` into the recording. */
|
|
24
|
+
append = (samples, at, recordedSeconds) => {
|
|
25
|
+
this.recordingKey ??= recordingKeyOf(new Date(at.getTime() - recordedSeconds * MS_PER_SECOND));
|
|
26
|
+
this.startedAt ??= new Date(at.getTime() - this.secondsOf(samples.length) * MS_PER_SECOND);
|
|
27
|
+
this.counts.push(...samples);
|
|
28
|
+
this.lastAt = at;
|
|
29
|
+
if (this.secondsOf(this.counts.length) >= CHUNK_SECONDS) {
|
|
30
|
+
this.flush();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** Hands over what has been collected; the recording may continue into a further chunk. */
|
|
35
|
+
flush = () => {
|
|
36
|
+
if (this.counts.length === 0 || !this.startedAt || !this.lastAt || !this.recordingKey) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.onChunk({
|
|
40
|
+
measurementTypeKey: MeasurementTypeKey.ecg,
|
|
41
|
+
caseType: CaseType.RESULT,
|
|
42
|
+
diagramPoints: this.counts.map(count => millivoltsOf(count, this.waveform)),
|
|
43
|
+
duration: this.secondsOf(this.counts.length),
|
|
44
|
+
recordedAt: this.startedAt,
|
|
45
|
+
recordingId: `${this.recordingKey}-live-${this.index}`,
|
|
46
|
+
live: true,
|
|
47
|
+
coverage: this.coverage()
|
|
48
|
+
});
|
|
49
|
+
this.index += 1;
|
|
50
|
+
this.counts = [];
|
|
51
|
+
this.startedAt = undefined;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** Hands over the rest and forgets the recording, so the next one starts its own chunks. */
|
|
55
|
+
endRecording = () => {
|
|
56
|
+
this.flush();
|
|
57
|
+
this.recordingKey = undefined;
|
|
58
|
+
this.index = 0;
|
|
59
|
+
};
|
|
60
|
+
secondsOf = samples => samples / this.waveform.sampleRateHz;
|
|
61
|
+
coverage = () => {
|
|
62
|
+
const spanSeconds = ((this.lastAt?.getTime() ?? 0) - (this.startedAt?.getTime() ?? 0)) / MS_PER_SECOND;
|
|
63
|
+
const expected = Math.max(this.counts.length, spanSeconds * this.waveform.sampleRateHz);
|
|
64
|
+
return Number((this.counts.length / expected).toFixed(COVERAGE_DECIMALS));
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const pad = value => String(value).padStart(2, "0");
|
|
68
|
+
|
|
69
|
+
/** The name the device gives the recording's file: `R` and its local start, to the second. */
|
|
70
|
+
const recordingKeyOf = start => `R${start.getFullYear()}${pad(start.getMonth() + 1)}${pad(start.getDate())}` + `${pad(start.getHours())}${pad(start.getMinutes())}${pad(start.getSeconds())}`;
|
|
71
|
+
export { LiveEcgChunks };
|
|
72
|
+
//# sourceMappingURL=lepu.live-ecg-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","CaseType","millivoltsOf","CHUNK_SECONDS","MS_PER_SECOND","COVERAGE_DECIMALS","LiveEcgChunks","counts","index","constructor","waveform","onChunk","append","samples","at","recordedSeconds","recordingKey","recordingKeyOf","Date","getTime","startedAt","secondsOf","length","push","lastAt","flush","measurementTypeKey","ecg","caseType","RESULT","diagramPoints","map","count","duration","recordedAt","recordingId","live","coverage","undefined","endRecording","sampleRateHz","spanSeconds","expected","Math","max","Number","toFixed","pad","value","String","padStart","start","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,iBAAiB;AAEpD,SAASC,QAAQ,QAAQ,6BAA0B;AAEnD,SAASC,YAAY,QAAkB,oBAAiB;;AAExD;AACA,MAAMC,aAAa,GAAG,GAAG;AAEzB,MAAMC,aAAa,GAAG,KAAK;AAC3B,MAAMC,iBAAiB,GAAG,CAAC;;AAE3B;;AAwBA;AACA,MAAMC,aAAa,CAAC;EACVC,MAAM,GAAa,EAAE;EAIrBC,KAAK,GAAG,CAAC;EAEVC,WAAWA,CACCC,QAAkB,EAClBC,OAAsC,EACvD;IAAA,KAFiBD,QAAkB,GAAlBA,QAAkB;IAAA,KAClBC,OAAsC,GAAtCA,OAAsC;EACtD;;EAEH;EACOC,MAAM,GAAGA,CAACC,OAA0B,EAAEC,EAAQ,EAAEC,eAAuB,KAAW;IACvF,IAAI,CAACC,YAAY,KAAKC,cAAc,CAAC,IAAIC,IAAI,CAACJ,EAAE,CAACK,OAAO,CAAC,CAAC,GAAGJ,eAAe,GAAGX,aAAa,CAAC,CAAC;IAC9F,IAAI,CAACgB,SAAS,KAAK,IAAIF,IAAI,CAACJ,EAAE,CAACK,OAAO,CAAC,CAAC,GAAG,IAAI,CAACE,SAAS,CAACR,OAAO,CAACS,MAAM,CAAC,GAAGlB,aAAa,CAAC;IAC1F,IAAI,CAACG,MAAM,CAACgB,IAAI,CAAC,GAAGV,OAAO,CAAC;IAC5B,IAAI,CAACW,MAAM,GAAGV,EAAE;IAEhB,IAAI,IAAI,CAACO,SAAS,CAAC,IAAI,CAACd,MAAM,CAACe,MAAM,CAAC,IAAInB,aAAa,EAAE;MACvD,IAAI,CAACsB,KAAK,CAAC,CAAC;IACd;EACF,CAAC;;EAED;EACOA,KAAK,GAAGA,CAAA,KAAY;IACzB,IAAI,IAAI,CAAClB,MAAM,CAACe,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAACF,SAAS,IAAI,CAAC,IAAI,CAACI,MAAM,IAAI,CAAC,IAAI,CAACR,YAAY,EAAE;MACrF;IACF;IAEA,IAAI,CAACL,OAAO,CAAC;MACXe,kBAAkB,EAAE1B,kBAAkB,CAAC2B,GAAG;MAC1CC,QAAQ,EAAE3B,QAAQ,CAAC4B,MAAM;MACzBC,aAAa,EAAE,IAAI,CAACvB,MAAM,CAACwB,GAAG,CAAEC,KAAK,IAAK9B,YAAY,CAAC8B,KAAK,EAAE,IAAI,CAACtB,QAAQ,CAAC,CAAC;MAC7EuB,QAAQ,EAAE,IAAI,CAACZ,SAAS,CAAC,IAAI,CAACd,MAAM,CAACe,MAAM,CAAC;MAC5CY,UAAU,EAAE,IAAI,CAACd,SAAS;MAC1Be,WAAW,EAAE,GAAG,IAAI,CAACnB,YAAY,SAAS,IAAI,CAACR,KAAK,EAAE;MACtD4B,IAAI,EAAE,IAAI;MACVC,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,CAAC7B,KAAK,IAAI,CAAC;IACf,IAAI,CAACD,MAAM,GAAG,EAAE;IAChB,IAAI,CAACa,SAAS,GAAGkB,SAAS;EAC5B,CAAC;;EAED;EACOC,YAAY,GAAGA,CAAA,KAAY;IAChC,IAAI,CAACd,KAAK,CAAC,CAAC;IACZ,IAAI,CAACT,YAAY,GAAGsB,SAAS;IAC7B,IAAI,CAAC9B,KAAK,GAAG,CAAC;EAChB,CAAC;EAEOa,SAAS,GAAIR,OAAe,IAAaA,OAAO,GAAG,IAAI,CAACH,QAAQ,CAAC8B,YAAY;EAE7EH,QAAQ,GAAGA,CAAA,KAAc;IAC/B,MAAMI,WAAW,GAAG,CAAC,CAAC,IAAI,CAACjB,MAAM,EAAEL,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAACC,SAAS,EAAED,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAIf,aAAa;IACtG,MAAMsC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACrC,MAAM,CAACe,MAAM,EAAEmB,WAAW,GAAG,IAAI,CAAC/B,QAAQ,CAAC8B,YAAY,CAAC;IAEvF,OAAOK,MAAM,CAAC,CAAC,IAAI,CAACtC,MAAM,CAACe,MAAM,GAAGoB,QAAQ,EAAEI,OAAO,CAACzC,iBAAiB,CAAC,CAAC;EAC3E,CAAC;AACH;AAEA,MAAM0C,GAAG,GAAIC,KAAa,IAAaC,MAAM,CAACD,KAAK,CAAC,CAACE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;;AAErE;AACA,MAAMjC,cAAc,GAAIkC,KAAW,IACjC,IAAIA,KAAK,CAACC,WAAW,CAAC,CAAC,GAAGL,GAAG,CAACI,KAAK,CAACE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGN,GAAG,CAACI,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE,GAC5E,GAAGP,GAAG,CAACI,KAAK,CAACI,QAAQ,CAAC,CAAC,CAAC,GAAGR,GAAG,CAACI,KAAK,CAACK,UAAU,CAAC,CAAC,CAAC,GAAGT,GAAG,CAACI,KAAK,CAACM,UAAU,CAAC,CAAC,CAAC,EAAE;AAEhF,SAASnD,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { LiveEcgChunks } from "./lepu.live-ecg-chunks.js";
|
|
4
|
+
import { LepuRecordingWatch } from "./lepu.recording-watch.js";
|
|
5
|
+
import { waveformSamples } from "./lepu.waveform.js";
|
|
6
|
+
/**
|
|
7
|
+
* Follows a recorder's open recording through its poll answers: reports its state, feeds the live
|
|
8
|
+
* trace while it records, and hands its samples over in chunks.
|
|
9
|
+
*/
|
|
10
|
+
class LepuRecorder {
|
|
11
|
+
constructor(status, callbacks) {
|
|
12
|
+
this.status = status;
|
|
13
|
+
this.callbacks = callbacks;
|
|
14
|
+
this.watch = new LepuRecordingWatch(status, callbacks.onRecordingChanged);
|
|
15
|
+
this.chunks = status.waveform ? new LiveEcgChunks(status.waveform, callbacks.onChunk) : undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Reads one poll answer; true when it is the first in the saved state, so the files are read. */
|
|
19
|
+
observe = pollAnswer => {
|
|
20
|
+
const saved = this.watch.observe(pollAnswer);
|
|
21
|
+
if (this.watch.isRecording()) {
|
|
22
|
+
this.record(pollAnswer);
|
|
23
|
+
} else if (this.watch.isOpen()) {
|
|
24
|
+
this.chunks?.flush();
|
|
25
|
+
} else {
|
|
26
|
+
this.chunks?.endRecording();
|
|
27
|
+
}
|
|
28
|
+
return saved;
|
|
29
|
+
};
|
|
30
|
+
isOpen = () => this.watch.isOpen();
|
|
31
|
+
|
|
32
|
+
/** Hands over what is collected, for a connection that is ending. */
|
|
33
|
+
flush = () => this.chunks?.flush();
|
|
34
|
+
record = pollAnswer => {
|
|
35
|
+
if (!this.status.waveform) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const samples = waveformSamples(pollAnswer, this.status.waveform);
|
|
39
|
+
const at = new Date();
|
|
40
|
+
if (samples.length === 0) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.callbacks.onSamples(samples, at);
|
|
44
|
+
this.chunks?.append(samples, at, this.watch.recordedSeconds());
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export { LepuRecorder };
|
|
48
|
+
//# sourceMappingURL=lepu.recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LiveEcgChunks","LepuRecordingWatch","waveformSamples","LepuRecorder","constructor","status","callbacks","watch","onRecordingChanged","chunks","waveform","onChunk","undefined","observe","pollAnswer","saved","isRecording","record","isOpen","flush","endRecording","samples","at","Date","length","onSamples","append","recordedSeconds"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.recorder.ts"],"mappings":";;AAGA,SAAuBA,aAAa,QAAQ,2BAAwB;AACpE,SAASC,kBAAkB,QAAQ,2BAAwB;AAC3D,SAASC,eAAe,QAAQ,oBAAiB;AAcjD;AACA;AACA;AACA;AACA,MAAMC,YAAY,CAAC;EAIVC,WAAWA,CACCC,MAAuB,EACvBC,SAAgC,EACjD;IAAA,KAFiBD,MAAuB,GAAvBA,MAAuB;IAAA,KACvBC,SAAgC,GAAhCA,SAAgC;IAEjD,IAAI,CAACC,KAAK,GAAG,IAAIN,kBAAkB,CAACI,MAAM,EAAEC,SAAS,CAACE,kBAAkB,CAAC;IACzE,IAAI,CAACC,MAAM,GAAGJ,MAAM,CAACK,QAAQ,GAAG,IAAIV,aAAa,CAACK,MAAM,CAACK,QAAQ,EAAEJ,SAAS,CAACK,OAAO,CAAC,GAAGC,SAAS;EACnG;;EAEA;EACOC,OAAO,GAAIC,UAA6B,IAAc;IAC3D,MAAMC,KAAK,GAAG,IAAI,CAACR,KAAK,CAACM,OAAO,CAACC,UAAU,CAAC;IAE5C,IAAI,IAAI,CAACP,KAAK,CAACS,WAAW,CAAC,CAAC,EAAE;MAC5B,IAAI,CAACC,MAAM,CAACH,UAAU,CAAC;IACzB,CAAC,MAAM,IAAI,IAAI,CAACP,KAAK,CAACW,MAAM,CAAC,CAAC,EAAE;MAC9B,IAAI,CAACT,MAAM,EAAEU,KAAK,CAAC,CAAC;IACtB,CAAC,MAAM;MACL,IAAI,CAACV,MAAM,EAAEW,YAAY,CAAC,CAAC;IAC7B;IAEA,OAAOL,KAAK;EACd,CAAC;EAEMG,MAAM,GAAGA,CAAA,KAAe,IAAI,CAACX,KAAK,CAACW,MAAM,CAAC,CAAC;;EAElD;EACOC,KAAK,GAAGA,CAAA,KAAY,IAAI,CAACV,MAAM,EAAEU,KAAK,CAAC,CAAC;EAEvCF,MAAM,GAAIH,UAA6B,IAAW;IACxD,IAAI,CAAC,IAAI,CAACT,MAAM,CAACK,QAAQ,EAAE;MACzB;IACF;IAEA,MAAMW,OAAO,GAAGnB,eAAe,CAACY,UAAU,EAAE,IAAI,CAACT,MAAM,CAACK,QAAQ,CAAC;IACjE,MAAMY,EAAE,GAAG,IAAIC,IAAI,CAAC,CAAC;IAErB,IAAIF,OAAO,CAACG,MAAM,KAAK,CAAC,EAAE;MACxB;IACF;IAEA,IAAI,CAAClB,SAAS,CAACmB,SAAS,CAACJ,OAAO,EAAEC,EAAE,CAAC;IACrC,IAAI,CAACb,MAAM,EAAEiB,MAAM,CAACL,OAAO,EAAEC,EAAE,EAAE,IAAI,CAACf,KAAK,CAACoB,eAAe,CAAC,CAAC,CAAC;EAChE,CAAC;AACH;AAEA,SAASxB,YAAY","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ const LOW_NIBBLE = 0x0f;
|
|
|
6
6
|
const CLOSED = "closed";
|
|
7
7
|
/** Follows a recorder's open recording through its poll answers. */
|
|
8
8
|
class LepuRecordingWatch {
|
|
9
|
+
seconds = 0;
|
|
9
10
|
constructor(status, onRecordingChanged) {
|
|
10
11
|
this.status = status;
|
|
11
12
|
this.onRecordingChanged = onRecordingChanged;
|
|
@@ -15,26 +16,27 @@ class LepuRecordingWatch {
|
|
|
15
16
|
observe = pollAnswer => {
|
|
16
17
|
const previous = this.state;
|
|
17
18
|
this.state = hexToByte(pollAnswer[this.status.byteIndex] ?? "00") & LOW_NIBBLE;
|
|
19
|
+
this.seconds = le32FromHex(pollAnswer, this.status.secondsByteIndex);
|
|
18
20
|
this.leadOffSince = this.isLeadOff() ? this.leadOffSince ?? new Date() : undefined;
|
|
19
|
-
this.report(this.recordingIn(
|
|
21
|
+
this.report(this.recordingIn());
|
|
20
22
|
return this.state === this.status.savedState && previous !== this.status.savedState;
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
/** Whether a recording is open, so that stopping it means something. */
|
|
24
|
-
isOpen = () => this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
26
|
+
isOpen = () => this.isRecording() || this.isLeadOff();
|
|
27
|
+
|
|
28
|
+
/** Whether the electrodes have contact and samples are being recorded. */
|
|
29
|
+
isRecording = () => this.state === this.status.recordingState;
|
|
30
|
+
|
|
31
|
+
/** Seconds recorded, as of the last answer. */
|
|
32
|
+
recordedSeconds = () => this.seconds;
|
|
33
|
+
recordingIn = () => this.isOpen() ? {
|
|
34
|
+
seconds: this.seconds,
|
|
35
|
+
...(this.leadOffSince ? {
|
|
36
|
+
leadOffSince: this.leadOffSince
|
|
37
|
+
} : {}),
|
|
38
|
+
storesOnStop: this.seconds >= this.status.minimumStoredSeconds
|
|
39
|
+
} : undefined;
|
|
38
40
|
isLeadOff = () => this.state === this.status.leadOffState;
|
|
39
41
|
|
|
40
42
|
/** Reports a change in what the app would act on, not every tick of the seconds. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["hexToByte","le32FromHex","LOW_NIBBLE","CLOSED","LepuRecordingWatch","constructor","status","onRecordingChanged","observe","pollAnswer","previous","state","byteIndex","leadOffSince","isLeadOff","Date","undefined","report","recordingIn","savedState","isOpen","
|
|
1
|
+
{"version":3,"names":["hexToByte","le32FromHex","LOW_NIBBLE","CLOSED","LepuRecordingWatch","seconds","constructor","status","onRecordingChanged","observe","pollAnswer","previous","state","byteIndex","secondsByteIndex","leadOffSince","isLeadOff","Date","undefined","report","recordingIn","savedState","isOpen","isRecording","recordingState","recordedSeconds","storesOnStop","minimumStoredSeconds","leadOffState","recording","key","changed","reported"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.recording-watch.ts"],"mappings":";;AAEA,SAASA,SAAS,QAAQ,+BAA4B;AACtD,SAASC,WAAW,QAAQ,kCAA+B;AAE3D,MAAMC,UAAU,GAAG,IAAI;AACvB,MAAMC,MAAM,GAAG,QAAQ;AAMvB;AACA,MAAMC,kBAAkB,CAAC;EAEfC,OAAO,GAAG,CAAC;EAIZC,WAAWA,CACCC,MAAuB,EACvBC,kBAA8D,EAC/E;IAAA,KAFiBD,MAAuB,GAAvBA,MAAuB;IAAA,KACvBC,kBAA8D,GAA9DA,kBAA8D;EAC9E;;EAEH;EACOC,OAAO,GAAIC,UAA6B,IAAc;IAC3D,MAAMC,QAAQ,GAAG,IAAI,CAACC,KAAK;IAE3B,IAAI,CAACA,KAAK,GAAGZ,SAAS,CAACU,UAAU,CAAC,IAAI,CAACH,MAAM,CAACM,SAAS,CAAC,IAAI,IAAI,CAAC,GAAGX,UAAU;IAC9E,IAAI,CAACG,OAAO,GAAGJ,WAAW,CAACS,UAAU,EAAE,IAAI,CAACH,MAAM,CAACO,gBAAgB,CAAC;IACpE,IAAI,CAACC,YAAY,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC,GAAI,IAAI,CAACD,YAAY,IAAI,IAAIE,IAAI,CAAC,CAAC,GAAIC,SAAS;IACpF,IAAI,CAACC,MAAM,CAAC,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC;IAE/B,OAAO,IAAI,CAACR,KAAK,KAAK,IAAI,CAACL,MAAM,CAACc,UAAU,IAAIV,QAAQ,KAAK,IAAI,CAACJ,MAAM,CAACc,UAAU;EACrF,CAAC;;EAED;EACOC,MAAM,GAAGA,CAAA,KAAe,IAAI,CAACC,WAAW,CAAC,CAAC,IAAI,IAAI,CAACP,SAAS,CAAC,CAAC;;EAErE;EACOO,WAAW,GAAGA,CAAA,KAAe,IAAI,CAACX,KAAK,KAAK,IAAI,CAACL,MAAM,CAACiB,cAAc;;EAE7E;EACOC,eAAe,GAAGA,CAAA,KAAc,IAAI,CAACpB,OAAO;EAE3Ce,WAAW,GAAGA,CAAA,KACpB,IAAI,CAACE,MAAM,CAAC,CAAC,GACT;IACEjB,OAAO,EAAE,IAAI,CAACA,OAAO;IACrB,IAAI,IAAI,CAACU,YAAY,GAAG;MAAEA,YAAY,EAAE,IAAI,CAACA;IAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACjEW,YAAY,EAAE,IAAI,CAACrB,OAAO,IAAI,IAAI,CAACE,MAAM,CAACoB;EAC5C,CAAC,GACDT,SAAS;EAEPF,SAAS,GAAGA,CAAA,KAAe,IAAI,CAACJ,KAAK,KAAK,IAAI,CAACL,MAAM,CAACqB,YAAY;;EAE1E;EACQT,MAAM,GAAIU,SAAgC,IAAW;IAC3D,MAAMC,GAAG,GAAGD,SAAS,GACjB,GAAGA,SAAS,CAACd,YAAY,KAAKG,SAAS,IAAIW,SAAS,CAACH,YAAY,EAAE,GACnEvB,MAAM;IAEV,MAAM4B,OAAO,GAAGD,GAAG,MAAM,IAAI,CAACE,QAAQ,IAAI7B,MAAM,CAAC;IAEjD,IAAI,CAAC6B,QAAQ,GAAGF,GAAG;IAEnB,IAAIC,OAAO,EAAE;MACX,IAAI,CAACvB,kBAAkB,CAACqB,SAAS,CAAC;IACpC;EACF,CAAC;AACH;AAEA,SAASzB,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { i16FromHex } from "../../../utils/i-16-from-hex.js";
|
|
4
|
+
import { le16FromHex } from "../../../utils/le-16-from-hex.js";
|
|
5
|
+
const SAMPLE_BYTES = 2;
|
|
6
|
+
const COUNT_BYTES = 2;
|
|
7
|
+
const CHECKSUM_BYTES = 1;
|
|
8
|
+
|
|
9
|
+
/** The raw sample counts a poll answer carries, never more than the frame holds. */
|
|
10
|
+
const waveformSamples = (pollAnswer, waveform) => {
|
|
11
|
+
const first = waveform.countByteIndex + COUNT_BYTES;
|
|
12
|
+
const declared = le16FromHex(pollAnswer, waveform.countByteIndex);
|
|
13
|
+
const available = Math.floor((pollAnswer.length - CHECKSUM_BYTES - first) / SAMPLE_BYTES);
|
|
14
|
+
return Array.from({
|
|
15
|
+
length: Math.max(0, Math.min(declared, available))
|
|
16
|
+
}, (_, index) => i16FromHex(pollAnswer, first + index * SAMPLE_BYTES));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** One count in millivolts; the no-signal marker reads as 0. */
|
|
20
|
+
const millivoltsOf = (count, waveform) => count === waveform.noSignalCount ? 0 : count * waveform.millivoltsPerCount;
|
|
21
|
+
export { millivoltsOf, waveformSamples };
|
|
22
|
+
//# sourceMappingURL=lepu.waveform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["i16FromHex","le16FromHex","SAMPLE_BYTES","COUNT_BYTES","CHECKSUM_BYTES","waveformSamples","pollAnswer","waveform","first","countByteIndex","declared","available","Math","floor","length","Array","from","max","min","_","index","millivoltsOf","count","noSignalCount","millivoltsPerCount"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/lepu/lepu.waveform.ts"],"mappings":";;AACA,SAASA,UAAU,QAAQ,iCAA8B;AACzD,SAASC,WAAW,QAAQ,kCAA+B;AAI3D,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,WAAW,GAAG,CAAC;AACrB,MAAMC,cAAc,GAAG,CAAC;;AAExB;AACA,MAAMC,eAAe,GAAGA,CAACC,UAA6B,EAAEC,QAAkB,KAAe;EACvF,MAAMC,KAAK,GAAGD,QAAQ,CAACE,cAAc,GAAGN,WAAW;EACnD,MAAMO,QAAQ,GAAGT,WAAW,CAACK,UAAU,EAAEC,QAAQ,CAACE,cAAc,CAAC;EACjE,MAAME,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACP,UAAU,CAACQ,MAAM,GAAGV,cAAc,GAAGI,KAAK,IAAIN,YAAY,CAAC;EAEzF,OAAOa,KAAK,CAACC,IAAI,CAAC;IAAEF,MAAM,EAAEF,IAAI,CAACK,GAAG,CAAC,CAAC,EAAEL,IAAI,CAACM,GAAG,CAACR,QAAQ,EAAEC,SAAS,CAAC;EAAE,CAAC,EAAE,CAACQ,CAAC,EAAEC,KAAK,KACjFpB,UAAU,CAACM,UAAU,EAAEE,KAAK,GAAGY,KAAK,GAAGlB,YAAY,CAAC,CAAC;AACzD,CAAC;;AAED;AACA,MAAMmB,YAAY,GAAGA,CAACC,KAAa,EAAEf,QAAkB,KACrDe,KAAK,KAAKf,QAAQ,CAACgB,aAAa,GAAG,CAAC,GAAGD,KAAK,GAAGf,QAAQ,CAACiB,kBAAkB;AAE5E,SAASH,YAAY,EAAEhB,eAAe","ignoreList":[]}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
-
|
|
5
3
|
/** ECG sample rate in hertz. */
|
|
6
4
|
const VIATOM_ECG_SAMPLE_RATE_HZ = 125;
|
|
7
5
|
|
|
@@ -88,14 +86,13 @@ const toMillivolts = count => count === NO_SIGNAL_COUNT ? 0 : count * VIATOM_ECG
|
|
|
88
86
|
* Decodes an ER1/ER2 recording. A file whose waveform does not last as long as its tail
|
|
89
87
|
* records is returned empty, because that file is in a format this decoder does not read.
|
|
90
88
|
*/
|
|
91
|
-
const decodeViatomEcgRecording =
|
|
92
|
-
if (
|
|
89
|
+
const decodeViatomEcgRecording = bytes => {
|
|
90
|
+
if (bytes.length <= FILE_HEAD_BYTES + FILE_TAIL_BYTES) {
|
|
93
91
|
return emptyRecording();
|
|
94
92
|
}
|
|
95
|
-
const bytes = content.map(hexToByte);
|
|
96
93
|
const tailStart = bytes.length - FILE_TAIL_BYTES;
|
|
97
94
|
const duration = readUInt32LittleEndian(bytes, tailStart);
|
|
98
|
-
const counts = decompressWaveform(bytes.
|
|
95
|
+
const counts = decompressWaveform(bytes.subarray(FILE_HEAD_BYTES, tailStart));
|
|
99
96
|
if (!matchesRecordedTime(counts.length, duration)) {
|
|
100
97
|
return emptyRecording();
|
|
101
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["VIATOM_ECG_SAMPLE_RATE_HZ","VIATOM_ECG_MILLIVOLTS_PER_COUNT","validDate","year","month","day","hour","minute","second","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","undefined","recordedAtFromViatomFileName","name","digits","match","length","Number","slice","FILE_HEAD_BYTES","FILE_TAIL_BYTES","NO_SIGNAL_COUNT","LARGE_STEP_BASE","RECORDED_TIME_TOLERANCE_SECONDS","emptyRecording","samples","duration","toInt8","byte","toInt16","value","ONE_BYTE_STEP","width","next","current","bytes","at","ESCAPED_STEPS","Map","_current","decompressWaveform","counts","step","get","push","readUInt32LittleEndian","from","matchesRecordedTime","sampleCount","seconds","Math","abs","toMillivolts","count","decodeViatomEcgRecording","tailStart","subarray","map"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-files.ts"],"mappings":"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","ignoreList":[]}
|