@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.
Files changed (169) hide show
  1. package/lib/commonjs/modules/bt-management/components/bt-provider-child-wrapper.js +13 -0
  2. package/lib/commonjs/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
  3. package/lib/commonjs/modules/bt-management/hooks/runtime-context.js.map +1 -1
  4. package/lib/commonjs/modules/bt-management/index.js +12 -0
  5. package/lib/commonjs/modules/bt-management/index.js.map +1 -1
  6. package/lib/commonjs/modules/bt-management/services/bt-manager.js +7 -0
  7. package/lib/commonjs/modules/bt-management/services/bt-manager.js.map +1 -1
  8. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js +20 -1
  9. package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
  10. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +2 -1
  11. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  12. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +4 -0
  13. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  14. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +25 -7
  15. package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  16. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +19 -14
  17. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
  18. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js +75 -0
  19. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js.map +1 -0
  20. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recorder.js +52 -0
  21. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recorder.js.map +1 -0
  22. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recording-watch.js +17 -15
  23. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.recording-watch.js.map +1 -1
  24. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.waveform.js +27 -0
  25. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.waveform.js.map +1 -0
  26. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +3 -5
  27. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
  28. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js +13 -1
  29. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js.map +1 -1
  30. package/lib/commonjs/modules/bt-management/types/device-waveform.js +6 -0
  31. package/lib/commonjs/modules/bt-management/types/device-waveform.js.map +1 -0
  32. package/lib/commonjs/modules/bt-management/utils/i-16-from-hex.js.map +1 -1
  33. package/lib/commonjs/modules/next/bluetooth/ble-plx/legacy-driver.js +14 -0
  34. package/lib/commonjs/modules/next/bluetooth/ble-plx/legacy-driver.js.map +1 -1
  35. package/lib/commonjs/modules/next/bluetooth/connections.js +7 -1
  36. package/lib/commonjs/modules/next/bluetooth/connections.js.map +1 -1
  37. package/lib/commonjs/modules/next/bluetooth/driver.js.map +1 -1
  38. package/lib/commonjs/modules/next/bluetooth/runtime.js +8 -1
  39. package/lib/commonjs/modules/next/bluetooth/runtime.js.map +1 -1
  40. package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js +13 -0
  41. package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
  42. package/lib/module/modules/bt-management/hooks/runtime-context.js.map +1 -1
  43. package/lib/module/modules/bt-management/index.js +1 -0
  44. package/lib/module/modules/bt-management/index.js.map +1 -1
  45. package/lib/module/modules/bt-management/services/bt-manager.js +7 -0
  46. package/lib/module/modules/bt-management/services/bt-manager.js.map +1 -1
  47. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js +20 -1
  48. package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -1
  49. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +2 -1
  50. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  51. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +4 -0
  52. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  53. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +25 -7
  54. package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
  55. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +19 -14
  56. package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -1
  57. package/lib/module/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js +72 -0
  58. package/lib/module/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.js.map +1 -0
  59. package/lib/module/modules/bt-management/services/devices/lepu/lepu.recorder.js +48 -0
  60. package/lib/module/modules/bt-management/services/devices/lepu/lepu.recorder.js.map +1 -0
  61. package/lib/module/modules/bt-management/services/devices/lepu/lepu.recording-watch.js +17 -15
  62. package/lib/module/modules/bt-management/services/devices/lepu/lepu.recording-watch.js.map +1 -1
  63. package/lib/module/modules/bt-management/services/devices/lepu/lepu.waveform.js +22 -0
  64. package/lib/module/modules/bt-management/services/devices/lepu/lepu.waveform.js.map +1 -0
  65. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js +3 -6
  66. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-files.js.map +1 -1
  67. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js +14 -1
  68. package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.js.map +1 -1
  69. package/lib/module/modules/bt-management/types/device-waveform.js +4 -0
  70. package/lib/module/modules/bt-management/types/device-waveform.js.map +1 -0
  71. package/lib/module/modules/bt-management/utils/i-16-from-hex.js.map +1 -1
  72. package/lib/module/modules/next/bluetooth/ble-plx/legacy-driver.js +14 -0
  73. package/lib/module/modules/next/bluetooth/ble-plx/legacy-driver.js.map +1 -1
  74. package/lib/module/modules/next/bluetooth/connections.js +7 -1
  75. package/lib/module/modules/next/bluetooth/connections.js.map +1 -1
  76. package/lib/module/modules/next/bluetooth/driver.js.map +1 -1
  77. package/lib/module/modules/next/bluetooth/runtime.js +8 -1
  78. package/lib/module/modules/next/bluetooth/runtime.js.map +1 -1
  79. package/lib/typescript/commonjs/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/src/modules/bt-management/hooks/runtime-context.d.ts +3 -0
  81. package/lib/typescript/commonjs/src/modules/bt-management/hooks/runtime-context.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +1 -0
  83. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts +4 -0
  85. package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  88. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
  89. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -1
  91. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +4 -3
  93. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts +42 -0
  95. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts.map +1 -0
  96. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts +30 -0
  97. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts.map +1 -0
  98. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts +5 -0
  99. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts +9 -0
  101. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts.map +1 -0
  102. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts +1 -1
  103. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
  104. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/src/modules/bt-management/types/create-device-params.d.ts +3 -0
  106. package/lib/typescript/commonjs/src/modules/bt-management/types/create-device-params.d.ts.map +1 -1
  107. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts +11 -0
  108. package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
  109. package/lib/typescript/commonjs/src/modules/bt-management/types/device-waveform.d.ts +15 -0
  110. package/lib/typescript/commonjs/src/modules/bt-management/types/device-waveform.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/src/modules/bt-management/utils/i-16-from-hex.d.ts +1 -1
  112. package/lib/typescript/commonjs/src/modules/bt-management/utils/i-16-from-hex.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/src/modules/next/bluetooth/ble-plx/legacy-driver.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/src/modules/next/bluetooth/connections.d.ts +3 -1
  115. package/lib/typescript/commonjs/src/modules/next/bluetooth/connections.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/src/modules/next/bluetooth/driver.d.ts +6 -1
  117. package/lib/typescript/commonjs/src/modules/next/bluetooth/driver.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts +1 -1
  119. package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/src/modules/next/bluetooth/runtime.d.ts +4 -1
  121. package/lib/typescript/commonjs/src/modules/next/bluetooth/runtime.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/src/modules/next/bluetooth/snapshot.d.ts +14 -1
  123. package/lib/typescript/commonjs/src/modules/next/bluetooth/snapshot.d.ts.map +1 -1
  124. package/lib/typescript/module/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
  125. package/lib/typescript/module/src/modules/bt-management/hooks/runtime-context.d.ts +3 -0
  126. package/lib/typescript/module/src/modules/bt-management/hooks/runtime-context.d.ts.map +1 -1
  127. package/lib/typescript/module/src/modules/bt-management/index.d.ts +1 -0
  128. package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
  129. package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts +4 -0
  130. package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  131. package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -1
  132. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  133. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +4 -1
  134. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  135. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts +2 -1
  136. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
  137. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +4 -3
  138. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -1
  139. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts +42 -0
  140. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.live-ecg-chunks.d.ts.map +1 -0
  141. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts +30 -0
  142. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recorder.d.ts.map +1 -0
  143. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts +5 -0
  144. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.recording-watch.d.ts.map +1 -1
  145. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts +9 -0
  146. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.waveform.d.ts.map +1 -0
  147. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts +1 -1
  148. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-files.d.ts.map +1 -1
  149. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recording-status.d.ts.map +1 -1
  150. package/lib/typescript/module/src/modules/bt-management/types/create-device-params.d.ts +3 -0
  151. package/lib/typescript/module/src/modules/bt-management/types/create-device-params.d.ts.map +1 -1
  152. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts +11 -0
  153. package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -1
  154. package/lib/typescript/module/src/modules/bt-management/types/device-waveform.d.ts +15 -0
  155. package/lib/typescript/module/src/modules/bt-management/types/device-waveform.d.ts.map +1 -0
  156. package/lib/typescript/module/src/modules/bt-management/utils/i-16-from-hex.d.ts +1 -1
  157. package/lib/typescript/module/src/modules/bt-management/utils/i-16-from-hex.d.ts.map +1 -1
  158. package/lib/typescript/module/src/modules/next/bluetooth/ble-plx/legacy-driver.d.ts.map +1 -1
  159. package/lib/typescript/module/src/modules/next/bluetooth/connections.d.ts +3 -1
  160. package/lib/typescript/module/src/modules/next/bluetooth/connections.d.ts.map +1 -1
  161. package/lib/typescript/module/src/modules/next/bluetooth/driver.d.ts +6 -1
  162. package/lib/typescript/module/src/modules/next/bluetooth/driver.d.ts.map +1 -1
  163. package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts +1 -1
  164. package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts.map +1 -1
  165. package/lib/typescript/module/src/modules/next/bluetooth/runtime.d.ts +4 -1
  166. package/lib/typescript/module/src/modules/next/bluetooth/runtime.d.ts.map +1 -1
  167. package/lib/typescript/module/src/modules/next/bluetooth/snapshot.d.ts +14 -1
  168. package/lib/typescript/module/src/modules/next/bluetooth/snapshot.d.ts.map +1 -1
  169. 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 { LepuRecordingWatch } from "../lepu/lepu.recording-watch.js";
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.recordingWatch?.isOpen()) {
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.recordingWatch = lepu.recordingStatus ? new LepuRecordingWatch(lepu.recordingStatus, this.reportRecording) : undefined;
166
- return this.recordingWatch?.observe ?? (() => false);
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.content);
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.content);
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.content)?.forEach(decoded => {
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":"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","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 hex-byte array costs far more memory than the file it describes, so the cap sits well
15
- * below what a device could offer. A stored ECG is tens of kilobytes; a length near this one
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 = 262_144;
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
- content = [];
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.content = [];
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.content.length} of ${this.totalBytes} bytes`);
119
+ return this.fail(`"${this.name}" stopped sending at ${this.received} of ${this.totalBytes} bytes`);
117
120
  }
118
- this.content.push(...payload);
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.content.length,
126
+ receivedBytes: this.received,
122
127
  totalBytes: this.totalBytes
123
128
  });
124
- if (this.content.length >= this.totalBytes) {
129
+ if (this.received >= this.totalBytes) {
125
130
  return this.closeFile();
126
131
  }
127
- return [this.commandFor(LepuCommand.READ_FILE_DATA, le32ToBytes(this.content.length))];
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.content.length !== this.totalBytes) {
132
- return this.fail(`"${this.name}" ended at ${this.content.length} of ${this.totalBytes} bytes`);
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
- content: this.content
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","content","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","push","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":[]}
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":"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","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(pollAnswer));
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.state === this.status.recordingState || this.isLeadOff();
25
- recordingIn = pollAnswer => {
26
- if (!this.isOpen()) {
27
- return undefined;
28
- }
29
- const seconds = le32FromHex(pollAnswer, this.status.secondsByteIndex);
30
- return {
31
- seconds,
32
- ...(this.leadOffSince ? {
33
- leadOffSince: this.leadOffSince
34
- } : {}),
35
- storesOnStop: seconds >= this.status.minimumStoredSeconds
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","recordingState","seconds","secondsByteIndex","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;EAKhBC,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,GAAGX,SAAS,CAACS,UAAU,CAAC,IAAI,CAACH,MAAM,CAACM,SAAS,CAAC,IAAI,IAAI,CAAC,GAAGV,UAAU;IAC9E,IAAI,CAACW,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,CAACT,UAAU,CAAC,CAAC;IAEzC,OAAO,IAAI,CAACE,KAAK,KAAK,IAAI,CAACL,MAAM,CAACa,UAAU,IAAIT,QAAQ,KAAK,IAAI,CAACJ,MAAM,CAACa,UAAU;EACrF,CAAC;;EAED;EACOC,MAAM,GAAGA,CAAA,KACd,IAAI,CAACT,KAAK,KAAK,IAAI,CAACL,MAAM,CAACe,cAAc,IAAI,IAAI,CAACP,SAAS,CAAC,CAAC;EAEvDI,WAAW,GAAIT,UAA6B,IAA4B;IAC9E,IAAI,CAAC,IAAI,CAACW,MAAM,CAAC,CAAC,EAAE;MAClB,OAAOJ,SAAS;IAClB;IAEA,MAAMM,OAAO,GAAGrB,WAAW,CAACQ,UAAU,EAAE,IAAI,CAACH,MAAM,CAACiB,gBAAgB,CAAC;IAErE,OAAO;MACLD,OAAO;MACP,IAAI,IAAI,CAACT,YAAY,GAAG;QAAEA,YAAY,EAAE,IAAI,CAACA;MAAa,CAAC,GAAG,CAAC,CAAC,CAAC;MACjEW,YAAY,EAAEF,OAAO,IAAI,IAAI,CAAChB,MAAM,CAACmB;IACvC,CAAC;EACH,CAAC;EAEOX,SAAS,GAAGA,CAAA,KAAe,IAAI,CAACH,KAAK,KAAK,IAAI,CAACL,MAAM,CAACoB,YAAY;;EAE1E;EACQT,MAAM,GAAIU,SAAgC,IAAW;IAC3D,MAAMC,GAAG,GAAGD,SAAS,GACjB,GAAGA,SAAS,CAACd,YAAY,KAAKG,SAAS,IAAIW,SAAS,CAACH,YAAY,EAAE,GACnErB,MAAM;IAEV,MAAM0B,OAAO,GAAGD,GAAG,MAAM,IAAI,CAACE,QAAQ,IAAI3B,MAAM,CAAC;IAEjD,IAAI,CAAC2B,QAAQ,GAAGF,GAAG;IAEnB,IAAIC,OAAO,EAAE;MACX,IAAI,CAACtB,kBAAkB,CAACoB,SAAS,CAAC;IACpC;EACF,CAAC;AACH;AAEA,SAASvB,kBAAkB","ignoreList":[]}
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 = content => {
92
- if (content.length <= FILE_HEAD_BYTES + FILE_TAIL_BYTES) {
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.slice(FILE_HEAD_BYTES, tailStart));
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":["hexToByte","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","content","map","tailStart"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.ecg-files.ts"],"mappings":"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","ignoreList":[]}
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":[]}