@ovok/native 0.4.3 → 0.4.5

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 (145) hide show
  1. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +8 -23
  2. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  3. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +89 -0
  4. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -0
  5. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.main-services.js +50 -21
  6. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.main-services.js.map +1 -1
  7. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js +25 -1
  8. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  9. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +80 -85
  10. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  11. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +25 -3
  12. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js +54 -0
  14. package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js.map +1 -0
  15. package/lib/commonjs/modules/bt-management/services/devices/measurement-state-machine.js +63 -0
  16. package/lib/commonjs/modules/bt-management/services/devices/measurement-state-machine.js.map +1 -0
  17. package/lib/commonjs/modules/bt-management/types/frame-read-result.js +6 -0
  18. package/lib/commonjs/modules/bt-management/types/frame-read-result.js.map +1 -0
  19. package/lib/commonjs/modules/bt-management/types/frame-read-status.js +17 -0
  20. package/lib/commonjs/modules/bt-management/types/frame-read-status.js.map +1 -0
  21. package/lib/commonjs/modules/bt-management/types/frame-reader.js +6 -0
  22. package/lib/commonjs/modules/bt-management/types/frame-reader.js.map +1 -0
  23. package/lib/commonjs/modules/bt-management/utils/calculate-crc-8.js +43 -0
  24. package/lib/commonjs/modules/bt-management/utils/calculate-crc-8.js.map +1 -0
  25. package/lib/commonjs/modules/bt-management/utils/convert-bp-state-flag.js +8 -1
  26. package/lib/commonjs/modules/bt-management/utils/convert-bp-state-flag.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/utils/le-16-from-hex.js.map +1 -1
  28. package/lib/commonjs/modules/data-sync/components/android/android-health-sync.js +11 -1
  29. package/lib/commonjs/modules/data-sync/components/android/android-health-sync.js.map +1 -1
  30. package/lib/commonjs/modules/data-sync/components/apple/apple-health-sync.js +33 -1
  31. package/lib/commonjs/modules/data-sync/components/apple/apple-health-sync.js.map +1 -1
  32. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +4 -0
  33. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  34. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +30 -2
  35. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  36. package/lib/commonjs/modules/data-sync/services/managers/sync-state-manager.js +19 -0
  37. package/lib/commonjs/modules/data-sync/services/managers/sync-state-manager.js.map +1 -1
  38. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +9 -23
  39. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  40. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +84 -0
  41. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -0
  42. package/lib/module/modules/bt-management/services/devices/bp2/bp2.main-services.js +50 -21
  43. package/lib/module/modules/bt-management/services/devices/bp2/bp2.main-services.js.map +1 -1
  44. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js +25 -1
  45. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  46. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +80 -85
  47. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  48. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +25 -3
  49. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  50. package/lib/module/modules/bt-management/services/devices/frame-parser.js +50 -0
  51. package/lib/module/modules/bt-management/services/devices/frame-parser.js.map +1 -0
  52. package/lib/module/modules/bt-management/services/devices/measurement-state-machine.js +58 -0
  53. package/lib/module/modules/bt-management/services/devices/measurement-state-machine.js.map +1 -0
  54. package/lib/module/modules/bt-management/types/frame-read-result.js +4 -0
  55. package/lib/module/modules/bt-management/types/frame-read-result.js.map +1 -0
  56. package/lib/module/modules/bt-management/types/frame-read-status.js +13 -0
  57. package/lib/module/modules/bt-management/types/frame-read-status.js.map +1 -0
  58. package/lib/module/modules/bt-management/types/frame-reader.js +4 -0
  59. package/lib/module/modules/bt-management/types/frame-reader.js.map +1 -0
  60. package/lib/module/modules/bt-management/utils/calculate-crc-8.js +38 -0
  61. package/lib/module/modules/bt-management/utils/calculate-crc-8.js.map +1 -0
  62. package/lib/module/modules/bt-management/utils/convert-bp-state-flag.js +9 -1
  63. package/lib/module/modules/bt-management/utils/convert-bp-state-flag.js.map +1 -1
  64. package/lib/module/modules/bt-management/utils/le-16-from-hex.js.map +1 -1
  65. package/lib/module/modules/data-sync/components/android/android-health-sync.js +11 -1
  66. package/lib/module/modules/data-sync/components/android/android-health-sync.js.map +1 -1
  67. package/lib/module/modules/data-sync/components/apple/apple-health-sync.js +33 -1
  68. package/lib/module/modules/data-sync/components/apple/apple-health-sync.js.map +1 -1
  69. package/lib/module/modules/data-sync/services/base-health-sync-service.js +4 -0
  70. package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  71. package/lib/module/modules/data-sync/services/managers/storage-manager.js +30 -2
  72. package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  73. package/lib/module/modules/data-sync/services/managers/sync-state-manager.js +19 -0
  74. package/lib/module/modules/data-sync/services/managers/sync-state-manager.js.map +1 -1
  75. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts +3 -1
  76. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +14 -0
  78. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.main-services.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +9 -1
  81. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +27 -10
  83. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +23 -1
  85. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts +19 -0
  87. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -0
  88. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/measurement-state-machine.d.ts +30 -0
  89. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/measurement-state-machine.d.ts.map +1 -0
  90. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-result.d.ts +21 -0
  91. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-result.d.ts.map +1 -0
  92. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-status.d.ts +10 -0
  93. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-status.d.ts.map +1 -0
  94. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts +13 -0
  95. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts.map +1 -0
  96. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8.d.ts +10 -0
  97. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8.d.ts.map +1 -0
  98. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-bp-state-flag.d.ts +7 -0
  99. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-bp-state-flag.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-16-from-hex.d.ts +1 -1
  101. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-16-from-hex.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/src/modules/data-sync/components/android/android-health-sync.d.ts.map +1 -1
  103. package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-sync.d.ts.map +1 -1
  104. package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts +2 -0
  105. package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +20 -0
  107. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  108. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/sync-state-manager.d.ts +13 -0
  109. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/sync-state-manager.d.ts.map +1 -1
  110. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts +3 -1
  111. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  112. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +14 -0
  113. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -0
  114. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.main-services.d.ts.map +1 -1
  115. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +9 -1
  116. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  117. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +27 -10
  118. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  119. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +23 -1
  120. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  121. package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts +19 -0
  122. package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -0
  123. package/lib/typescript/module/src/modules/bt-management/services/devices/measurement-state-machine.d.ts +30 -0
  124. package/lib/typescript/module/src/modules/bt-management/services/devices/measurement-state-machine.d.ts.map +1 -0
  125. package/lib/typescript/module/src/modules/bt-management/types/frame-read-result.d.ts +21 -0
  126. package/lib/typescript/module/src/modules/bt-management/types/frame-read-result.d.ts.map +1 -0
  127. package/lib/typescript/module/src/modules/bt-management/types/frame-read-status.d.ts +10 -0
  128. package/lib/typescript/module/src/modules/bt-management/types/frame-read-status.d.ts.map +1 -0
  129. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts +13 -0
  130. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts.map +1 -0
  131. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8.d.ts +10 -0
  132. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8.d.ts.map +1 -0
  133. package/lib/typescript/module/src/modules/bt-management/utils/convert-bp-state-flag.d.ts +7 -0
  134. package/lib/typescript/module/src/modules/bt-management/utils/convert-bp-state-flag.d.ts.map +1 -1
  135. package/lib/typescript/module/src/modules/bt-management/utils/le-16-from-hex.d.ts +1 -1
  136. package/lib/typescript/module/src/modules/bt-management/utils/le-16-from-hex.d.ts.map +1 -1
  137. package/lib/typescript/module/src/modules/data-sync/components/android/android-health-sync.d.ts.map +1 -1
  138. package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-sync.d.ts.map +1 -1
  139. package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts +2 -0
  140. package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  141. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +20 -0
  142. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  143. package/lib/typescript/module/src/modules/data-sync/services/managers/sync-state-manager.d.ts +13 -0
  144. package/lib/typescript/module/src/modules/data-sync/services/managers/sync-state-manager.d.ts.map +1 -1
  145. package/package.json +1 -1
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.BP2Device = void 0;
7
7
  var _core = require("@ovok/core");
