@ovok/native 0.4.4 → 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 (109) 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/module/modules/bt-management/services/devices/bp2/bp2.device.js +9 -23
  29. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  30. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +84 -0
  31. package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -0
  32. package/lib/module/modules/bt-management/services/devices/bp2/bp2.main-services.js +50 -21
  33. package/lib/module/modules/bt-management/services/devices/bp2/bp2.main-services.js.map +1 -1
  34. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js +25 -1
  35. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  36. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +80 -85
  37. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  38. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +25 -3
  39. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  40. package/lib/module/modules/bt-management/services/devices/frame-parser.js +50 -0
  41. package/lib/module/modules/bt-management/services/devices/frame-parser.js.map +1 -0
  42. package/lib/module/modules/bt-management/services/devices/measurement-state-machine.js +58 -0
  43. package/lib/module/modules/bt-management/services/devices/measurement-state-machine.js.map +1 -0
  44. package/lib/module/modules/bt-management/types/frame-read-result.js +4 -0
  45. package/lib/module/modules/bt-management/types/frame-read-result.js.map +1 -0
  46. package/lib/module/modules/bt-management/types/frame-read-status.js +13 -0
  47. package/lib/module/modules/bt-management/types/frame-read-status.js.map +1 -0
  48. package/lib/module/modules/bt-management/types/frame-reader.js +4 -0
  49. package/lib/module/modules/bt-management/types/frame-reader.js.map +1 -0
  50. package/lib/module/modules/bt-management/utils/calculate-crc-8.js +38 -0
  51. package/lib/module/modules/bt-management/utils/calculate-crc-8.js.map +1 -0
  52. package/lib/module/modules/bt-management/utils/convert-bp-state-flag.js +9 -1
  53. package/lib/module/modules/bt-management/utils/convert-bp-state-flag.js.map +1 -1
  54. package/lib/module/modules/bt-management/utils/le-16-from-hex.js.map +1 -1
  55. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts +3 -1
  56. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +14 -0
  58. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -0
  59. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.main-services.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +9 -1
  61. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +27 -10
  63. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +23 -1
  65. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts +19 -0
  67. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -0
  68. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/measurement-state-machine.d.ts +30 -0
  69. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/measurement-state-machine.d.ts.map +1 -0
  70. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-result.d.ts +21 -0
  71. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-result.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-status.d.ts +10 -0
  73. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-read-status.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts +13 -0
  75. package/lib/typescript/commonjs/src/modules/bt-management/types/frame-reader.d.ts.map +1 -0
  76. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8.d.ts +10 -0
  77. package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-crc-8.d.ts.map +1 -0
  78. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-bp-state-flag.d.ts +7 -0
  79. package/lib/typescript/commonjs/src/modules/bt-management/utils/convert-bp-state-flag.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-16-from-hex.d.ts +1 -1
  81. package/lib/typescript/commonjs/src/modules/bt-management/utils/le-16-from-hex.d.ts.map +1 -1
  82. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts +3 -1
  83. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  84. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +14 -0
  85. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -0
  86. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.main-services.d.ts.map +1 -1
  87. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +9 -1
  88. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  89. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +27 -10
  90. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
  91. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +23 -1
  92. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  93. package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts +19 -0
  94. package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -0
  95. package/lib/typescript/module/src/modules/bt-management/services/devices/measurement-state-machine.d.ts +30 -0
  96. package/lib/typescript/module/src/modules/bt-management/services/devices/measurement-state-machine.d.ts.map +1 -0
  97. package/lib/typescript/module/src/modules/bt-management/types/frame-read-result.d.ts +21 -0
  98. package/lib/typescript/module/src/modules/bt-management/types/frame-read-result.d.ts.map +1 -0
  99. package/lib/typescript/module/src/modules/bt-management/types/frame-read-status.d.ts +10 -0
  100. package/lib/typescript/module/src/modules/bt-management/types/frame-read-status.d.ts.map +1 -0
  101. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts +13 -0
  102. package/lib/typescript/module/src/modules/bt-management/types/frame-reader.d.ts.map +1 -0
  103. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8.d.ts +10 -0
  104. package/lib/typescript/module/src/modules/bt-management/utils/calculate-crc-8.d.ts.map +1 -0
  105. package/lib/typescript/module/src/modules/bt-management/utils/convert-bp-state-flag.d.ts +7 -0
  106. package/lib/typescript/module/src/modules/bt-management/utils/convert-bp-state-flag.d.ts.map +1 -1
  107. package/lib/typescript/module/src/modules/bt-management/utils/le-16-from-hex.d.ts +1 -1
  108. package/lib/typescript/module/src/modules/bt-management/utils/le-16-from-hex.d.ts.map +1 -1
  109. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","CaseType","convertBpStateFlag","convertEcgDiagnosticFlag","bp2MainServices","uuid","monitorUuids","parsingModel","caseValuePosition","cases","caseType","OTHER","caseValue","parseDefinitions","description","measurementTypeKey","bloodPressure","STREAM","RESULT","name","parseType","byteIndexes","parseReference","customParserDefinition","a","ecg","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":["MeasurementTypeKey","CaseType","convertBpStateFlag","convertEcgDiagnosticFlag","bloodPressureResultFields","name","parseType","byteIndexes","parseReference","customParserDefinition","a","bp2MainServices","uuid","monitorUuids","parsingModel","caseValuePosition","cases","caseType","OTHER","caseValue","parseDefinitions","description","measurementTypeKey","bloodPressure","STREAM","RESULT","ecg","writeUuid","mainCommandUuid"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/bp2/bp2.main-services.ts"],"mappings":"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","ignoreList":[]}
