@ovok/native 1.6.24 → 1.6.25

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 (106) hide show
  1. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js +1 -1
  2. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
  3. package/lib/commonjs/modules/bt-device/constants/supported-devices.js +1 -1
  4. package/lib/commonjs/modules/bt-device/constants/supported-devices.js.map +1 -1
  5. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +7 -1
  6. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  7. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +37 -0
  8. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  9. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +7 -1
  10. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  11. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js +13 -4
  12. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js +3 -0
  14. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -1
  15. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js +2 -0
  16. package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -1
  17. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +24 -3
  18. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -1
  19. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-record.js +98 -0
  20. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-record.js.map +1 -0
  21. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +215 -55
  22. package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -1
  23. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +16 -3
  24. package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
  25. package/lib/commonjs/modules/bt-management/types/clock-sync.js +1 -0
  26. package/lib/commonjs/modules/bt-management/types/clock-sync.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/utils/convert-ecg-diagnostic-flag.js +19 -27
  28. package/lib/commonjs/modules/bt-management/utils/convert-ecg-diagnostic-flag.js.map +1 -1
  29. package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js +2 -2
  30. package/lib/module/modules/bt-device/constants/supported-device-catalog-entries.js.map +1 -1
  31. package/lib/module/modules/bt-device/constants/supported-devices.js +1 -1
  32. package/lib/module/modules/bt-device/constants/supported-devices.js.map +1 -1
  33. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +7 -1
  34. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  35. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +37 -0
  36. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  37. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +7 -1
  38. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  39. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js +13 -3
  40. package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -1
  41. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js +4 -1
  42. package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -1
  43. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js +2 -0
  44. package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -1
  45. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +24 -3
  46. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -1
  47. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-record.js +92 -0
  48. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-record.js.map +1 -0
  49. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +211 -50
  50. package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -1
  51. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +16 -3
  52. package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -1
  53. package/lib/module/modules/bt-management/types/clock-sync.js +1 -0
  54. package/lib/module/modules/bt-management/types/clock-sync.js.map +1 -1
  55. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  56. package/lib/module/modules/bt-management/utils/convert-ecg-diagnostic-flag.js +19 -27
  57. package/lib/module/modules/bt-management/utils/convert-ecg-diagnostic-flag.js.map +1 -1
  58. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
  59. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +8 -0
  62. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +9 -3
  65. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -1
  67. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +3 -1
  68. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -1
  69. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +2 -1
  70. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -1
  71. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts +41 -0
  72. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts.map +1 -0
  73. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +50 -18
  74. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts +10 -0
  78. package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +4 -1
  80. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  81. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-ecg-diagnostic-flag.d.ts.map +1 -1
  82. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-entries.d.ts.map +1 -1
  83. package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  84. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  85. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +8 -0
  86. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  87. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  88. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +9 -3
  89. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -1
  90. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -1
  91. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +3 -1
  92. package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -1
  93. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +2 -1
  94. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -1
  95. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts +41 -0
  96. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-record.d.ts.map +1 -0
  97. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +50 -18
  98. package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -1
  99. package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -1
  100. package/lib/typescript/module/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  101. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts +10 -0
  102. package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -1
  103. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +4 -1
  104. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  105. package/lib/typescript/module/src/modules/bt-management/utils/convert-ecg-diagnostic-flag.d.ts.map +1 -1
  106. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_caseType","_btManagedDevice","_verovalEcgSamples","_verovalEcgTransfer","SERVICE","CONTROL_POINT","NOTIFY","STUCK_TIMEOUT_MS","PREFERRED_MTU","acceptEverything","caseValuePosition","cases","caseValue","caseType","CaseType","OTHER","parseDefinitions","description","VerovalEcgDevice","BTManagedDevice","stuckDataTimeout","preferredMtu","onStreamStart","undefined","mainServices","uuid","monitorUuids","parsingModel","validatePackage","createCommandSequencer","VerovalEcgTransfer","write","serviceUuid","characteristicUuid","onRecording","reportRecording","constructor","device","params","handleSuccessResult","bytes","diagramPoints","decodeVerovalEcgSamples","length","onError","Error","onResult","measurementTypeKey","MeasurementTypeKey","ecg","RESULT","duration","VEROVAL_ECG_SAMPLE_RATE_HZ","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-device.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,IAAAC,SAAA,GAAAD,OAAA;AAIA,IAAAE,gBAAA,GAAAF,OAAA;AAEA,IAAAG,kBAAA,GAAAH,OAAA;AAIA,IAAAI,mBAAA,GAAAJ,OAAA;AAEA,MAAMK,OAAO,GAAG,sCAAsC;;AAEtD;AACA,MAAMC,aAAa,GAAG,sCAAsC;AAC5D,MAAMC,MAAM,GAAG,sCAAsC;;AAErD;AACA,MAAMC,gBAAgB,GAAG,OAAO;AAEhC,MAAMC,aAAa,GAAG,GAAG;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG;EACvBC,iBAAiB,EAAE,EAAE;EACrBC,KAAK,EAAE,CACL;IACEC,SAAS,EAAE,EAAE;IACbC,QAAQ,EAAEC,kBAAQ,CAACC,KAAK;IACxBC,gBAAgB,EAAE,EAAE;IACpBC,WAAW,EAAE;EACf,CAAC;AAEL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,SAASC,gCAAe,CAAgC;EACzEC,gBAAgB,GAAGb,gBAAgB;EAC1Bc,YAAY,GAAGb,aAAa;EACrCc,aAAa,GAAGC,SAAS;EAEzBC,YAAY,GAAe,CACnC;IACEC,IAAI,EAAErB,OAAO;IACbsB,YAAY,EAAE,CAAC;MAAED,IAAI,EAAEnB,MAAM;MAAEqB,YAAY,EAAElB;IAAiB,CAAC;EACjE,CAAC,CACF;EAEkBmB,eAAe,GAAGA,CAAA,KAAe,IAAI;EAErCC,sBAAsB,GAAGA,CAAA,KAC1C,IAAIC,sCAAkB,CAAC;IACrBC,KAAK,EAAE;MAAEC,WAAW,EAAE5B,OAAO;MAAE6B,kBAAkB,EAAE5B;IAAc,CAAC;IAClE6B,WAAW,EAAE,IAAI,CAACC;EACpB,CAAC,CAAC;EAEGC,WAAWA,CAChBC,MAAc,EACdC,MAAyD,EACzD;IACA,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;EACvB;;EAEA;EACUC,mBAAmBA,CAAA,EAAS;IACpC;EACF;EAEQJ,eAAe,GAAIK,KAAwB,IAAW;IAC5D,MAAMC,aAAa,GAAG,IAAAC,0CAAuB,EAACF,KAAK,CAAC;IAEpD,IAAIC,aAAa,CAACE,MAAM,KAAK,CAAC,EAAE;MAC9B,IAAI,CAACC,OAAO,GAAG,IAAIC,KAAK,CAAC,6CAA6C,CAAC,CAAC;MAExE;IACF;IAEA,IAAI,CAACC,QAAQ,GAAG;MACdC,kBAAkB,EAAEC,wBAAkB,CAACC,GAAG;MAC1CpC,QAAQ,EAAEC,kBAAQ,CAACoC,MAAM;MACzBT,aAAa;MACbU,QAAQ,EAAEV,aAAa,CAACE,MAAM,GAAGS;IACnC,CAAC,CAAC;EACJ,CAAC;AACH;AAACC,OAAA,CAAAnC,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_caseType","_btManagedDevice","_verovalEcgRecord","_verovalEcgSamples","_verovalEcgTransfer","SERVICE","CONTROL_POINT","NOTIFY","STUCK_TIMEOUT_MS","PREFERRED_MTU","acceptEverything","caseValuePosition","cases","caseValue","caseType","CaseType","OTHER","parseDefinitions","description","VerovalEcgDevice","BTManagedDevice","stuckDataTimeout","preferredMtu","onStreamStart","undefined","mainServices","uuid","monitorUuids","parsingModel","validatePackage","createCommandSequencer","VerovalEcgTransfer","write","serviceUuid","characteristicUuid","onRecord","reportRecord","clockSync","constructor","device","params","handleSuccessResult","record","header","isEcg","bloodPressure","parseVerovalBloodPressureRecord","onResult","RESULT","raw","heartRate","diagramPoints","decodeVerovalEcgSamples","calibration","length","onError","Error","measurementTypeKey","MeasurementTypeKey","ecg","id","memorySlot","sequence","recordedAt","getTime","diagnosticResult","duration","VEROVAL_ECG_SAMPLE_RATE_HZ","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.verovalRecordId = exports.parseVerovalEcgHeader = exports.parseVerovalBloodPressureRecord = exports.USER_OFFSET = exports.RECORD_TYPE_OFFSET = exports.RAW_SIZE_OFFSET = exports.HEADER_BYTES = exports.ECG_RECORD_TYPE = exports.BP_SYSTOLIC_OFFSET = exports.BP_PULSE_OFFSET = exports.BP_ERROR_OFFSET = exports.BP_DIASTOLIC_OFFSET = void 0;