8
8
  var _BloodPressureStates = require("@ovok/core/dist/client/observation/types/measurement/BloodPressureStates");
9
- var _sentryLogger = require("../../../../helpers/utils/sentry-logger.js");
10
9
  var _bloodPressureTranslatedExceptionMap = require("../../../constants/blood-pressure-translated-exception-map.js");
11
10
  var _caseType = require("../../../types/case-type.js");
12
11
  var _hexToByte = require("../../../utils/hex-to-byte.js");
@@ -14,7 +13,13 @@ var _i16FromHex = require("../../../utils/i-16-from-hex.js");
14
13
  var _le16FromHex = require("../../../utils/le-16-from-hex.js");
15
14
  var _le32FromHex = require("../../../utils/le-32-from-hex.js");
16
15
  var _btManagedDevice = require("../bt-managed-device.js");
16
+ var _bp2FrameReader = require("./bp2.frame-reader.js");
17
17
  var _bp2MainServices = require("./bp2.main-services.js");
18
+ /**
19
+ * Leaves a 244 byte payload, enough for an ECG waveform frame to arrive in far fewer
20
+ * notifications than the 23 byte default allows.
21
+ */
22
+ const BP2_PREFERRED_MTU = 247;
18
23
  class BP2Device extends _btManagedDevice.BTManagedDevice {
19
24
  collectedValues = [];
20
25
  diagramPoints = [];
@@ -26,28 +31,8 @@ class BP2Device extends _btManagedDevice.BTManagedDevice {
26
31
  this.diagramPoints = [];
27
32
  this.duration = 0;
28
33
  };
29
- validatePackage = pkg => {
30
- if (pkg[0] !== "a5") {
31
- (0, _sentryLogger.sentryLogger)("info", "BP2_DEVICE: Package does not start with a5");
32
- const headIndex = pkg.indexOf("a5");
33
- if (headIndex > 0) {
34
- pkg = pkg.slice(headIndex);
35
- }
36
- }
37
- if (pkg.length < 7) {
38
- (0, _sentryLogger.sentryLogger)("info", "BP2_DEVICE: Package is shorter than 7 bytes");
39
- return false;
40
- }
41
- const toNum = hex => parseInt(hex, 16);
42
- const lenL = toNum(pkg[5] || "0");
43
- const lenH = toNum(pkg[6] || "0");
44
- const dataLen = lenL | lenH << 8;
45
- const totalLen = 7 + dataLen + 1;
46
- if (pkg.length < totalLen) {
47
- return false;
48
- }
49
- return true;
50
- };
34
+ frameReader = new _bp2FrameReader.BP2FrameReader();
35
+ preferredMtu = BP2_PREFERRED_MTU;
51
36
  handleSuccessResult(successResult, collectedValues) {
52
37
  this.collectedValues = collectedValues;
53
38
  if (!successResult.measurementTypeKey || !successResult.caseType) {
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_BloodPressureStates","_sentryLogger","_bloodPressureTranslatedExceptionMap","_caseType","_hexToByte","_i16FromHex","_le16FromHex","_le32FromHex","_btManagedDevice","_bp2MainServices","BP2Device","BTManagedDevice","collectedValues","diagramPoints","duration","mainServices","bp2MainServices","stuckDataTimeout","onStreamStart","validatePackage","pkg","sentryLogger","headIndex","indexOf","slice","length","toNum","hex","parseInt","lenL","lenH","dataLen","totalLen","handleSuccessResult","successResult","measurementTypeKey","caseType","onError","Error","MeasurementTypeKey","ecg","handleEcgResult","bloodPressure","handleBloodPressureResult","CaseType","RESULT","error","checkIfHasErrorForEcg","onResult","handleEcgStream","hexToByte","dataStart","dataEnd","data","le32FromHex","samplingNum","le16FromHex","samplesStart","i","byteIndexInData","sampleVal","i16FromHex","push","checkIfHasErrorForBloodPressure","bpMeasurement","status","undefined","diastolic","systolic","heartRate","BloodPressureStates","REGULAR","errorString","bloodPressureTranslatedExceptionMap","get","DEVICE_ERROR","ecgMeasurement","diagnosticResult","EcgDiagnosticFlag","POOR_WAVEFORM","LEAD_OFF","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_BloodPressureStates","_bloodPressureTranslatedExceptionMap","_caseType","_hexToByte","_i16FromHex","_le16FromHex","_le32FromHex","_btManagedDevice","_bp2FrameReader","_bp2MainServices","BP2_PREFERRED_MTU","BP2Device","BTManagedDevice","collectedValues","diagramPoints","duration","mainServices","bp2MainServices","stuckDataTimeout","onStreamStart","frameReader","BP2FrameReader","preferredMtu","handleSuccessResult","successResult","measurementTypeKey","caseType","onError","Error","MeasurementTypeKey","ecg","handleEcgResult","bloodPressure","handleBloodPressureResult","CaseType","RESULT","error","checkIfHasErrorForEcg","onResult","handleEcgStream","lenL","hexToByte","lenH","dataLen","dataStart","dataEnd","data","slice","le32FromHex","samplingNum","le16FromHex","samplesStart","i","byteIndexInData","sampleVal","i16FromHex","push","checkIfHasErrorForBloodPressure","bpMeasurement","status","undefined","diastolic","systolic","heartRate","BloodPressureStates","REGULAR","errorString","bloodPressureTranslatedExceptionMap","get","DEVICE_ERROR","ecgMeasurement","diagnosticResult","EcgDiagnosticFlag","POOR_WAVEFORM","LEAD_OFF","length","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BP2FrameReader = void 0;
7
+ var _frameReadStatus = require("../../../types/frame-read-status.js");
8
+ var _calculateCrc = require("../../../utils/calculate-crc-8.js");
9
+ var _hexToByte = require("../../../utils/hex-to-byte.js");
10
+ var _le16FromHex = require("../../../utils/le-16-from-hex.js");
11
+ const FRAME_START_BYTE = "a5";
12
+ const COMMAND_INDEX = 1;
13
+ const COMMAND_COMPLEMENT_INDEX = 2;
14
+ const PAYLOAD_LENGTH_INDEX = 5;
15
+ const HEADER_BYTES = 7;
16
+ const CHECKSUM_BYTES = 1;
17
+ const BYTE_MASK = 0xff;
18
+
19
+ /** Start byte, command and its complement: the shortest run that can identify a start. */
20
+ const START_PATTERN_BYTES = 3;
21
+ const isFrameStart = (buffer, index) => {
22
+ if ((buffer[index] || "").toLowerCase() !== FRAME_START_BYTE) {
23
+ return false;
24
+ }
25
+ const command = (0, _hexToByte.hexToByte)(buffer[index + COMMAND_INDEX] || "0");
26
+ const complement = (0, _hexToByte.hexToByte)(buffer[index + COMMAND_COMPLEMENT_INDEX] || "0");
27
+ return command === (~complement & BYTE_MASK);
28
+ };
29
+ const findFrameStart = buffer => {
30
+ const lastCandidate = buffer.length - START_PATTERN_BYTES;
31
+ for (let index = 0; index <= lastCandidate; index++) {
32
+ if (isFrameStart(buffer, index)) {
33
+ return index;
34
+ }
35
+ }
36
+ return -1;
37
+ };
38
+
39
+ /**
40
+ * Bytes that cannot begin a frame start, and are therefore safe to drop when no start
41
+ * was found. The trailing bytes are kept because a start pattern may still be arriving.
42
+ */
43
+ const droppableLeadingBytes = buffer => Math.max(0, buffer.length - (START_PATTERN_BYTES - 1));
44
+
45
+ /**
46
+ * Reads Lepu protocol frames as used by the BP2.
47
+ *
48
+ * Layout: `a5 | cmd | ~cmd | type | seq | lenLow lenHigh | payload | crc8`, where the
49
+ * checksum covers every byte before it. The complement of the command byte only narrows
50
+ * the search for a start; the checksum is what actually decides a frame is trustworthy.
51
+ */
52
+ class BP2FrameReader {
53
+ readFrame(buffer) {
54
+ const start = findFrameStart(buffer);
55
+ if (start === -1) {
56
+ return {
57
+ status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
58
+ consumedBytes: droppableLeadingBytes(buffer)
59
+ };
60
+ }
61
+ const payloadLength = (0, _le16FromHex.le16FromHex)(buffer, start + PAYLOAD_LENGTH_INDEX);
62
+ const frameLength = HEADER_BYTES + payloadLength + CHECKSUM_BYTES;
63
+ if (start + frameLength > buffer.length) {
64
+ return {
65
+ status: _frameReadStatus.FrameReadStatus.INCOMPLETE,
66
+ consumedBytes: start
67
+ };
68
+ }
69
+ const frame = buffer.slice(start, start + frameLength);
70
+ if (!this.hasValidChecksum(frame)) {
71
+ return {
72
+ status: _frameReadStatus.FrameReadStatus.CORRUPT,
73
+ consumedBytes: start + START_PATTERN_BYTES
74
+ };
75
+ }
76
+ return {
77
+ status: _frameReadStatus.FrameReadStatus.COMPLETE,
78
+ consumedBytes: start + frameLength,
79
+ frame
80
+ };
81
+ }
82
+ hasValidChecksum(frame) {
83
+ const checksummedBytes = frame.length - CHECKSUM_BYTES;
84
+ const declared = (0, _hexToByte.hexToByte)(frame[checksummedBytes] || "0");
85
+ return declared === (0, _calculateCrc.calculateCrc8)(frame, checksummedBytes);
86
+ }
87
+ }
88
+ exports.BP2FrameReader = BP2FrameReader;
89
+ //# sourceMappingURL=bp2.frame-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_frameReadStatus","require","_calculateCrc","_hexToByte","_le16FromHex","FRAME_START_BYTE","COMMAND_INDEX","COMMAND_COMPLEMENT_INDEX","PAYLOAD_LENGTH_INDEX","HEADER_BYTES","CHECKSUM_BYTES","BYTE_MASK","START_PATTERN_BYTES","isFrameStart","buffer","index","toLowerCase","command","hexToByte","complement","findFrameStart","lastCandidate","length","droppableLeadingBytes","Math","max","BP2FrameReader","readFrame","start","status","FrameReadStatus","INCOMPLETE","consumedBytes","payloadLength","le16FromHex","frameLength","frame","slice","hasValidChecksum","CORRUPT","COMPLETE","checksummedBytes","declared","calculateCrc8","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.frame-reader.ts"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,27 @@ var _core = require("@ovok/core");
8
8
  var _caseType = require("../../../types/case-type.js");
9
9
  var _convertBpStateFlag = require("../../../utils/convert-bp-state-flag.js");
10
10
  var _convertEcgDiagnosticFlag = require("../../../utils/convert-ecg-diagnostic-flag.js");
11
+ const bloodPressureResultFields = [{
12
+ name: "systolic",
13
+ parseType: "number",
14
+ byteIndexes: [21, 20],
15
+ parseReference: 16
16
+ }, {
17
+ name: "diastolic",
18
+ parseType: "number",
19
+ byteIndexes: [23, 22],
20
+ parseReference: 16
21
+ }, {
22
+ name: "heartRate",
23
+ parseType: "number",
24
+ byteIndexes: [27, 26],
25
+ parseReference: 16
26
+ }, {
27
+ name: "status",
28
+ parseType: "custom",
29
+ byteIndexes: [28],
30
+ customParserDefinition: a => (0, _convertBpStateFlag.convertBpStateFlag)(a)
31
+ }];
11
32
  const bp2MainServices = exports.bp2MainServices = [{
12
33
  uuid: "14839ac4-7d7e-415c-9a42-167340cf2339",
13
34
  monitorUuids: [{
@@ -52,27 +73,35 @@ const bp2MainServices = exports.bp2MainServices = [{
52
73
  measurementTypeKey: _core.MeasurementTypeKey.bloodPressure,
53
74
  caseType: _caseType.CaseType.RESULT,
54
75
  caseValue: "a50805",
55
- parseDefinitions: [{
56
- name: "systolic",
57
- parseType: "number",
58
- byteIndexes: [21, 20],
59
- parseReference: 16
60
- }, {
61
- name: "diastolic",
62
- parseType: "number",
63
- byteIndexes: [23, 22],
64
- parseReference: 16
65
- }, {
66
- name: "heartRate",
67
- parseType: "number",
68
- byteIndexes: [27, 26],
69
- parseReference: 16
70
- }, {
71
- name: "status",
72
- parseType: "custom",
73
- byteIndexes: [28],
74
- customParserDefinition: a => (0, _convertBpStateFlag.convertBpStateFlag)(a)
75
- }]
76
+ parseDefinitions: [...bloodPressureResultFields]
77
+ }, {
78
+ measurementTypeKey: _core.MeasurementTypeKey.bloodPressure,
79
+ caseType: _caseType.CaseType.STREAM,
80
+ caseValue: "a5080f",
81
+ parseDefinitions: [],
82
+ description: "Averaging run: a measurement is in progress"
83
+ }, {
84
+ measurementTypeKey: _core.MeasurementTypeKey.bloodPressure,
85
+ caseType: _caseType.CaseType.STREAM,
86
+ caseValue: "a50810",
87
+ parseDefinitions: [],
88
+ description: "Averaging run: waiting between measurements, run not finished"
89
+ }, {
90
+ measurementTypeKey: _core.MeasurementTypeKey.bloodPressure,
91
+ caseType: _caseType.CaseType.RESULT,
92
+ caseValue: "a50811",
93
+ parseDefinitions: bloodPressureResultFields,
94
+ description: "Averaging run finished. Carries the same payload as a single measurement"
95
+ }, {
96
+ caseType: _caseType.CaseType.OTHER,
97
+ caseValue: "a50814",
98
+ parseDefinitions: [],
99
+ description: "Venous congestion detected, measurement abandoned"
100
+ }, {
101
+ caseType: _caseType.CaseType.OTHER,
102
+ caseValue: "a508ff",
103
+ parseDefinitions: [],
104
+ description: "Device reports an invalid state"
76
105
  }, {
77
106
  measurementTypeKey: _core.MeasurementTypeKey.ecg,
78
107
  caseType: _caseType.CaseType.STREAM,
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","_caseType","_convertBpStateFlag","_convertEcgDiagnosticFlag","bp2MainServices","exports","uuid","monitorUuids","parsingModel","caseValuePosition","cases","caseType","CaseType","OTHER","caseValue","parseDefinitions","description","measurementTypeKey","MeasurementTypeKey","bloodPressure","STREAM","RESULT","name","parseType","byteIndexes","parseReference","customParserDefinition","a","convertBpStateFlag","ecg","convertEcgDiagnosticFlag","writeUuid","mainCommandUuid"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.main-services.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_caseType","_convertBpStateFlag","_convertEcgDiagnosticFlag","bloodPressureResultFields","name","parseType","byteIndexes","parseReference","customParserDefinition","a","convertBpStateFlag","bp2MainServices","exports","uuid","monitorUuids","parsingModel","caseValuePosition","cases","caseType","CaseType","OTHER","caseValue","parseDefinitions","description","measurementTypeKey","MeasurementTypeKey","bloodPressure","STREAM","RESULT","ecg","convertEcgDiagnosticFlag","writeUuid","mainCommandUuid"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.main-services.ts"],"mappings":"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","ignoreList":[]}
@@ -13,14 +13,16 @@ class BTConnectionHandler {
13
13
  characteristicSubscriptions = [];
14
14
  isSendingCommand = false;
15
15
  retryCount = 0;
16
- constructor(device, mainServices, callbacks) {
16
+ constructor(device, mainServices, callbacks, preferredMtu) {
17
17
  this.device = device;
18
18
  this.mainServices = mainServices;
19
19
  this.callbacks = callbacks;
20
+ this.preferredMtu = preferredMtu;
20
21
  }
21
22
  connect = async () => {
22
23
  try {
23
24
  await this.connectWithRetries();
25
+ await this.requestPreferredMtu();
24
26
  this.callbacks.onStatusChanged?.(_deviceStatus.DeviceStatus.CONNECTED);
25
27
  await this.device.discoverAllServicesAndCharacteristics();
26
28
  this.onDisconnectSubscription = this.device.onDisconnected(this.onDeviceDisconnected);
@@ -54,6 +56,28 @@ class BTConnectionHandler {
54
56
  this.isSendingCommand = false;
55
57
  this.retryCount = 0;
56
58
  };
59
+
60
+ /**
61
+ * Asks for a larger MTU so a frame arrives in fewer notifications.
62
+ *
63
+ * A device or platform that will not grant it keeps working at the default, so a
64
+ * refusal is recorded and the connection continues.
65
+ */
66
+ requestPreferredMtu = async () => {
67
+ if (!this.preferredMtu) {
68
+ return;
69
+ }
70
+ try {
71
+ await this.device.requestMTU(this.preferredMtu);
72
+ } catch (error) {
73
+ (0, _sentryLogger.sentryLogger)("info", "DEVICE: MTU request was not granted", {
74
+ deviceId: this.device.id,
75
+ deviceName: this.device.name,
76
+ requestedMtu: this.preferredMtu,
77
+ error: error instanceof Error ? error.message : String(error)
78
+ });
79
+ }
80
+ };
57
81
  connectWithRetries = async () => {
58
82
  const maxRetries = 5;
59
83
  const retryDelay = 1000;
@@ -1 +1 @@
1
- {"version":3,"names":["_index","require","_sentryLogger","_deviceStatus","_base64ToHex","_hexToBase","BTConnectionHandler","characteristicSubscriptions","isSendingCommand","retryCount","constructor","device","mainServices","callbacks","connect","connectWithRetries","onStatusChanged","DeviceStatus","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","sentryLogger","Error","message","deviceName","name","onError","DISCONNECTED","destroy","forEach","sub","remove","sendCommandToDevice","mainService","writeUuid","sendCommand","maxRetries","retryDelay","maxDelay","connected","isConnected","deviceId","id","String","errorCode","willRetry","Promise","resolve","setTimeout","Math","min","pow","monitorUuid","monitorUuids","subscription","monitorCharacteristicForService","uuid","result","value","hexValue","base64ToHex","onDataReceived","push","command","hexToBase64","mainCommandUuid","writeCharacteristicWithResponseForService","slog","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_index","require","_sentryLogger","_deviceStatus","_base64ToHex","_hexToBase","BTConnectionHandler","characteristicSubscriptions","isSendingCommand","retryCount","constructor","device","mainServices","callbacks","preferredMtu","connect","connectWithRetries","requestPreferredMtu","onStatusChanged","DeviceStatus","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","sentryLogger","Error","message","deviceName","name","onError","DISCONNECTED","destroy","forEach","sub","remove","sendCommandToDevice","mainService","writeUuid","sendCommand","requestMTU","deviceId","id","requestedMtu","String","maxRetries","retryDelay","maxDelay","connected","isConnected","errorCode","willRetry","Promise","resolve","setTimeout","Math","min","pow","monitorUuid","monitorUuids","subscription","monitorCharacteristicForService","uuid","result","value","hexValue","base64ToHex","onDataReceived","push","command","hexToBase64","mainCommandUuid","writeCharacteristicWithResponseForService","slog","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":"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","ignoreList":[]}
@@ -4,9 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BTDataProcessor = void 0;
7
+ var _sentryLogger = require("../../../helpers/utils/sentry-logger.js");
7
8
  var _caseType = require("../../types/case-type.js");
8
- var _deviceStatus = require("../../types/device-status.js");
9
- var _parseMeasurement = require("../../utils/parse-measurement.js");
9
+ var _frameReadStatus = require("../../types/frame-read-status.js");
10
+ var _frameParser = require("./frame-parser.js");
11
+ var _measurementStateMachine = require("./measurement-state-machine.js");
10
12
  class BTDataProcessor {
11
13
  /**
12
14
  * One buffer per characteristic.
@@ -18,21 +20,23 @@ class BTDataProcessor {
18
20
  * error. Keeping the buffers apart makes that impossible.
19
21
  */
20
22
  buffers = new Map();
21
- isMeasuring = false;
22
- constructor(device, mainServices, stuckDataTimeoutDuration, callbacks) {
23
+ constructor(device, mainServices, stuckDataTimeoutDuration, callbacks, frameReader) {
23
24
  this.device = device;
24
- this.mainServices = mainServices;
25
25
  this.stuckDataTimeoutDuration = stuckDataTimeoutDuration;
26
26
  this.callbacks = callbacks;
27
- }
28
- get collectedValues() {
29
- return this.buffers.get(this.currentUuid) ?? [];
27
+ this.frameReader = frameReader;
28
+ this.frameParser = new _frameParser.FrameParser(mainServices);
29
+ this.measurementState = new _measurementStateMachine.MeasurementStateMachine({
30
+ onStatusChanged: callbacks.onStatusChanged,
31
+ onStreamStart: callbacks.onStreamStart,
32
+ onResult: callbacks.onResult
33
+ });
30
34
  }
31
35
  currentUuid = "";
32
36
  destroy = () => {
33
37
  this.buffers.clear();
34
38
  this.currentUuid = "";
35
- this.isMeasuring = false;
39
+ this.measurementState.reset();
36
40
  clearTimeout(this.stuckDataTimeout);
37
41
  this.stuckDataTimeout = undefined;
38
42
  };
@@ -42,13 +46,61 @@ class BTDataProcessor {
42
46
  buffer.push(...hexValue);
43
47
  this.buffers.set(this.currentUuid, buffer);
44
48
  this.startStuckTimeout();
45
- const isValid = this.callbacks.validatePackage(buffer, uuid);
46
- if (!isValid) {
49
+ if (this.frameReader) {
50
+ this.readFramesFromBuffer(this.frameReader, uuid, buffer);
51
+ return;
52
+ }
53
+ this.readWholeBuffer(uuid, buffer);
54
+ };
55
+
56
+ /**
57
+ * Drains every complete frame the buffer holds.
58
+ *
59
+ * One notification can complete several frames and can also carry bytes that belong to
60
+ * no frame at all, so the reader is asked repeatedly until it stops making progress.
61
+ * A frame that fails its integrity check is reported and skipped rather than parsed.
62
+ */
63
+ readFramesFromBuffer = (reader, uuid, buffer) => {
64
+ let hasReadFrame = false;
65
+ while (buffer.length > 0) {
66
+ const result = reader.readFrame(buffer);
67
+ const hasProgressed = result.consumedBytes > 0;
68
+ buffer.splice(0, result.consumedBytes);
69
+ if (result.status === _frameReadStatus.FrameReadStatus.COMPLETE) {
70
+ hasReadFrame = true;
71
+ this.handleFrame(uuid, result.frame);
72
+ continue;
73
+ }
74
+ if (result.status === _frameReadStatus.FrameReadStatus.CORRUPT) {
75
+ this.reportCorruptFrame();
76
+ }
77
+ if (result.status === _frameReadStatus.FrameReadStatus.INCOMPLETE || !hasProgressed) {
78
+ break;
79
+ }
80
+ }
81
+ if (hasReadFrame) {
82
+ this.callbacks.onSendCommandToDevice?.();
83
+ }
84
+ };
85
+
86
+ /**
87
+ * Treats the whole buffer as one frame, for devices that have not declared a reader.
88
+ */
89
+ readWholeBuffer = (uuid, buffer) => {
90
+ if (!this.callbacks.validatePackage(buffer, uuid)) {
47
91
  return;
48
92
  }
49
- const data = this.extractData(uuid);
93
+ this.handleFrame(uuid, buffer);
94
+ this.buffers.set(this.currentUuid, []);
95
+ this.callbacks.onSendCommandToDevice?.();
96
+ };
97
+ handleFrame = (uuid, frame) => {
98
+ const data = this.frameParser.parse(uuid, frame);
50
99
  if (!data) {
51
- this.resetDataAndSendCommandToDevice();
100
+ (0, _sentryLogger.sentryLogger)("info", "BT_MANAGER: Frame matched no declared case", {
101
+ uuid,
102
+ frame: frame.join("")
103
+ });
52
104
  return;
53
105
  }
54
106
 
@@ -60,81 +112,24 @@ class BTDataProcessor {
60
112
  if (data.parsingCase.caseType === _caseType.CaseType.DEPENDENT) {
61
113
  dependentData = this.callbacks.handleDependentResult?.(data);
62
114
  }
63
- this.handleStatusChanges(dependentData || data);
64
- this.resetDataAndSendCommandToDevice();
115
+ this.measurementState.advance(dependentData || data, frame);
65
116
  };
66
- extractData(uuid) {
67
- const parsingModel = this.findParsingModel(uuid);
68
- if (!parsingModel) {
69
- return;
70
- }
71
- const value = parsingModel.caseValuePosition?.map(index => this.collectedValues[index]).join("") || "";
72
- const parsingCase = this.findParsingCase(value, parsingModel);
73
- if (!parsingCase) {
74
- return;
75
- }
76
- const parsedData = this.parseData(this.collectedValues, parsingCase);
77
- if (!parsedData) {
78
- return;
79
- }
80
- const measurementTypeKey = parsingCase.measurementTypeKey;
81
- return {
82
- parsingCase,
83
- measurementTypeKey,
84
- parsedData: parsedData
85
- };
86
- }
87
- findParsingModel(uuid) {
88
- let parsingModel;
89
- for (const mainService of this.mainServices) {
90
- const characteristic = mainService.monitorUuids.find(e => e.uuid.toLowerCase() === uuid.toLowerCase());
91
- if (characteristic) {
92
- parsingModel = characteristic.parsingModel;
93
- break;
117
+ reportCorruptFrame = () => {
118
+ this.callbacks.onError?.(new Error("feedback-messages.measurement.corrupt-frame-error", {
119
+ cause: {
120
+ message: "Frame failed its integrity check"
94
121
  }
95
- }
96
- return parsingModel;
97
- }
98
- findParsingCase(caseValue, parsingModel) {
99
- if (!parsingModel) {
100
- return;
101
- }
102
- const parsingCase = parsingModel.cases?.find(e => e.caseValue === caseValue);
103
- return parsingCase;
104
- }
105
- parseData(successResult, parsingCase) {
106
- if (!parsingCase) {
107
- return;
108
- }
109
- return (0, _parseMeasurement.parseMeasurement)(successResult, parsingCase);
110
- }
111
- handleStatusChanges({
112
- parsingCase,
113
- measurementTypeKey,
114
- parsedData
115
- }) {
116
- if (parsingCase.caseType === _caseType.CaseType.STREAM && !this.isMeasuring) {
117
- this.callbacks.onStreamStart?.();
118
- this.callbacks.onStatusChanged?.(_deviceStatus.DeviceStatus.MEASURING, measurementTypeKey);
119
- this.isMeasuring = true;
120
- }
121
- if (this.isMeasuring && parsingCase.caseType === _caseType.CaseType.OTHER) {
122
- this.callbacks.onStatusChanged?.(_deviceStatus.DeviceStatus.CONNECTED, measurementTypeKey);
123
- this.isMeasuring = false;
124
- }
125
- let skipConnectedChange = false;
126
- if (this.isMeasuring) {
127
- skipConnectedChange = this.callbacks.onResult?.(parsedData, this.collectedValues) ?? false;
128
- }
129
- if (parsingCase.caseType === _caseType.CaseType.RESULT && this.isMeasuring && !skipConnectedChange) {
130
- this.isMeasuring = false;
131
- this.callbacks.onStatusChanged?.(_deviceStatus.DeviceStatus.CONNECTED, measurementTypeKey);
132
- }
133
- }
134
- resetDataAndSendCommandToDevice = () => {
135
- this.buffers.set(this.currentUuid, []);
136
- this.callbacks.onSendCommandToDevice?.();
122
+ }));
137
123
  };
124
+
125
+ /**
126
+ * Reports a parsed frame and moves the device between measuring and connected.
127
+ *
128
+ * A result is reported whether or not a stream preceded it, because a device already
129
+ * holding a finished measurement when the app connects has a real reading to hand over.
130
+ * Repeats are suppressed on the case transition rather than on the values, so a second
131
+ * measurement that happens to read the same is still reported.
132
+ */
138
133
  startStuckTimeout = () => {
139
134
  if (this.stuckDataTimeout) {
140
135
  clearTimeout(this.stuckDataTimeout);
@@ -1 +1 @@
1
- {"version":3,"names":["_caseType","require","_deviceStatus","_parseMeasurement","BTDataProcessor","buffers","Map","isMeasuring","constructor","device","mainServices","stuckDataTimeoutDuration","callbacks","collectedValues","get","currentUuid","destroy","clear","clearTimeout","stuckDataTimeout","undefined","processData","uuid","hexValue","String","toLowerCase","buffer","push","set","startStuckTimeout","isValid","validatePackage","data","extractData","resetDataAndSendCommandToDevice","dependentData","parsingCase","caseType","CaseType","DEPENDENT","handleDependentResult","handleStatusChanges","parsingModel","findParsingModel","value","caseValuePosition","map","index","join","findParsingCase","parsedData","parseData","measurementTypeKey","mainService","characteristic","monitorUuids","find","e","caseValue","cases","successResult","parseMeasurement","STREAM","onStreamStart","onStatusChanged","DeviceStatus","MEASURING","OTHER","CONNECTED","skipConnectedChange","onResult","RESULT","onSendCommandToDevice","setTimeout","onError","Error","cause","message","cancelConnection","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_sentryLogger","require","_caseType","_frameReadStatus","_frameParser","_measurementStateMachine","BTDataProcessor","buffers","Map","constructor","device","mainServices","stuckDataTimeoutDuration","callbacks","frameReader","frameParser","FrameParser","measurementState","MeasurementStateMachine","onStatusChanged","onStreamStart","onResult","currentUuid","destroy","clear","reset","clearTimeout","stuckDataTimeout","undefined","processData","uuid","hexValue","String","toLowerCase","buffer","get","push","set","startStuckTimeout","readFramesFromBuffer","readWholeBuffer","reader","hasReadFrame","length","result","readFrame","hasProgressed","consumedBytes","splice","status","FrameReadStatus","COMPLETE","handleFrame","frame","CORRUPT","reportCorruptFrame","INCOMPLETE","onSendCommandToDevice","validatePackage","data","parse","sentryLogger","join","dependentData","parsingCase","caseType","CaseType","DEPENDENT","handleDependentResult","advance","onError","Error","cause","message","setTimeout","cancelConnection","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}