@@ -9,14 +9,16 @@ export class BTConnectionHandler {
9
9
  characteristicSubscriptions = [];
10
10
  isSendingCommand = false;
11
11
  retryCount = 0;
12
- constructor(device, mainServices, callbacks) {
12
+ constructor(device, mainServices, callbacks, preferredMtu) {
13
13
  this.device = device;
14
14
  this.mainServices = mainServices;
15
15
  this.callbacks = callbacks;
16
+ this.preferredMtu = preferredMtu;
16
17
  }
17
18
  connect = async () => {
18
19
  try {
19
20
  await this.connectWithRetries();
21
+ await this.requestPreferredMtu();
20
22
  this.callbacks.onStatusChanged?.(DeviceStatus.CONNECTED);
21
23
  await this.device.discoverAllServicesAndCharacteristics();
22
24
  this.onDisconnectSubscription = this.device.onDisconnected(this.onDeviceDisconnected);
@@ -50,6 +52,28 @@ export class BTConnectionHandler {
50
52
  this.isSendingCommand = false;
51
53
  this.retryCount = 0;
52
54
  };
55
+
56
+ /**
57
+ * Asks for a larger MTU so a frame arrives in fewer notifications.
58
+ *
59
+ * A device or platform that will not grant it keeps working at the default, so a
60
+ * refusal is recorded and the connection continues.
61
+ */
62
+ requestPreferredMtu = async () => {
63
+ if (!this.preferredMtu) {
64
+ return;
65
+ }
66
+ try {
67
+ await this.device.requestMTU(this.preferredMtu);
68
+ } catch (error) {
69
+ sentryLogger("info", "DEVICE: MTU request was not granted", {
70
+ deviceId: this.device.id,
71
+ deviceName: this.device.name,
72
+ requestedMtu: this.preferredMtu,
73
+ error: error instanceof Error ? error.message : String(error)
74
+ });
75
+ }
76
+ };
53
77
  connectWithRetries = async () => {
54
78
  const maxRetries = 5;
55
79
  const retryDelay = 1000;
@@ -1 +1 @@
1
- {"version":3,"names":["slog","sentryLogger","DeviceStatus","base64ToHex","hexToBase64","BTConnectionHandler","characteristicSubscriptions","isSendingCommand","retryCount","constructor","device","mainServices","callbacks","connect","connectWithRetries","onStatusChanged","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","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","onDataReceived","push","command","mainCommandUuid","writeCharacteristicWithResponseForService"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["slog","sentryLogger","DeviceStatus","base64ToHex","hexToBase64","BTConnectionHandler","characteristicSubscriptions","isSendingCommand","retryCount","constructor","device","mainServices","callbacks","preferredMtu","connect","connectWithRetries","requestPreferredMtu","onStatusChanged","CONNECTED","discoverAllServicesAndCharacteristics","onDisconnectSubscription","onDisconnected","onDeviceDisconnected","subscribeToAllCharacteristics","error","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","onDataReceived","push","command","mainCommandUuid","writeCharacteristicWithResponseForService"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-connection-handler.ts"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
 
3
+ import { sentryLogger } from "../../../helpers/utils/sentry-logger.js";
3
4
  import { CaseType } from "../../types/case-type.js";
4
- import { DeviceStatus } from "../../types/device-status.js";
5
- import { parseMeasurement } from "../../utils/parse-measurement.js";
5
+ import { FrameReadStatus } from "../../types/frame-read-status.js";
6
+ import { FrameParser } from "./frame-parser.js";
7
+ import { MeasurementStateMachine } from "./measurement-state-machine.js";
6
8
  export class BTDataProcessor {
7
9
  /**
8
10
  * One buffer per characteristic.
@@ -14,21 +16,23 @@ export class BTDataProcessor {
14
16
  * error. Keeping the buffers apart makes that impossible.
15
17
  */
16
18
  buffers = new Map();
17
- isMeasuring = false;
18
- constructor(device, mainServices, stuckDataTimeoutDuration, callbacks) {
19
+ constructor(device, mainServices, stuckDataTimeoutDuration, callbacks, frameReader) {
19
20
  this.device = device;
20
- this.mainServices = mainServices;
21
21
  this.stuckDataTimeoutDuration = stuckDataTimeoutDuration;
22
22
  this.callbacks = callbacks;
23
- }
24
- get collectedValues() {
25
- return this.buffers.get(this.currentUuid) ?? [];
23
+ this.frameReader = frameReader;
24
+ this.frameParser = new FrameParser(mainServices);
25
+ this.measurementState = new MeasurementStateMachine({
26
+ onStatusChanged: callbacks.onStatusChanged,
27
+ onStreamStart: callbacks.onStreamStart,
28
+ onResult: callbacks.onResult
29
+ });
26
30
  }
27
31
  currentUuid = "";
28
32
  destroy = () => {
29
33
  this.buffers.clear();
30
34
  this.currentUuid = "";
31
- this.isMeasuring = false;
35
+ this.measurementState.reset();
32
36
  clearTimeout(this.stuckDataTimeout);
33
37
  this.stuckDataTimeout = undefined;
34
38
  };
@@ -38,13 +42,61 @@ export class BTDataProcessor {
38
42
  buffer.push(...hexValue);
39
43
  this.buffers.set(this.currentUuid, buffer);
40
44
  this.startStuckTimeout();
41
- const isValid = this.callbacks.validatePackage(buffer, uuid);
42
- if (!isValid) {
45
+ if (this.frameReader) {
46
+ this.readFramesFromBuffer(this.frameReader, uuid, buffer);
47
+ return;
48
+ }
49
+ this.readWholeBuffer(uuid, buffer);
50
+ };
51
+
52
+ /**
53
+ * Drains every complete frame the buffer holds.
54
+ *
55
+ * One notification can complete several frames and can also carry bytes that belong to
56
+ * no frame at all, so the reader is asked repeatedly until it stops making progress.
57
+ * A frame that fails its integrity check is reported and skipped rather than parsed.
58
+ */
59
+ readFramesFromBuffer = (reader, uuid, buffer) => {
60
+ let hasReadFrame = false;
61
+ while (buffer.length > 0) {
62
+ const result = reader.readFrame(buffer);
63
+ const hasProgressed = result.consumedBytes > 0;
64
+ buffer.splice(0, result.consumedBytes);
65
+ if (result.status === FrameReadStatus.COMPLETE) {
66
+ hasReadFrame = true;
67
+ this.handleFrame(uuid, result.frame);
68
+ continue;
69
+ }
70
+ if (result.status === FrameReadStatus.CORRUPT) {
71
+ this.reportCorruptFrame();
72
+ }
73
+ if (result.status === FrameReadStatus.INCOMPLETE || !hasProgressed) {
74
+ break;
75
+ }
76
+ }
77
+ if (hasReadFrame) {
78
+ this.callbacks.onSendCommandToDevice?.();
79
+ }
80
+ };
81
+
82
+ /**
83
+ * Treats the whole buffer as one frame, for devices that have not declared a reader.
84
+ */
85
+ readWholeBuffer = (uuid, buffer) => {
86
+ if (!this.callbacks.validatePackage(buffer, uuid)) {
43
87
  return;
44
88
  }
45
- const data = this.extractData(uuid);
89
+ this.handleFrame(uuid, buffer);
90
+ this.buffers.set(this.currentUuid, []);
91
+ this.callbacks.onSendCommandToDevice?.();
92
+ };
93
+ handleFrame = (uuid, frame) => {
94
+ const data = this.frameParser.parse(uuid, frame);
46
95
  if (!data) {
47
- this.resetDataAndSendCommandToDevice();
96
+ sentryLogger("info", "BT_MANAGER: Frame matched no declared case", {
97
+ uuid,
98
+ frame: frame.join("")
99
+ });
48
100
  return;
49
101
  }
50
102
 
@@ -56,81 +108,24 @@ export class BTDataProcessor {
56
108
  if (data.parsingCase.caseType === CaseType.DEPENDENT) {
57
109
  dependentData = this.callbacks.handleDependentResult?.(data);
58
110
  }
59
- this.handleStatusChanges(dependentData || data);
60
- this.resetDataAndSendCommandToDevice();
111
+ this.measurementState.advance(dependentData || data, frame);
61
112
  };
62
- extractData(uuid) {
63
- const parsingModel = this.findParsingModel(uuid);
64
- if (!parsingModel) {
65
- return;
66
- }
67
- const value = parsingModel.caseValuePosition?.map(index => this.collectedValues[index]).join("") || "";
68
- const parsingCase = this.findParsingCase(value, parsingModel);
69
- if (!parsingCase) {
70
- return;
71
- }
72
- const parsedData = this.parseData(this.collectedValues, parsingCase);
73
- if (!parsedData) {
74
- return;
75
- }
76
- const measurementTypeKey = parsingCase.measurementTypeKey;
77
- return {
78
- parsingCase,
79
- measurementTypeKey,
80
- parsedData: parsedData
81
- };
82
- }
83
- findParsingModel(uuid) {
84
- let parsingModel;
85
- for (const mainService of this.mainServices) {
86
- const characteristic = mainService.monitorUuids.find(e => e.uuid.toLowerCase() === uuid.toLowerCase());
87
- if (characteristic) {
88
- parsingModel = characteristic.parsingModel;
89
- break;
113
+ reportCorruptFrame = () => {
114
+ this.callbacks.onError?.(new Error("feedback-messages.measurement.corrupt-frame-error", {
115
+ cause: {
116
+ message: "Frame failed its integrity check"
90
117
  }
91
- }
92
- return parsingModel;
93
- }
94
- findParsingCase(caseValue, parsingModel) {
95
- if (!parsingModel) {
96
- return;
97
- }
98
- const parsingCase = parsingModel.cases?.find(e => e.caseValue === caseValue);
99
- return parsingCase;
100
- }
101
- parseData(successResult, parsingCase) {
102
- if (!parsingCase) {
103
- return;
104
- }
105
- return parseMeasurement(successResult, parsingCase);
106
- }
107
- handleStatusChanges({
108
- parsingCase,
109
- measurementTypeKey,
110
- parsedData
111
- }) {
112
- if (parsingCase.caseType === CaseType.STREAM && !this.isMeasuring) {
113
- this.callbacks.onStreamStart?.();
114
- this.callbacks.onStatusChanged?.(DeviceStatus.MEASURING, measurementTypeKey);
115
- this.isMeasuring = true;
116
- }
117
- if (this.isMeasuring && parsingCase.caseType === CaseType.OTHER) {
118
- this.callbacks.onStatusChanged?.(DeviceStatus.CONNECTED, measurementTypeKey);
119
- this.isMeasuring = false;
120
- }
121
- let skipConnectedChange = false;
122
- if (this.isMeasuring) {
123
- skipConnectedChange = this.callbacks.onResult?.(parsedData, this.collectedValues) ?? false;
124
- }
125
- if (parsingCase.caseType === CaseType.RESULT && this.isMeasuring && !skipConnectedChange) {
126
- this.isMeasuring = false;
127
- this.callbacks.onStatusChanged?.(DeviceStatus.CONNECTED, measurementTypeKey);
128
- }
129
- }
130
- resetDataAndSendCommandToDevice = () => {
131
- this.buffers.set(this.currentUuid, []);
132
- this.callbacks.onSendCommandToDevice?.();
118
+ }));
133
119
  };
120
+
121
+ /**
122
+ * Reports a parsed frame and moves the device between measuring and connected.
123
+ *
124
+ * A result is reported whether or not a stream preceded it, because a device already
125
+ * holding a finished measurement when the app connects has a real reading to hand over.
126
+ * Repeats are suppressed on the case transition rather than on the values, so a second
127
+ * measurement that happens to read the same is still reported.
128
+ */
134
129
  startStuckTimeout = () => {
135
130
  if (this.stuckDataTimeout) {
136
131
  clearTimeout(this.stuckDataTimeout);
@@ -1 +1 @@
1
- {"version":3,"names":["CaseType","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","DEPENDENT","handleDependentResult","handleStatusChanges","parsingModel","findParsingModel","value","caseValuePosition","map","index","join","findParsingCase","parsedData","parseData","measurementTypeKey","mainService","characteristic","monitorUuids","find","e","caseValue","cases","successResult","STREAM","onStreamStart","onStatusChanged","MEASURING","OTHER","CONNECTED","skipConnectedChange","onResult","RESULT","onSendCommandToDevice","setTimeout","onError","Error","cause","message","cancelConnection"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["sentryLogger","CaseType","FrameReadStatus","FrameParser","MeasurementStateMachine","BTDataProcessor","buffers","Map","constructor","device","mainServices","stuckDataTimeoutDuration","callbacks","frameReader","frameParser","measurementState","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","COMPLETE","handleFrame","frame","CORRUPT","reportCorruptFrame","INCOMPLETE","onSendCommandToDevice","validatePackage","data","parse","join","dependentData","parsingCase","caseType","DEPENDENT","handleDependentResult","advance","onError","Error","cause","message","setTimeout","cancelConnection"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-data-processor.ts"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,28 @@ export class BTManagedDevice {
18
18
  * @returns The handled data.
19
19
  */
20
20
 
21
+ /**
22
+ * Locates frame boundaries inside the notification buffer.
23
+ *
24
+ * A device that leaves this undefined has its whole buffer handed to
25
+ * `validatePackage` and parsed as a single frame, which only holds while a
26
+ * notification can neither split a frame nor carry more than one.
27
+ */
28
+
29
+ /**
30
+ * MTU to ask for once connected.
31
+ *
32
+ * A larger MTU carries a frame in fewer notifications, which matters most for the
33
+ * long payloads. Devices that leave this undefined keep the platform default.
34
+ */
35
+
36
+ /**
37
+ * Decides whether the buffer holds a parseable frame.
38
+ *
39
+ * Only consulted for devices that declare no frameReader. A device that declares
40
+ * neither parses nothing, so an unknown buffer is never decoded on trust.
41
+ */
42
+
21
43
  constructor(device, {
22
44
  deviceName,
23
45
  onError: onErrorCallback,
@@ -109,11 +131,11 @@ export class BTManagedDevice {
109
131
  onDataReceived: (uuid, hexValue) => {
110
132
  this.dataProcessor?.processData(uuid, hexValue);
111
133
  }
112
- });
134
+ }, this.preferredMtu);
113
135
  this.dataProcessor = new BTDataProcessor(this.device, this.mainServices, this.stuckDataTimeout, {
114
136
  onStatusChanged: this.onDeviceStatusChanged?.bind(this),
115
137
  onStreamStart: this.onStreamStart?.bind(this),
116
- validatePackage: this.validatePackage.bind(this),
138
+ validatePackage: this.validatePackage?.bind(this) ?? (() => false),
117
139
  onResult: (parsedData, collectedValues) => {
118
140
  try {
119
141
  return this.handleSuccessResult.bind(this)(parsedData, collectedValues);
@@ -124,7 +146,7 @@ export class BTManagedDevice {
124
146
  onSendCommandToDevice: this.connectionHandler?.sendCommandToDevice?.bind(this),
125
147
  onError: this.onError?.bind(this),
126
148
  handleDependentResult: this.handleDependentResult?.bind(this)
127
- });
149
+ }, this.frameReader);
128
150
  await this.connectionHandler.connect();
129
151
  };
130
152
  getSupportedMeasurementTypeKeys = () => {
@@ -1 +1 @@
1
- {"version":3,"names":["sentryLogger","DeviceStatus","BTConnectionHandler","BTDataProcessor","BTManagedDevice","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResult","onResultCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","deviceId","id","deviceData","name","localName","manufacturerData","sn","measurementTypes","status","measurementTypeKey","error","Error","message","caseType","_","data","diagramPoints","length","undefined","destroy","connectionHandler","dataProcessor","connect","getSupportedMeasurementTypeKeys","mainServices","onStatusChanged","bind","DISCONNECTED","onDataReceived","uuid","hexValue","processData","stuckDataTimeout","onStreamStart","validatePackage","parsedData","collectedValues","handleSuccessResult","onSendCommandToDevice","sendCommandToDevice","handleDependentResult","flatMap","service","monitorUuids","parsingModel","cases","map","c","filter","type","uniqueMeasurementTypes","Set","flat"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["sentryLogger","DeviceStatus","BTConnectionHandler","BTDataProcessor","BTManagedDevice","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResult","onResultCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","deviceId","id","deviceData","name","localName","manufacturerData","sn","measurementTypes","status","measurementTypeKey","error","Error","message","caseType","_","data","diagramPoints","length","undefined","destroy","connectionHandler","dataProcessor","connect","getSupportedMeasurementTypeKeys","mainServices","onStatusChanged","bind","DISCONNECTED","onDataReceived","uuid","hexValue","processData","preferredMtu","stuckDataTimeout","onStreamStart","validatePackage","parsedData","collectedValues","handleSuccessResult","onSendCommandToDevice","sendCommandToDevice","handleDependentResult","frameReader","flatMap","service","monitorUuids","parsingModel","cases","map","c","filter","type","uniqueMeasurementTypes","Set","flat"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ import { parseMeasurement } from "../../utils/parse-measurement.js";
4
+
5
+ /**
6
+ * Turns a verified frame into a measurement, by selecting the parsing case the frame
7
+ * matches and applying that case's field definitions.
8
+ *
9
+ * A frame whose characteristic is unknown, whose selector bytes match no declared case,
10
+ * or whose fields do not parse yields nothing: it is the caller's decision whether that
11
+ * is worth reporting.
12
+ */
13
+ export class FrameParser {
14
+ constructor(mainServices) {
15
+ this.mainServices = mainServices;
16
+ }
17
+ parse(uuid, frame) {
18
+ const parsingModel = this.findParsingModel(uuid);
19
+ if (!parsingModel) {
20
+ return;
21
+ }
22
+ const caseValue = this.readCaseValue(parsingModel, frame);
23
+ const parsingCase = parsingModel.cases?.find(declared => declared.caseValue === caseValue);
24
+ if (!parsingCase) {
25
+ return;
26
+ }
27
+ const parsedData = parseMeasurement(frame, parsingCase);
28
+ if (!parsedData) {
29
+ return;
30
+ }
31
+ return {
32
+ parsingCase,
33
+ measurementTypeKey: parsingCase.measurementTypeKey,
34
+ parsedData: parsedData
35
+ };
36
+ }
37
+ findParsingModel(uuid) {
38
+ for (const mainService of this.mainServices) {
39
+ const characteristic = mainService.monitorUuids.find(monitored => monitored.uuid.toLowerCase() === uuid.toLowerCase());
40
+ if (characteristic) {
41
+ return characteristic.parsingModel;
42
+ }
43
+ }
44
+ return undefined;
45
+ }
46
+ readCaseValue(parsingModel, frame) {
47
+ return parsingModel.caseValuePosition?.map(index => frame[index]).join("") || "";
48
+ }
49
+ }
50
+ //# sourceMappingURL=frame-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseMeasurement","FrameParser","constructor","mainServices","parse","uuid","frame","parsingModel","findParsingModel","caseValue","readCaseValue","parsingCase","cases","find","declared","parsedData","measurementTypeKey","mainService","characteristic","monitorUuids","monitored","toLowerCase","undefined","caseValuePosition","map","index","join"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/frame-parser.ts"],"mappings":";;AAMA,SAASA,gBAAgB,QAAQ,kCAA+B;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,CAAwB;EAC9CC,WAAWA,CAAkBC,YAA2C,EAAE;IAAA,KAA7CA,YAA2C,GAA3CA,YAA2C;EAAG;EAEpEC,KAAKA,CACVC,IAAY,EACZC,KAAe,EAC8B;IAC7C,MAAMC,YAAY,GAAG,IAAI,CAACC,gBAAgB,CAACH,IAAI,CAAC;IAEhD,IAAI,CAACE,YAAY,EAAE;MACjB;IACF;IAEA,MAAME,SAAS,GAAG,IAAI,CAACC,aAAa,CAACH,YAAY,EAAED,KAAK,CAAC;IAEzD,MAAMK,WAAW,GAAGJ,YAAY,CAACK,KAAK,EAAEC,IAAI,CACzCC,QAAQ,IAAKA,QAAQ,CAACL,SAAS,KAAKA,SACvC,CAAC;IAED,IAAI,CAACE,WAAW,EAAE;MAChB;IACF;IAEA,MAAMI,UAAU,GAAGf,gBAAgB,CAACM,KAAK,EAAEK,WAAW,CAAC;IAEvD,IAAI,CAACI,UAAU,EAAE;MACf;IACF;IAEA,OAAO;MACLJ,WAAW;MACXK,kBAAkB,EAAEL,WAAW,CAACK,kBAAkB;MAClDD,UAAU,EAAEA;IACd,CAAC;EACH;EAEQP,gBAAgBA,CAACH,IAAY,EAA4B;IAC/D,KAAK,MAAMY,WAAW,IAAI,IAAI,CAACd,YAAY,EAAE;MAC3C,MAAMe,cAAc,GAAGD,WAAW,CAACE,YAAY,CAACN,IAAI,CACjDO,SAAS,IAAKA,SAAS,CAACf,IAAI,CAACgB,WAAW,CAAC,CAAC,KAAKhB,IAAI,CAACgB,WAAW,CAAC,CACnE,CAAC;MAED,IAAIH,cAAc,EAAE;QAClB,OAAOA,cAAc,CAACX,YAAY;MACpC;IACF;IAEA,OAAOe,SAAS;EAClB;EAEQZ,aAAaA,CAACH,YAA0B,EAAED,KAAe,EAAU;IACzE,OACEC,YAAY,CAACgB,iBAAiB,EAAEC,GAAG,CAAEC,KAAK,IAAKnB,KAAK,CAACmB,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,IACrE,EAAE;EAEN;AACF","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import { CaseType } from "../../types/case-type.js";
4
+ import { DeviceStatus } from "../../types/device-status.js";
5
+ /**
6
+ * Moves a device between measuring and connected as parsed frames arrive, and decides
7
+ * which of them is worth reporting.
8
+ *
9
+ * A result is reported whether or not a stream preceded it, because a device already
10
+ * holding a finished measurement when the app connects has a real reading to hand over.
11
+ * Repeats are suppressed on the case transition rather than on the values, so a second
12
+ * measurement that happens to read the same as the first is still reported.
13
+ */
14
+ export class MeasurementStateMachine {
15
+ isMeasuring = false;
16
+ constructor(callbacks) {
17
+ this.callbacks = callbacks;
18
+ }
19
+ reset = () => {
20
+ this.isMeasuring = false;
21
+ this.lastCaseValue = undefined;
22
+ };
23
+ advance = ({
24
+ parsingCase,
25
+ measurementTypeKey,
26
+ parsedData
27
+ }, frame) => {
28
+ const isResult = parsingCase.caseType === CaseType.RESULT;
29
+ const isRepeatedResult = isResult && parsingCase.caseValue === this.lastCaseValue;
30
+ this.lastCaseValue = parsingCase.caseValue;
31
+ if (parsingCase.caseType === CaseType.STREAM && !this.isMeasuring) {
32
+ this.startMeasuring(measurementTypeKey);
33
+ }
34
+ if (this.isMeasuring && parsingCase.caseType === CaseType.OTHER) {
35
+ this.stopMeasuring(measurementTypeKey);
36
+ }
37
+ if (isRepeatedResult) {
38
+ return;
39
+ }
40
+ let keepMeasuring = false;
41
+ if (this.isMeasuring || isResult) {
42
+ keepMeasuring = this.callbacks.onResult?.(parsedData, frame) ?? false;
43
+ }
44
+ if (isResult && !keepMeasuring) {
45
+ this.stopMeasuring(measurementTypeKey);
46
+ }
47
+ };
48
+ startMeasuring = measurementTypeKey => {
49
+ this.callbacks.onStreamStart?.();
50
+ this.callbacks.onStatusChanged?.(DeviceStatus.MEASURING, measurementTypeKey);
51
+ this.isMeasuring = true;
52
+ };
53
+ stopMeasuring = measurementTypeKey => {
54
+ this.isMeasuring = false;
55
+ this.callbacks.onStatusChanged?.(DeviceStatus.CONNECTED, measurementTypeKey);
56
+ };
57
+ }
58
+ //# sourceMappingURL=measurement-state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CaseType","DeviceStatus","MeasurementStateMachine","isMeasuring","constructor","callbacks","reset","lastCaseValue","undefined","advance","parsingCase","measurementTypeKey","parsedData","frame","isResult","caseType","RESULT","isRepeatedResult","caseValue","STREAM","startMeasuring","OTHER","stopMeasuring","keepMeasuring","onResult","onStreamStart","onStatusChanged","MEASURING","CONNECTED"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/measurement-state-machine.ts"],"mappings":";;AAEA,SAASA,QAAQ,QAAQ,0BAAuB;AAEhD,SAASC,YAAY,QAAQ,8BAA2B;AAexD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,CAAwB;EAClDC,WAAW,GAAY,KAAK;EAGpCC,WAAWA,CAAkBC,SAAoC,EAAE;IAAA,KAAtCA,SAAoC,GAApCA,SAAoC;EAAG;EAE7DC,KAAK,GAAGA,CAAA,KAAY;IACzB,IAAI,CAACH,WAAW,GAAG,KAAK;IACxB,IAAI,CAACI,aAAa,GAAGC,SAAS;EAChC,CAAC;EAEMC,OAAO,GAAGA,CACf;IACEC,WAAW;IACXC,kBAAkB;IAClBC;EAC+B,CAAC,EAClCC,KAAe,KACN;IACT,MAAMC,QAAQ,GAAGJ,WAAW,CAACK,QAAQ,KAAKf,QAAQ,CAACgB,MAAM;IAEzD,MAAMC,gBAAgB,GACpBH,QAAQ,IAAIJ,WAAW,CAACQ,SAAS,KAAK,IAAI,CAACX,aAAa;IAE1D,IAAI,CAACA,aAAa,GAAGG,WAAW,CAACQ,SAAS;IAE1C,IAAIR,WAAW,CAACK,QAAQ,KAAKf,QAAQ,CAACmB,MAAM,IAAI,CAAC,IAAI,CAAChB,WAAW,EAAE;MACjE,IAAI,CAACiB,cAAc,CAACT,kBAAkB,CAAC;IACzC;IAEA,IAAI,IAAI,CAACR,WAAW,IAAIO,WAAW,CAACK,QAAQ,KAAKf,QAAQ,CAACqB,KAAK,EAAE;MAC/D,IAAI,CAACC,aAAa,CAACX,kBAAkB,CAAC;IACxC;IAEA,IAAIM,gBAAgB,EAAE;MACpB;IACF;IAEA,IAAIM,aAAa,GAAG,KAAK;IAEzB,IAAI,IAAI,CAACpB,WAAW,IAAIW,QAAQ,EAAE;MAChCS,aAAa,GAAG,IAAI,CAAClB,SAAS,CAACmB,QAAQ,GAAGZ,UAAU,EAAEC,KAAK,CAAC,IAAI,KAAK;IACvE;IAEA,IAAIC,QAAQ,IAAI,CAACS,aAAa,EAAE;MAC9B,IAAI,CAACD,aAAa,CAACX,kBAAkB,CAAC;IACxC;EACF,CAAC;EAEOS,cAAc,GAAIT,kBAAuC,IAAW;IAC1E,IAAI,CAACN,SAAS,CAACoB,aAAa,GAAG,CAAC;IAChC,IAAI,CAACpB,SAAS,CAACqB,eAAe,GAAGzB,YAAY,CAAC0B,SAAS,EAAEhB,kBAAkB,CAAC;IAC5E,IAAI,CAACR,WAAW,GAAG,IAAI;EACzB,CAAC;EAEOmB,aAAa,GAAIX,kBAAuC,IAAW;IACzE,IAAI,CAACR,WAAW,GAAG,KAAK;IACxB,IAAI,CAACE,SAAS,CAACqB,eAAe,GAC5BzB,YAAY,CAAC2B,SAAS,EACtBjB,kBACF,CAAC;EACH,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=frame-read-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/frame-read-result.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ /** Outcome of trying to read one frame from a notification buffer. */
4
+ export let FrameReadStatus = /*#__PURE__*/function (FrameReadStatus) {
5
+ /** No complete frame yet. The buffer must keep growing. */
6
+ FrameReadStatus["INCOMPLETE"] = "incomplete";
7
+ /** A frame was found but failed its integrity check and must not be parsed. */
8
+ FrameReadStatus["CORRUPT"] = "corrupt";
9
+ /** A complete, verified frame was isolated. */
10
+ FrameReadStatus["COMPLETE"] = "complete";
11
+ return FrameReadStatus;
12
+ }({});
13
+ //# sourceMappingURL=frame-read-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FrameReadStatus"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/frame-read-status.ts"],"mappings":";;AAAA;AACA,WAAYA,eAAe,0BAAfA,eAAe;EAEzB;EAFUA,eAAe;EAKzB;EALUA,eAAe;EAQzB;EARUA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=frame-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/frame-reader.ts"],"mappings":"","ignoreList":[]}