7
+ var _core = require("@ovok/core");
8
+ var _hexToByte = require("../../../utils/hex-to-byte.js");
9
+ const HEADER_BYTES = exports.HEADER_BYTES = 80;
10
+ const ECG_RECORD_TYPE = exports.ECG_RECORD_TYPE = 38;
11
+ const ECG_ERROR_OFFSET = 30;
12
+ const RECORD_TYPE_OFFSET = exports.RECORD_TYPE_OFFSET = 71;
13
+ const RAW_SIZE_OFFSET = exports.RAW_SIZE_OFFSET = 40;
14
+ const USER_OFFSET = exports.USER_OFFSET = 44;
15
+ const HEART_RATE_OFFSET = 47;
16
+ const BP_ERROR_OFFSET = exports.BP_ERROR_OFFSET = 62;
17
+ const BP_PULSE_OFFSET = exports.BP_PULSE_OFFSET = 63;
18
+ const BP_SYSTOLIC_OFFSET = exports.BP_SYSTOLIC_OFFSET = 64;
19
+ const BP_DIASTOLIC_OFFSET = exports.BP_DIASTOLIC_OFFSET = 66;
20
+ const TIMESTAMP_OFFSET = 20;
21
+ const TIMESTAMP_BYTES = 6;
22
+ const byteAt = (bytes, offset) => {
23
+ const value = (0, _hexToByte.hexToByte)(bytes[offset] ?? "00");
24
+ return Number.isFinite(value) ? value : 0;
25
+ };
26
+ const littleEndianAt = (bytes, offset, count) => bytes.slice(offset, offset + count).reduce((value, byte, index) => value | byteAt([byte], 0) << index * 8, 0);
27
+ const signed16At = (bytes, offset) => {
28
+ const value = littleEndianAt(bytes, offset, 2);
29
+ return value & 0x8000 ? value - 0x10000 : value;
30
+ };
31
+ const dateFromHeader = bytes => {
32
+ const [year = 0, month = 0, day = 0, hours = 0, minutes = 0, seconds = 0] = Array.from({
33
+ length: TIMESTAMP_BYTES
34
+ }, (_, index) => byteAt(bytes, TIMESTAMP_OFFSET + index));
35
+ const recordedAt = new Date(2000 + year, month - 1, day, hours, minutes, seconds);
36
+ return recordedAt.getFullYear() === 2000 + year && recordedAt.getMonth() === month - 1 && recordedAt.getDate() === day && recordedAt.getHours() === hours && recordedAt.getMinutes() === minutes && recordedAt.getSeconds() === seconds ? recordedAt : undefined;
37
+ };
38
+ const diagnosticFromHeader = bytes => {
39
+ if (byteAt(bytes, 48) > 0 || littleEndianAt(bytes, 56, 2) > 0) {
40
+ return _core.EcgDiagnosticFlag.HIGH_HR;
41
+ }
42
+ if (byteAt(bytes, 49) > 0 || littleEndianAt(bytes, 58, 2) > 0) {
43
+ return _core.EcgDiagnosticFlag.LOW_HR;
44
+ }
45
+ if (byteAt(bytes, 50) > 0 || byteAt(bytes, 52) > 0) {
46
+ return _core.EcgDiagnosticFlag.RR_IRREGULAR;
47
+ }
48
+ return byteAt(bytes, 53) > 0 ? _core.EcgDiagnosticFlag.POOR_WAVEFORM : undefined;
49
+ };
50
+ const calibrationFromHeader = bytes => {
51
+ const physicalMinimumMicrovolts = signed16At(bytes, 31);
52
+ const physicalMaximumMicrovolts = signed16At(bytes, 33);
53
+ const digitalMinimum = signed16At(bytes, 35);
54
+ const digitalMaximum = signed16At(bytes, 37);
55
+ return physicalMinimumMicrovolts < physicalMaximumMicrovolts && digitalMinimum < digitalMaximum ? {
56
+ physicalMinimumMicrovolts,
57
+ physicalMaximumMicrovolts,
58
+ digitalMinimum,
59
+ digitalMaximum
60
+ } : undefined;
61
+ };
62
+ const parseVerovalEcgHeader = bytes => {
63
+ if (bytes.length < HEADER_BYTES) {
64
+ return undefined;
65
+ }
66
+ const isEcg = byteAt(bytes, RECORD_TYPE_OFFSET) === ECG_RECORD_TYPE;
67
+ return {
68
+ bytes: [...bytes.slice(0, HEADER_BYTES)],
69
+ sequence: byteAt(bytes, 0),
70
+ recordedAt: dateFromHeader(bytes),
71
+ memorySlot: byteAt(bytes, USER_OFFSET) === 0 ? 1 : 2,
72
+ rawSize: littleEndianAt(bytes, RAW_SIZE_OFFSET, 4),
73
+ heartRate: byteAt(bytes, HEART_RATE_OFFSET),
74
+ diagnosticResult: diagnosticFromHeader(bytes),
75
+ calibration: calibrationFromHeader(bytes),
76
+ isEcg,
77
+ hasError: isEcg ? byteAt(bytes, ECG_ERROR_OFFSET) !== 0 : byteAt(bytes, BP_ERROR_OFFSET) !== 0
78
+ };
79
+ };
80
+ exports.parseVerovalEcgHeader = parseVerovalEcgHeader;
81
+ const verovalRecordId = header => `veroval-${header.memorySlot}-${header.sequence}-${header.recordedAt?.getTime() ?? "unknown"}`;
82
+ exports.verovalRecordId = verovalRecordId;
83
+ const parseVerovalBloodPressureRecord = header => {
84
+ if (header.isEcg || header.hasError) {
85
+ return undefined;
86
+ }
87
+ return {
88
+ id: verovalRecordId(header),
89
+ measurementTypeKey: _core.MeasurementTypeKey.bloodPressure,
90
+ systolic: littleEndianAt(header.bytes, BP_SYSTOLIC_OFFSET, 2),
91
+ diastolic: littleEndianAt(header.bytes, BP_DIASTOLIC_OFFSET, 2),
92
+ heartRate: byteAt(header.bytes, BP_PULSE_OFFSET),
93
+ recordedAt: header.recordedAt,
94
+ memorySlot: header.memorySlot
95
+ };
96
+ };
97
+ exports.parseVerovalBloodPressureRecord = parseVerovalBloodPressureRecord;
98
+ //# sourceMappingURL=veroval.ecg-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_hexToByte","HEADER_BYTES","exports","ECG_RECORD_TYPE","ECG_ERROR_OFFSET","RECORD_TYPE_OFFSET","RAW_SIZE_OFFSET","USER_OFFSET","HEART_RATE_OFFSET","BP_ERROR_OFFSET","BP_PULSE_OFFSET","BP_SYSTOLIC_OFFSET","BP_DIASTOLIC_OFFSET","TIMESTAMP_OFFSET","TIMESTAMP_BYTES","byteAt","bytes","offset","value","hexToByte","Number","isFinite","littleEndianAt","count","slice","reduce","byte","index","signed16At","dateFromHeader","year","month","day","hours","minutes","seconds","Array","from","length","_","recordedAt","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","undefined","diagnosticFromHeader","EcgDiagnosticFlag","HIGH_HR","LOW_HR","RR_IRREGULAR","POOR_WAVEFORM","calibrationFromHeader","physicalMinimumMicrovolts","physicalMaximumMicrovolts","digitalMinimum","digitalMaximum","parseVerovalEcgHeader","isEcg","sequence","memorySlot","rawSize","heartRate","diagnosticResult","calibration","hasError","verovalRecordId","header","getTime","parseVerovalBloodPressureRecord","id","measurementTypeKey","MeasurementTypeKey","bloodPressure","systolic","diastolic"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-record.ts"],"mappings":"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","ignoreList":[]}
@@ -3,34 +3,51 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VerovalEcgTransfer = void 0;
7
- /** Every request is a fixed twenty-byte packet, zero filled but for its group and command. */
6
+ exports.VerovalEcgTransfer = exports.SET_TIME_DELAY_MS = exports.SEGMENT_BYTES = exports.RAW_TIMEOUT_MS = exports.PACKETS_PER_SEGMENT = exports.HEADER_PACKETS = exports.DOWNLOAD_WAIT = exports.DOWNLOAD_RAW = exports.DOWNLOAD_MODE = exports.DOWNLOAD_HEADER = exports.COMMAND_TIMEOUT_MS = void 0;
7
+ var _clockSync = require("../../../types/clock-sync.js");
8
+ var _hexToByte = require("../../../utils/hex-to-byte.js");
9
+ var _verovalEcgRecord = require("./veroval.ecg-record.js");
10
+ /* eslint-disable max-lines */
11
+
12
+ /** Every request is a fixed twenty-byte packet, zero filled after its command data. */
8
13
  const PACKET_BYTES = 20;
9
14
  const GROUP_INDEX = 1;
10
15
  const COMMAND_INDEX = 2;
11
16
  const PARAMETER_INDEX = 3;
12
17
  const DOWNLOAD_GROUP = 4;
13
- const DOWNLOAD_MODE = 1;
14
- const DOWNLOAD_HEADER = 2;
15
- const DOWNLOAD_RAW = 3;
18
+ const DOWNLOAD_WAIT = exports.DOWNLOAD_WAIT = 0;
19
+ const DOWNLOAD_MODE = exports.DOWNLOAD_MODE = 1;
20
+ const DOWNLOAD_HEADER = exports.DOWNLOAD_HEADER = 2;
21
+ const DOWNLOAD_RAW = exports.DOWNLOAD_RAW = 3;
22
+ const SETTINGS_GROUP = 7;
23
+ const SET_TIME_GROUP = 5;
24
+ const SETTINGS_COMMAND = 2;
16
25
  const FRAME_GROUP_INDEX = 1;
17
26
  const FRAME_COMMAND_INDEX = 2;
18
27
  const FRAME_PACKET_INDEX = 3;
28
+ const MODE_USER_ONE_COUNT_INDEX = 3;
29
+ const MODE_USER_TWO_COUNT_INDEX = 4;
19
30
 
20
- /** The transfer's shape, from the vendor's own device table. */
31
+ /** The device answers a header with five notifications of sixteen bytes each. */
21
32
  const PAYLOAD_FROM = 4;
22
33
  const PAYLOAD_BYTES = 16;
23
- const HEADER_PACKETS = 5;
24
- const PACKETS_PER_SEGMENT = 16;
25
- const SEGMENTS = 34;
34
+ const HEADER_PACKETS = exports.HEADER_PACKETS = 5;
35
+ const PACKETS_PER_SEGMENT = exports.PACKETS_PER_SEGMENT = 16;
36
+ const SEGMENT_BYTES = exports.SEGMENT_BYTES = PAYLOAD_BYTES * PACKETS_PER_SEGMENT;
37
+ const COMMAND_TIMEOUT_MS = exports.COMMAND_TIMEOUT_MS = 3_000;
38
+ const RAW_TIMEOUT_MS = exports.RAW_TIMEOUT_MS = 2_000;
39
+ const MAX_RETRIES = 2;
40
+ const SET_TIME_DELAY_MS = exports.SET_TIME_DELAY_MS = 1_500;
26
41
  const BYTE_MASK = 0xff;
27
- const BYTE_BITS = 8;
42
+ const byteAt = (frame, index) => {
43
+ const value = (0, _hexToByte.hexToByte)(frame[index] ?? "00");
44
+ return Number.isFinite(value) ? value : 0;
45
+ };
28
46
  const toHex = byte => (byte & BYTE_MASK).toString(16).padStart(2, "0");
29
- const isDownloadFrame = (frame, command) => frame[FRAME_GROUP_INDEX]?.toLowerCase() === toHex(DOWNLOAD_GROUP) && frame[FRAME_COMMAND_INDEX]?.toLowerCase() === toHex(command);
30
- const isExpectedRawPacket = (frame, packetIndex) => isDownloadFrame(frame, DOWNLOAD_RAW) && frame[FRAME_PACKET_INDEX]?.toLowerCase() === toHex(packetIndex);
31
- const packet = (write, command, parameters = []) => {
47
+ const isFrame = (frame, group, command) => byteAt(frame, FRAME_GROUP_INDEX) === group && byteAt(frame, FRAME_COMMAND_INDEX) === command;
48
+ const packet = (write, group, command, parameters = [], delayBeforeWriteMs) => {
32
49
  const bytes = new Array(PACKET_BYTES).fill(0);
33
- bytes[GROUP_INDEX] = DOWNLOAD_GROUP;
50
+ bytes[GROUP_INDEX] = group;
34
51
  bytes[COMMAND_INDEX] = command;
35
52
  parameters.forEach((value, index) => {
36
53
  bytes[PARAMETER_INDEX + index] = value;
@@ -38,72 +55,215 @@ const packet = (write, command, parameters = []) => {
38
55
  return {
39
56
  ...write,
40
57
  frame: bytes.map(toHex),
41
- withoutResponse: true
58
+ withoutResponse: true,
59
+ ...(delayBeforeWriteMs === undefined ? {} : {
60
+ delayBeforeWriteMs
61
+ })
42
62
  };
43
63
  };
44
- const segmentParameters = segment => [segment & BYTE_MASK, segment >> BYTE_BITS & BYTE_MASK, segment >> BYTE_BITS * 2 & BYTE_MASK];
64
+ const payloadOf = frame => [...frame.slice(PAYLOAD_FROM, PAYLOAD_FROM + PAYLOAD_BYTES)];
65
+ const settingsCommand = write => packet(write, SETTINGS_GROUP, SETTINGS_COMMAND, [], SET_TIME_DELAY_MS);
66
+ const setTimeCommand = (write, clockSync, settings) => {
67
+ const parts = (0, _clockSync.getClockParts)(clockSync?.now?.() ?? new Date(), clockSync?.timezone);
68
+ return packet(write, SET_TIME_GROUP, SETTINGS_COMMAND, [parts.year % 100, parts.month, parts.day, parts.hours, parts.minutes, parts.seconds, settings[0] ?? 0, settings[1] ?? 0, settings[2] ?? 0]);
69
+ };
45
70
  /**
46
- * Downloads a recording from the Veroval ECG.
47
- *
48
- * The exchange is a fixed walk rather than a conversation: ask for the download mode, then
49
- * the header, then each second of the recording in turn. The device answers each request
50
- * with a known number of twenty-byte packets, sixteen payload bytes each, so the transfer is
51
- * paced by counting them. Notifications for live measurements, standby and device settings
52
- * share the characteristic, so only the download group and command advance the transfer.
71
+ * Downloads all records from the Veroval ECG/BP monitor.
53
72
  *
54
- * A recording is thirty-four seconds at 128 Hz. Nothing is reported until all of it has
55
- * arrived: a partial ECG that looked whole would be worse than none, and the count is what
56
- * says it is whole.
73
+ * The mode reply gives the number of records in each user memory. Headers are collected first;
74
+ * only then does the device enter raw-download mode. This matters because a blood-pressure
75
+ * record is complete in its header while an ECG needs one or more raw segments.
57
76
  */
58
77
  class VerovalEcgTransfer {
59
- phase = "mode";
60
- packets = 0;
61
- segment = 0;
62
- recording = [];
78
+ headerPacket = 0;
79
+ headerBytes = [];
80
+ recordIndex = 0;
81
+ expectedRecords = 0;
82
+ headers = [];
83
+ ecgHeaders = [];
84
+ ecgIndex = 0;
85
+ segment = 1;
86
+ rawPacket = 0;
87
+ segmentBytes = [];
88
+ rawBytes = [];
89
+ pendingTimeout = COMMAND_TIMEOUT_MS;
90
+ retries = 0;
91
+ settings = [0, 0, 0];
63
92
  constructor(params) {
64
93
  this.params = params;
94
+ this.phase = (0, _clockSync.isClockSyncEnabled)(params.clockSync) ? "settings" : "mode";
65
95
  }
66
- initialCommands = () => [packet(this.params.write, DOWNLOAD_MODE)];
96
+ initialCommands = () => this.phase === "settings" ? this.remember([settingsCommand(this.params.write)], COMMAND_TIMEOUT_MS, true) : this.requestMode();
67
97
  nextCommand = frame => {
68
98
  if (this.phase === "done") {
69
99
  return undefined;
70
100
  }
101
+ if (this.phase === "settings") {
102
+ return this.nextSettings(frame);
103
+ }
71
104
  if (this.phase === "mode") {
72
- if (!isDownloadFrame(frame, DOWNLOAD_MODE)) {
73
- return undefined;
74
- }
75
- this.phase = "header";
76
- this.packets = 0;
77
- return [packet(this.params.write, DOWNLOAD_HEADER)];
105
+ return this.nextMode(frame);
78
106
  }
79
107
  if (this.phase === "header") {
80
- if (!isDownloadFrame(frame, DOWNLOAD_HEADER)) {
81
- return undefined;
108
+ return this.nextHeader(frame);
109
+ }
110
+ return this.nextRaw(frame);
111
+ };
112
+ commandTimeoutMs = () => this.phase === "done" ? undefined : this.pendingTimeout;
113
+ onCommandTimeout = () => {
114
+ if (!this.lastCommand || this.phase === "done") {
115
+ return {
116
+ terminal: true
117
+ };
118
+ }
119
+ if (this.retries >= MAX_RETRIES) {
120
+ this.phase = "done";
121
+ return {
122
+ terminal: true
123
+ };
124
+ }
125
+ this.retries += 1;
126
+ if (this.phase === "header") {
127
+ this.headerPacket = 0;
128
+ this.headerBytes = [];
129
+ }
130
+ if (this.phase === "raw") {
131
+ this.rawPacket = 0;
132
+ this.segmentBytes = [];
133
+ }
134
+ return {
135
+ commands: [this.lastCommand]
136
+ };
137
+ };
138
+ commandProgress = frame => {
139
+ if (this.phase === "settings") {
140
+ return isFrame(frame, SETTINGS_GROUP, SETTINGS_COMMAND) ? "complete" : "ignored";
141
+ }
142
+ if (this.phase === "mode") {
143
+ return isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_MODE) ? "complete" : "ignored";
144
+ }
145
+ if (this.phase === "header") {
146
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_HEADER) || byteAt(frame, FRAME_PACKET_INDEX) !== this.headerPacket) {
147
+ return "ignored";
82
148
  }
83
- this.packets += 1;
84
- return this.packets < HEADER_PACKETS ? undefined : this.requestSegment(0);
149
+ return this.headerPacket + 1 === HEADER_PACKETS ? "complete" : "partial";
150
+ }
151
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_RAW) || byteAt(frame, FRAME_PACKET_INDEX) !== this.rawPacket) {
152
+ return "ignored";
85
153
  }
86
- if (!isExpectedRawPacket(frame, this.packets)) {
154
+ return this.rawPacket + 1 === PACKETS_PER_SEGMENT ? "complete" : "partial";
155
+ };
156
+ nextSettings = frame => {
157
+ if (!isFrame(frame, SETTINGS_GROUP, SETTINGS_COMMAND)) {
87
158
  return undefined;
88
159
  }
89
- this.packets += 1;
90
- this.recording.push(...frame.slice(PAYLOAD_FROM, PAYLOAD_FROM + PAYLOAD_BYTES));
91
- return this.packets < PACKETS_PER_SEGMENT ? undefined : this.finishSegment();
160
+ this.settings = [byteAt(frame, 5), byteAt(frame, 6), byteAt(frame, 7)];
161
+ this.phase = "mode";
162
+ return this.remember([setTimeCommand(this.params.write, this.params.clockSync, this.settings), packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_MODE)], COMMAND_TIMEOUT_MS);
92
163
  };
93
- finishSegment = () => {
164
+ nextMode = frame => {
165
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_MODE)) {
166
+ return undefined;
167
+ }
168
+ const userOne = byteAt(frame, MODE_USER_ONE_COUNT_INDEX);
169
+ const userTwo = byteAt(frame, MODE_USER_TWO_COUNT_INDEX);
170
+ this.expectedRecords = userOne + userTwo;
171
+ if (this.expectedRecords === 0) {
172
+ this.phase = "done";
173
+ return undefined;
174
+ }
175
+ this.headers = [];
176
+ this.recordIndex = 0;
177
+ return this.requestHeader(this.recordIndex);
178
+ };
179
+ nextHeader = frame => {
180
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_HEADER) || byteAt(frame, FRAME_PACKET_INDEX) !== this.headerPacket) {
181
+ return undefined;
182
+ }
183
+ this.headerBytes.push(...payloadOf(frame));
184
+ this.headerPacket += 1;
185
+ if (this.headerPacket < HEADER_PACKETS) {
186
+ return undefined;
187
+ }
188
+ const header = (0, _verovalEcgRecord.parseVerovalEcgHeader)(this.headerBytes);
189
+ if (header) {
190
+ this.headers.push(header);
191
+ }
192
+ this.recordIndex += 1;
193
+ if (this.recordIndex < this.expectedRecords) {
194
+ return this.requestHeader(this.recordIndex);
195
+ }
196
+ this.ecgHeaders = this.headers.filter(candidate => candidate.isEcg && !candidate.hasError && candidate.rawSize > 0);
197
+ this.headers.filter(candidate => !candidate.isEcg && !candidate.hasError).forEach(candidate => this.params.onRecord({
198
+ header: candidate
199
+ }));
200
+ if (this.ecgHeaders.length === 0) {
201
+ this.phase = "done";
202
+ return undefined;
203
+ }
204
+ this.ecgIndex = 0;
205
+ return this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_WAIT), ...this.requestRaw(this.ecgHeaders[0])], RAW_TIMEOUT_MS);
206
+ };
207
+ nextRaw = frame => {
208
+ if (!isFrame(frame, DOWNLOAD_GROUP, DOWNLOAD_RAW) || byteAt(frame, FRAME_PACKET_INDEX) !== this.rawPacket) {
209
+ return undefined;
210
+ }
211
+ this.segmentBytes.push(...payloadOf(frame));
212
+ this.rawPacket += 1;
213
+ if (this.rawPacket < PACKETS_PER_SEGMENT) {
214
+ return undefined;
215
+ }
216
+ this.rawBytes.push(...this.segmentBytes);
217
+ const header = this.ecgHeaders[this.ecgIndex];
218
+ if (!header) {
219
+ this.phase = "done";
220
+ return undefined;
221
+ }
222
+ if (this.rawBytes.length >= header.rawSize) {
223
+ this.params.onRecord({
224
+ header,
225
+ raw: this.rawBytes.slice(0, header.rawSize)
226
+ });
227
+ this.ecgIndex += 1;
228
+ if (this.ecgIndex >= this.ecgHeaders.length) {
229
+ this.phase = "done";
230
+ return undefined;
231
+ }
232
+ return this.remember(this.requestRaw(this.ecgHeaders[this.ecgIndex]), RAW_TIMEOUT_MS);
233
+ }
94
234
  this.segment += 1;
95
- if (this.segment < SEGMENTS) {
96
- return this.requestSegment(this.segment);
235
+ return this.remember(this.requestSegment(header), RAW_TIMEOUT_MS);
236
+ };
237
+ requestMode = () => this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_MODE)], COMMAND_TIMEOUT_MS);
238
+ requestHeader = index => {
239
+ this.phase = "header";
240
+ this.headerPacket = 0;
241
+ this.headerBytes = [];
242
+ return this.remember([packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_HEADER, [index])], COMMAND_TIMEOUT_MS);
243
+ };
244
+ requestRaw = header => {
245
+ if (!header) {
246
+ this.phase = "done";
247
+ return [];
97
248
  }
98
- this.phase = "done";
99
- this.params.onRecording(this.recording);
100
- return undefined;
249
+ this.segment = 1;
250
+ this.rawBytes = [];
251
+ return this.requestSegment(header);
101
252
  };
102
- requestSegment = segment => {
253
+ requestSegment = header => {
103
254
  this.phase = "raw";
104
- this.packets = 0;
105
- this.segment = segment;
106
- return [packet(this.params.write, DOWNLOAD_RAW, segmentParameters(segment))];
255
+ this.rawPacket = 0;
256
+ this.segmentBytes = [];
257
+ return [packet(this.params.write, DOWNLOAD_GROUP, DOWNLOAD_RAW, [header.memorySlot - 1, header.sequence, this.segment])];
258
+ };
259
+ remember = (commands, timeout, preserveRetryCount = false) => {
260
+ const last = commands[commands.length - 1];
261
+ this.lastCommand = last;
262
+ this.pendingTimeout = timeout;
263
+ if (!preserveRetryCount) {
264
+ this.retries = 0;
265
+ }
266
+ return commands;
107
267
  };
108
268
  }
109
269
  exports.VerovalEcgTransfer = VerovalEcgTransfer;
@@ -1 +1 @@
1
- {"version":3,"names":["PACKET_BYTES","GROUP_INDEX","COMMAND_INDEX","PARAMETER_INDEX","DOWNLOAD_GROUP","DOWNLOAD_MODE","DOWNLOAD_HEADER","DOWNLOAD_RAW","FRAME_GROUP_INDEX","FRAME_COMMAND_INDEX","FRAME_PACKET_INDEX","PAYLOAD_FROM","PAYLOAD_BYTES","HEADER_PACKETS","PACKETS_PER_SEGMENT","SEGMENTS","BYTE_MASK","BYTE_BITS","toHex","byte","toString","padStart","isDownloadFrame","frame","command","toLowerCase","isExpectedRawPacket","packetIndex","packet","write","parameters","bytes","Array","fill","forEach","value","index","map","withoutResponse","segmentParameters","segment","VerovalEcgTransfer","phase","packets","recording","constructor","params","initialCommands","nextCommand","undefined","requestSegment","push","slice","finishSegment","onRecording","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-transfer.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clockSync","require","_hexToByte","_verovalEcgRecord","PACKET_BYTES","GROUP_INDEX","COMMAND_INDEX","PARAMETER_INDEX","DOWNLOAD_GROUP","DOWNLOAD_WAIT","exports","DOWNLOAD_MODE","DOWNLOAD_HEADER","DOWNLOAD_RAW","SETTINGS_GROUP","SET_TIME_GROUP","SETTINGS_COMMAND","FRAME_GROUP_INDEX","FRAME_COMMAND_INDEX","FRAME_PACKET_INDEX","MODE_USER_ONE_COUNT_INDEX","MODE_USER_TWO_COUNT_INDEX","PAYLOAD_FROM","PAYLOAD_BYTES","HEADER_PACKETS","PACKETS_PER_SEGMENT","SEGMENT_BYTES","COMMAND_TIMEOUT_MS","RAW_TIMEOUT_MS","MAX_RETRIES","SET_TIME_DELAY_MS","BYTE_MASK","byteAt","frame","index","value","hexToByte","Number","isFinite","toHex","byte","toString","padStart","isFrame","group","command","packet","write","parameters","delayBeforeWriteMs","bytes","Array","fill","forEach","map","withoutResponse","undefined","payloadOf","slice","settingsCommand","setTimeCommand","clockSync","settings","parts","getClockParts","now","Date","timezone","year","month","day","hours","minutes","seconds","VerovalEcgTransfer","headerPacket","headerBytes","recordIndex","expectedRecords","headers","ecgHeaders","ecgIndex","segment","rawPacket","segmentBytes","rawBytes","pendingTimeout","retries","constructor","params","phase","isClockSyncEnabled","initialCommands","remember","requestMode","nextCommand","nextSettings","nextMode","nextHeader","nextRaw","commandTimeoutMs","onCommandTimeout","lastCommand","terminal","commands","commandProgress","userOne","userTwo","requestHeader","push","header","parseVerovalEcgHeader","filter","candidate","isEcg","hasError","rawSize","onRecord","length","requestRaw","raw","requestSegment","memorySlot","sequence","timeout","preserveRetryCount","last"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-transfer.ts"],"mappings":"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","ignoreList":[]}
@@ -31,8 +31,9 @@ const RT_DATA = 0x08;
31
31
  */
32
32
  const CASE_SELECTOR_BYTES = [1, 7];
33
33
 
34
- /** Header, realtime state, and the result struct through its pulse-rate field. */
35
- const MIN_LENGTH_BYTES = 28;
34
+ /** Header, realtime state, the result struct and its result code. */
35
+ const MIN_LENGTH_BYTES = 29;
36
+ const RESULT_CODE_INDEX = 28;
36
37
  const READING = [{
37
38
  name: "systolic",
38
39
  byteIndexes: [20, 21],
@@ -64,6 +65,13 @@ const measuring = (selector, description) => ({
64
65
  kind: "stream",
65
66
  description
66
67
  });
68
+ const rejectFailedResult = (reading, frame) => {
69
+ const resultCode = Number.parseInt(frame?.[RESULT_CODE_INDEX] ?? "00", 16);
70
+ if (resultCode !== 0) {
71
+ throw new Error(`Viatom blood-pressure measurement failed with result code 0x${resultCode.toString(16).padStart(2, "0")}`);
72
+ }
73
+ return reading;
74
+ };
67
75
 
68
76
  /**
69
77
  * The states the series reports, and what each means for a reading.
@@ -73,7 +81,11 @@ const measuring = (selector, description) => ({
73
81
  * separates one measurement from the next, which is why the states in between are declared
74
82
  * rather than ignored.
75
83
  */
76
- const BP2_CASES = [measuring("0804", "Cuff inflating or deflating"), result("0805", "Measurement finished"), measuring("080f", "Averaging run: a measurement is in progress"), measuring("0810", "Averaging run: waiting between measurements"), result("0811", "Averaging run finished, carrying the same payload")];
84
+ const BP2_CASES = [...["00", "01", "02", "03", "0a", "14", "ff"].map(state => ({
85
+ selector: `08${state}`,
86
+ kind: "idle",
87
+ description: "Monitor is connected but not measuring"
88
+ })), measuring("0804", "Cuff inflating or deflating"), result("0805", "Measurement finished"), measuring("080f", "Averaging run: a measurement is in progress"), measuring("0810", "Averaging run: waiting between measurements"), result("0811", "Averaging run finished, carrying the same payload")];
77
89
  /**
78
90
  * Declares one monitor of the BP2 series.
79
91
  *
@@ -90,6 +102,7 @@ const viatomBpMonitor = (advertisedName, params) => (0, _lepuTransports.lepuDevi
90
102
  cases: BP2_CASES.map(each => ({
91
103
  ...each
92
104
  })),
105
+ decorateReading: rejectFailedResult,
93
106
  ...(params.expectedDeviceTypes ? {
94
107
  expectedDeviceTypes: params.expectedDeviceTypes
95
108
  } : {})
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_lepuNameMatch","_lepuTransports","RT_DATA","CASE_SELECTOR_BYTES","MIN_LENGTH_BYTES","READING","name","byteIndexes","byteOrder","encoding","unit","result","selector","description","kind","measurementTypeKey","MeasurementTypeKey","bloodPressure","fields","measuring","BP2_CASES","viatomBpMonitor","advertisedName","params","lepuDevice","id","toLowerCase","replace","nameMatch","lepuNameMatch","pollCommand","minLengthBytes","caseSelectorBytes","cases","map","each","expectedDeviceTypes","exports","bp2aMonitor","bp2tMonitor","bp2wMonitor","BP3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.bp-monitors.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_lepuNameMatch","_lepuTransports","RT_DATA","CASE_SELECTOR_BYTES","MIN_LENGTH_BYTES","RESULT_CODE_INDEX","READING","name","byteIndexes","byteOrder","encoding","unit","result","selector","description","kind","measurementTypeKey","MeasurementTypeKey","bloodPressure","fields","measuring","rejectFailedResult","reading","frame","resultCode","Number","parseInt","Error","toString","padStart","BP2_CASES","map","state","viatomBpMonitor","advertisedName","params","lepuDevice","id","toLowerCase","replace","nameMatch","lepuNameMatch","pollCommand","minLengthBytes","caseSelectorBytes","cases","each","decorateReading","expectedDeviceTypes","exports","bp2aMonitor","bp2tMonitor","bp2wMonitor","BP3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.bp-monitors.ts"],"mappings":"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","ignoreList":[]}
@@ -33,6 +33,7 @@ const clockSyncCapabilityForDevice = deviceName => {
33
33
  switch (deviceName) {
34
34
  case _integratedDevices.IntegratedDevices.BC01:
35
35
  case _integratedDevices.IntegratedDevices.MYSENSE:
36
+ case _integratedDevices.IntegratedDevices.VEROVAL_ECG:
36
37
  return "supported";
37
38
  case _integratedDevices.IntegratedDevices.VEROVAL_ACTIVITY:
38
39
  return "unsupported";
@@ -1 +1 @@
1
- {"version":3,"names":["_integratedDevices","require","isClockSyncEnabled","options","enabled","exports","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","IntegratedDevices","BC01","MYSENSE","VEROVAL_ACTIVITY"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;;;;;AAEA,IAAAA,kBAAA,GAAAC,OAAA;AAFA;;AAoBO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAACC,OAAA,CAAAH,kBAAA,GAAAA,kBAAA;AAEtB,MAAMI,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AAAAxB,OAAA,CAAAC,aAAA,GAAAA,aAAA;AACO,MAAMwB,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAKC,oCAAiB,CAACC,IAAI;IAC3B,KAAKD,oCAAiB,CAACE,OAAO;MAC5B,OAAO,WAAW;IACpB,KAAKF,oCAAiB,CAACG,gBAAgB;MACrC,OAAO,aAAa;IACtB;MACE,OAAO,SAAS;EACpB;AACF,CAAC;AAAC9B,OAAA,CAAAyB,4BAAA,GAAAA,4BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_integratedDevices","require","isClockSyncEnabled","options","enabled","exports","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","IntegratedDevices","BC01","MYSENSE","VEROVAL_ECG","VEROVAL_ACTIVITY"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;;;;;AAEA,IAAAA,kBAAA,GAAAC,OAAA;AAFA;;AAoBO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAACC,OAAA,CAAAH,kBAAA,GAAAA,kBAAA;AAEtB,MAAMI,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AAAAxB,OAAA,CAAAC,aAAA,GAAAA,aAAA;AACO,MAAMwB,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAKC,oCAAiB,CAACC,IAAI;IAC3B,KAAKD,oCAAiB,CAACE,OAAO;IAC9B,KAAKF,oCAAiB,CAACG,WAAW;MAChC,OAAO,WAAW;IACpB,KAAKH,oCAAiB,CAACI,gBAAgB;MACrC,OAAO,aAAa;IACtB;MACE,OAAO,SAAS;EACpB;AACF,CAAC;AAAC/B,OAAA,CAAAyB,4BAAA,GAAAA,4BAAA","ignoreList":[]}