@hangtime/grip-connect 0.10.1 → 0.10.3

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 (111) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/index.d.ts +1 -2
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +1 -3
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/interfaces/callback.interface.d.ts +19 -12
  7. package/dist/cjs/interfaces/callback.interface.d.ts.map +1 -1
  8. package/dist/cjs/interfaces/command.interface.d.ts +14 -6
  9. package/dist/cjs/interfaces/command.interface.d.ts.map +1 -1
  10. package/dist/cjs/interfaces/device/progressor.interface.d.ts +47 -0
  11. package/dist/cjs/interfaces/device/progressor.interface.d.ts.map +1 -1
  12. package/dist/cjs/interfaces/device.interface.d.ts +1 -1
  13. package/dist/cjs/interfaces/download.interface.d.ts +8 -11
  14. package/dist/cjs/interfaces/download.interface.d.ts.map +1 -1
  15. package/dist/cjs/models/device/climbro.model.d.ts.map +1 -1
  16. package/dist/cjs/models/device/climbro.model.js +34 -16
  17. package/dist/cjs/models/device/climbro.model.js.map +1 -1
  18. package/dist/cjs/models/device/entralpi.model.d.ts.map +1 -1
  19. package/dist/cjs/models/device/entralpi.model.js +11 -14
  20. package/dist/cjs/models/device/entralpi.model.js.map +1 -1
  21. package/dist/cjs/models/device/forceboard.model.d.ts.map +1 -1
  22. package/dist/cjs/models/device/forceboard.model.js +12 -17
  23. package/dist/cjs/models/device/forceboard.model.js.map +1 -1
  24. package/dist/cjs/models/device/motherboard.model.d.ts.map +1 -1
  25. package/dist/cjs/models/device/motherboard.model.js +28 -20
  26. package/dist/cjs/models/device/motherboard.model.js.map +1 -1
  27. package/dist/cjs/models/device/pb-700bt.model.d.ts.map +1 -1
  28. package/dist/cjs/models/device/pb-700bt.model.js +11 -14
  29. package/dist/cjs/models/device/pb-700bt.model.js.map +1 -1
  30. package/dist/cjs/models/device/progressor.model.d.ts +52 -5
  31. package/dist/cjs/models/device/progressor.model.d.ts.map +1 -1
  32. package/dist/cjs/models/device/progressor.model.js +211 -57
  33. package/dist/cjs/models/device/progressor.model.js.map +1 -1
  34. package/dist/cjs/models/device/smartboard-pro.model.d.ts.map +1 -1
  35. package/dist/cjs/models/device/smartboard-pro.model.js +11 -16
  36. package/dist/cjs/models/device/smartboard-pro.model.js.map +1 -1
  37. package/dist/cjs/models/device/wh-c06.model.d.ts.map +1 -1
  38. package/dist/cjs/models/device/wh-c06.model.js +11 -14
  39. package/dist/cjs/models/device/wh-c06.model.js.map +1 -1
  40. package/dist/cjs/models/device.model.d.ts +64 -3
  41. package/dist/cjs/models/device.model.d.ts.map +1 -1
  42. package/dist/cjs/models/device.model.js +142 -37
  43. package/dist/cjs/models/device.model.js.map +1 -1
  44. package/dist/cjs/utils.d.ts +1 -1
  45. package/dist/cjs/utils.d.ts.map +1 -1
  46. package/dist/cjs/utils.js +29 -6
  47. package/dist/cjs/utils.js.map +1 -1
  48. package/dist/index.d.ts +1 -2
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +0 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/interfaces/callback.interface.d.ts +19 -12
  53. package/dist/interfaces/callback.interface.d.ts.map +1 -1
  54. package/dist/interfaces/command.interface.d.ts +14 -6
  55. package/dist/interfaces/command.interface.d.ts.map +1 -1
  56. package/dist/interfaces/device/progressor.interface.d.ts +47 -0
  57. package/dist/interfaces/device/progressor.interface.d.ts.map +1 -1
  58. package/dist/interfaces/device.interface.d.ts +1 -1
  59. package/dist/interfaces/download.interface.d.ts +8 -11
  60. package/dist/interfaces/download.interface.d.ts.map +1 -1
  61. package/dist/models/device/climbro.model.d.ts.map +1 -1
  62. package/dist/models/device/climbro.model.js +34 -16
  63. package/dist/models/device/climbro.model.js.map +1 -1
  64. package/dist/models/device/entralpi.model.d.ts.map +1 -1
  65. package/dist/models/device/entralpi.model.js +11 -14
  66. package/dist/models/device/entralpi.model.js.map +1 -1
  67. package/dist/models/device/forceboard.model.d.ts.map +1 -1
  68. package/dist/models/device/forceboard.model.js +12 -17
  69. package/dist/models/device/forceboard.model.js.map +1 -1
  70. package/dist/models/device/motherboard.model.d.ts.map +1 -1
  71. package/dist/models/device/motherboard.model.js +28 -20
  72. package/dist/models/device/motherboard.model.js.map +1 -1
  73. package/dist/models/device/pb-700bt.model.d.ts.map +1 -1
  74. package/dist/models/device/pb-700bt.model.js +11 -14
  75. package/dist/models/device/pb-700bt.model.js.map +1 -1
  76. package/dist/models/device/progressor.model.d.ts +52 -5
  77. package/dist/models/device/progressor.model.d.ts.map +1 -1
  78. package/dist/models/device/progressor.model.js +210 -57
  79. package/dist/models/device/progressor.model.js.map +1 -1
  80. package/dist/models/device/smartboard-pro.model.d.ts.map +1 -1
  81. package/dist/models/device/smartboard-pro.model.js +11 -16
  82. package/dist/models/device/smartboard-pro.model.js.map +1 -1
  83. package/dist/models/device/wh-c06.model.d.ts.map +1 -1
  84. package/dist/models/device/wh-c06.model.js +11 -14
  85. package/dist/models/device/wh-c06.model.js.map +1 -1
  86. package/dist/models/device.model.d.ts +64 -3
  87. package/dist/models/device.model.d.ts.map +1 -1
  88. package/dist/models/device.model.js +146 -37
  89. package/dist/models/device.model.js.map +1 -1
  90. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  91. package/dist/utils.d.ts +1 -1
  92. package/dist/utils.d.ts.map +1 -1
  93. package/dist/utils.js +29 -6
  94. package/dist/utils.js.map +1 -1
  95. package/package.json +1 -1
  96. package/src/index.ts +0 -3
  97. package/src/interfaces/callback.interface.ts +21 -12
  98. package/src/interfaces/command.interface.ts +16 -6
  99. package/src/interfaces/device/progressor.interface.ts +56 -0
  100. package/src/interfaces/device.interface.ts +1 -1
  101. package/src/interfaces/download.interface.ts +9 -11
  102. package/src/models/device/climbro.model.ts +38 -20
  103. package/src/models/device/entralpi.model.ts +15 -17
  104. package/src/models/device/forceboard.model.ts +15 -19
  105. package/src/models/device/motherboard.model.ts +38 -26
  106. package/src/models/device/pb-700bt.model.ts +14 -16
  107. package/src/models/device/progressor.model.ts +227 -58
  108. package/src/models/device/smartboard-pro.model.ts +14 -19
  109. package/src/models/device/wh-c06.model.ts +14 -17
  110. package/src/models/device.model.ts +181 -41
  111. package/src/utils.ts +31 -6
@@ -11,32 +11,68 @@ var ProgressorResponses;
11
11
  * Response received after sending a command to the device.
12
12
  * This could include acknowledgment or specific data related to the command sent.
13
13
  */
14
- ProgressorResponses[ProgressorResponses["COMMAND_RESPONSE"] = 0] = "COMMAND_RESPONSE";
14
+ ProgressorResponses[ProgressorResponses["RESPONSE_COMMAND"] = 0] = "RESPONSE_COMMAND";
15
15
  /**
16
16
  * Data representing a weight measurement from the device.
17
17
  * Typically used for tracking load or force applied.
18
18
  */
19
- ProgressorResponses[ProgressorResponses["WEIGHT_MEASURE"] = 1] = "WEIGHT_MEASURE";
19
+ ProgressorResponses[ProgressorResponses["RESPONSE_WEIGHT_MEASUREMENT"] = 1] = "RESPONSE_WEIGHT_MEASUREMENT";
20
20
  /**
21
21
  * Peak rate of force development (RFD) measurement.
22
22
  * This measures how quickly the force is applied over time.
23
23
  */
24
- ProgressorResponses[ProgressorResponses["PEAK_RFD_MEAS"] = 2] = "PEAK_RFD_MEAS";
24
+ ProgressorResponses[ProgressorResponses["RESPONSE_RFD_PEAK"] = 2] = "RESPONSE_RFD_PEAK";
25
25
  /**
26
26
  * Series of peak rate of force development (RFD) measurements.
27
27
  * This could be used for analyzing force trends over multiple data points.
28
28
  */
29
- ProgressorResponses[ProgressorResponses["PEAK_RFD_MEAS_SERIES"] = 3] = "PEAK_RFD_MEAS_SERIES";
29
+ ProgressorResponses[ProgressorResponses["RESPONSE_RFD_PEAK_SERIES"] = 3] = "RESPONSE_RFD_PEAK_SERIES";
30
30
  /**
31
31
  * Low battery warning from the device.
32
32
  * Indicates that the battery level is below a critical threshold.
33
33
  */
34
- ProgressorResponses[ProgressorResponses["LOW_BATTERY_WARNING"] = 4] = "LOW_BATTERY_WARNING";
34
+ ProgressorResponses[ProgressorResponses["RESPONSE_LOW_PWR_WARNING"] = 4] = "RESPONSE_LOW_PWR_WARNING";
35
35
  })(ProgressorResponses || (ProgressorResponses = {}));
36
36
  /**
37
37
  * Represents a Tindeq Progressor device.
38
38
  * {@link https://tindeq.com}
39
39
  */
40
+ /** One second in microseconds (device timestamp unit). Used for Hz = samples in last 1s. */
41
+ const ONE_SECOND_US = 1000000;
42
+ /**
43
+ * Format bytes as hex string.
44
+ * @param payload - Bytes to format
45
+ * @param separator - String between bytes (default " ")
46
+ */
47
+ function toHex(payload, separator = " ") {
48
+ return Array.from(payload)
49
+ .map((b) => b.toString(16).padStart(2, "0"))
50
+ .join(separator);
51
+ }
52
+ /**
53
+ * Parse ProgressorId response: u64 little-endian, device may omit trailing zero bytes.
54
+ * Format as hex string MSB-first to match the official app.
55
+ */
56
+ function parseProgressorIdPayload(payload) {
57
+ if (payload.length === 0)
58
+ return "";
59
+ const reversed = Uint8Array.from(payload);
60
+ reversed.reverse();
61
+ return toHex(reversed, "").toUpperCase();
62
+ }
63
+ /**
64
+ * Parse calibration curve: 12 opaque bytes (CalibrationCurve = [u8; 12]).
65
+ * Progressor two-point calibration stores two raw ADC readings (zero + reference)
66
+ * and a third value (version/reserved). Exact layout is device-specific.
67
+ */
68
+ function parseCalibrationCurvePayload(payload) {
69
+ const hex = toHex(payload);
70
+ if (payload.length !== 12)
71
+ return hex;
72
+ const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
73
+ const [v0, v1, v2] = [0, 4, 8].map((o) => view.getUint32(o, true));
74
+ return `${hex} — zero-point: ${v1.toLocaleString()} | ref-point: ${v0.toLocaleString()} | version: ${v2} (0x${v2.toString(16)})`;
75
+ }
40
76
  class Progressor extends device_model_js_1.Device {
41
77
  constructor() {
42
78
  super({
@@ -72,43 +108,132 @@ class Progressor extends device_model_js_1.Device {
72
108
  ],
73
109
  },
74
110
  ],
111
+ // Tindeq API: opcode = single byte (ASCII char code = decimal 100–114;)
75
112
  commands: {
76
- TARE_SCALE: "d", // 0x64
77
- START_WEIGHT_MEAS: "e", // 0x65
78
- STOP_WEIGHT_MEAS: "f", // 0x66
79
- START_PEAK_RFD_MEAS: "g", // 0x67
80
- START_PEAK_RFD_MEAS_SERIES: "h", // 0x68
81
- ADD_CALIB_POINT: "i", // 0x69
82
- SAVE_CALIB: "j", // 0x6a
83
- GET_FW_VERSION: "k", // 0x6b
84
- GET_ERR_INFO: "l", // 0x6c
85
- CLR_ERR_INFO: "m", // 0x6d
86
- SLEEP: "n", // 0x6e
87
- GET_BATT_VLTG: "o", // 0x6f
113
+ TARE_SCALE: "d", // 100 (0x64)
114
+ START_WEIGHT_MEAS: "e", // 101 (0x65)
115
+ STOP_WEIGHT_MEAS: "f", // 102 (0x66)
116
+ START_PEAK_RFD_MEAS: "g", // 103 (0x67)
117
+ START_PEAK_RFD_MEAS_SERIES: "h", // 104 (0x68)
118
+ ADD_CALIBRATION_POINT: "i", // 105 (0x69)
119
+ SAVE_CALIBRATION: "j", // 106 (0x6a)
120
+ GET_FIRMWARE_VERSION: "k", // 107 (0x6b)
121
+ GET_ERROR_INFORMATION: "l", // 108 (0x6c)
122
+ CLR_ERROR_INFORMATION: "m", // 109 (0x6d)
123
+ SLEEP: "n", // 110 (0x6e)
124
+ GET_BATTERY_VOLTAGE: "o", // 111 (0x6f)
125
+ GET_PROGRESSOR_ID: "p", // 112 (0x70)
126
+ RESET_CALIBRATION: "q", // 113 (0x71)
127
+ GET_CALIBRATION: "r", // 114 (0x72)
88
128
  },
89
129
  });
130
+ /** Device timestamps (µs) of recent samples (samples in last 1s device time). */
131
+ this.recentSampleTimestamps = [];
90
132
  /**
91
133
  * Retrieves battery or voltage information from the device.
92
134
  * @returns {Promise<string | undefined>} A Promise that resolves with the battery or voltage information,
93
135
  */
94
136
  this.battery = async () => {
95
137
  let response = undefined;
96
- await this.write("progressor", "tx", this.commands.GET_BATT_VLTG, 250, (data) => {
138
+ await this.write("progressor", "tx", this.commands.GET_BATTERY_VOLTAGE, 250, (data) => {
97
139
  response = data;
98
140
  });
99
141
  return response;
100
142
  };
101
143
  /**
102
- * Retrieves firmware version from the device.
144
+ * Retrieves firmware version from the device (GetAppVersion, opcode 0x6B).
103
145
  * @returns {Promise<string>} A Promise that resolves with the firmware version,
104
146
  */
105
147
  this.firmware = async () => {
106
148
  let response = undefined;
107
- await this.write("progressor", "tx", this.commands.GET_FW_VERSION, 250, (data) => {
149
+ await this.write("progressor", "tx", this.commands.GET_FIRMWARE_VERSION, 250, (data) => {
150
+ response = data;
151
+ });
152
+ return response;
153
+ };
154
+ /**
155
+ * Retrieves the Progressor ID from the device (opcode 0x70).
156
+ * @returns {Promise<string>} A Promise that resolves with the raw response (hex of payload).
157
+ */
158
+ this.progressorId = async () => {
159
+ let response = undefined;
160
+ await this.write("progressor", "tx", this.commands.GET_PROGRESSOR_ID, 250, (data) => {
161
+ response = data;
162
+ });
163
+ return response;
164
+ };
165
+ /**
166
+ * Retrieves calibration values from the device.
167
+ * @returns {Promise<string>} A Promise that resolves with the raw response (hex of payload).
168
+ */
169
+ this.calibration = async () => {
170
+ let response = undefined;
171
+ await this.write("progressor", "tx", this.commands.GET_CALIBRATION, 250, (data) => {
172
+ response = data;
173
+ });
174
+ return response;
175
+ };
176
+ /**
177
+ * Saves the current calibration to the device. Call after adding both calibration points.
178
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
179
+ */
180
+ this.saveCalibration = async () => {
181
+ await this.write("progressor", "tx", this.commands.SAVE_CALIBRATION, 0);
182
+ };
183
+ /**
184
+ * Resets the calibration to default values of the device.
185
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
186
+ */
187
+ this.resetCalibration = async () => {
188
+ await this.write("progressor", "tx", this.commands.RESET_CALIBRATION, 0);
189
+ };
190
+ /**
191
+ * Adds a calibration point: 0x69 + 32-bit float (weight in kg), 5 bytes to the control characteristic.
192
+ * Use for two-point calibration: (1) zero weight — addCalibrationPoint(0); (2) known weight — addCalibrationPoint(knownKg).
193
+ * Order can be either way; writing zero first is recommended (hysteresis). Then call saveCalibration().
194
+ * @param {number} weightKg - Weight in kg (use 0 for zero point, or known reference weight &lt; 150 kg).
195
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
196
+ */
197
+ this.addCalibrationPoint = async (weightKg) => {
198
+ const payload = new Uint8Array(5);
199
+ payload[0] = this.commands.ADD_CALIBRATION_POINT.charCodeAt(0); // 0x69
200
+ new DataView(payload.buffer).setFloat32(1, weightKg, true);
201
+ await this.write("progressor", "tx", payload, 0);
202
+ };
203
+ /**
204
+ * Sends the device tare command to zero the scale (hardware tare).
205
+ * For software tare over a duration, use the base tare(duration) method.
206
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
207
+ */
208
+ this.tareScale = async () => {
209
+ await this.write("progressor", "tx", this.commands.TARE_SCALE, 0);
210
+ };
211
+ /**
212
+ * Puts the device to sleep / shutdown.
213
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
214
+ */
215
+ this.sleep = async () => {
216
+ const cmd = this.commands.SLEEP;
217
+ await this.write("progressor", "tx", typeof cmd === "string" ? cmd : String(cmd), 0);
218
+ };
219
+ /**
220
+ * Retrieves error information from the device.
221
+ * @returns {Promise<string | undefined>} A Promise that resolves with the error info text.
222
+ */
223
+ this.errorInfo = async () => {
224
+ let response = undefined;
225
+ await this.write("progressor", "tx", this.commands.GET_ERROR_INFORMATION, 250, (data) => {
108
226
  response = data;
109
227
  });
110
228
  return response;
111
229
  };
230
+ /**
231
+ * Clears error information on the device.
232
+ * @returns {Promise<void>} A Promise that resolves when the command is sent.
233
+ */
234
+ this.clearErrorInfo = async () => {
235
+ await this.write("progressor", "tx", this.commands.CLR_ERROR_INFORMATION, 0);
236
+ };
112
237
  /**
113
238
  * Handles data received from the device, processes weight measurements,
114
239
  * and updates mass data including maximum and average values.
@@ -117,6 +242,7 @@ class Progressor extends device_model_js_1.Device {
117
242
  * @param {DataView} value - The notification event.
118
243
  */
119
244
  this.handleNotifications = (value) => {
245
+ var _a;
120
246
  if (value) {
121
247
  // Update timestamp
122
248
  this.updateTimestamp();
@@ -125,61 +251,82 @@ class Progressor extends device_model_js_1.Device {
125
251
  // Read the first byte of the buffer to determine the kind of message
126
252
  const kind = value.getInt8(0);
127
253
  // Check if the message is a weight measurement
128
- if (kind === ProgressorResponses.WEIGHT_MEASURE) {
129
- // Start parsing data from the 3rd byte (index 2)
130
- let offset = 2;
131
- // Continue parsing while there's data left in the buffer
132
- while (offset < value.byteLength) {
133
- // Read a 32-bit float (4 bytes) for the weight, using little-endian
254
+ if (kind === ProgressorResponses.RESPONSE_WEIGHT_MEASUREMENT) {
255
+ // Payload = bytes from index 2 (skip byte 0 = message type, byte 1 = reserved/length)
256
+ const payloadLength = value.byteLength - 2;
257
+ if (payloadLength % 8 !== 0)
258
+ return;
259
+ const samplesPerPacket = payloadLength / 8;
260
+ this.currentSamplesPerPacket = samplesPerPacket;
261
+ this.recordPacketReceived();
262
+ // for (i = 0; i < samplesPerPacket; i++) { offset = i*8; weight = getFloat32(offset); timestampUs = getUint32(offset+4); }
263
+ for (let i = 0; i < samplesPerPacket; i++) {
264
+ const offset = 2 + i * 8;
134
265
  const weight = value.getFloat32(offset, true);
135
- // Move the offset by 4 bytes
136
- offset += 4;
137
- // Read a 32-bit integer (4 bytes) for the seconds, using little-endian
138
- const seconds = value.getInt32(offset, true);
139
- // Move the offset by 4 bytes
140
- offset += 4;
141
- // Check if both weight and seconds are valid numbers
142
- if (!isNaN(weight) && !isNaN(seconds)) {
143
- // Tare correction
266
+ const timestampUs = value.getUint32(offset + 4, true);
267
+ if (!isNaN(weight)) {
144
268
  const numericData = weight - this.applyTare(weight);
145
- // Add data to downloadable Array
146
- this.downloadPackets.push({
147
- received: receivedTime,
148
- sampleNum: seconds,
149
- battRaw: 0,
150
- samples: [weight],
151
- masses: [numericData],
152
- });
153
- // Check for max weight
154
- this.peak = Math.max(this.peak, Number(numericData));
155
- // Update running sum and count
156
269
  const currentMassTotal = Math.max(-1000, Number(numericData));
270
+ // Update session stats before building packet
271
+ this.peak = Math.max(this.peak, Number(numericData));
272
+ this.min = Math.min(this.min, Math.max(-1000, Number(numericData)));
157
273
  this.sum += currentMassTotal;
158
274
  this.dataPointCount++;
159
- // Calculate the average dynamically
160
275
  this.mean = this.sum / this.dataPointCount;
161
- // Check if device is being used
276
+ this.downloadPackets.push(this.buildDownloadPacket(currentMassTotal, [weight], {
277
+ timestamp: receivedTime,
278
+ sampleIndex: timestampUs,
279
+ }));
162
280
  this.activityCheck(numericData);
163
- this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
281
+ // Hz from device timestamps: keep only samples in last 1s
282
+ this.recentSampleTimestamps.push(timestampUs);
283
+ const latestUs = (_a = this.recentSampleTimestamps[this.recentSampleTimestamps.length - 1]) !== null && _a !== void 0 ? _a : 0;
284
+ this.recentSampleTimestamps = this.recentSampleTimestamps.filter((ts) => latestUs - ts <= ONE_SECOND_US);
285
+ const samplingRateHz = this.recentSampleTimestamps.length;
286
+ const payload = this.buildForceMeasurement(currentMassTotal);
287
+ if (payload.performance)
288
+ payload.performance.samplingRateHz = samplingRateHz;
289
+ this.notifyCallback(payload);
164
290
  }
165
291
  }
166
292
  }
167
- else if (kind === ProgressorResponses.COMMAND_RESPONSE) {
293
+ // Command response
294
+ else if (kind === ProgressorResponses.RESPONSE_COMMAND) {
168
295
  if (!this.writeLast)
169
296
  return;
170
297
  let output = "";
171
- if (this.writeLast === this.commands.GET_BATT_VLTG) {
298
+ const payload = new Uint8Array(value.buffer).slice(2);
299
+ if (this.writeLast === this.commands.GET_BATTERY_VOLTAGE) {
172
300
  output = new DataView(value.buffer, 2).getUint32(0, true).toString();
173
301
  }
174
- else if (this.writeLast === this.commands.GET_FW_VERSION) {
175
- output = new TextDecoder().decode(new Uint8Array(value.buffer).slice(2));
302
+ else if (this.writeLast === this.commands.GET_FIRMWARE_VERSION) {
303
+ output = new TextDecoder().decode(payload);
304
+ }
305
+ else if (this.writeLast === this.commands.GET_ERROR_INFORMATION) {
306
+ output = new TextDecoder().decode(payload);
307
+ }
308
+ else if (this.writeLast === this.commands.GET_PROGRESSOR_ID) {
309
+ output = parseProgressorIdPayload(payload);
176
310
  }
177
- else if (this.writeLast === this.commands.GET_ERR_INFO) {
178
- output = new TextDecoder().decode(new Uint8Array(value.buffer.slice(2)));
311
+ else if (this.writeLast === this.commands.GET_CALIBRATION) {
312
+ output = parseCalibrationCurvePayload(payload);
313
+ }
314
+ else {
315
+ // Unknown command response: return raw hex
316
+ output = toHex(payload);
179
317
  }
180
318
  this.writeCallback(output);
181
319
  }
182
- else if (kind === ProgressorResponses.LOW_BATTERY_WARNING) {
320
+ // RFD peak response
321
+ else if (kind === ProgressorResponses.RESPONSE_RFD_PEAK) {
322
+ console.warn("⚠️ RFD peak is currently unsupported.");
323
+ }
324
+ // RFD peak series response
325
+ else if (kind === ProgressorResponses.RESPONSE_RFD_PEAK_SERIES) {
326
+ console.warn("⚠️ RFD peak series is currently unsupported.");
327
+ }
328
+ // Low power warning response
329
+ else if (kind === ProgressorResponses.RESPONSE_LOW_PWR_WARNING) {
183
330
  console.warn("⚠️ Low power detected. Please consider connecting to a power source.");
184
331
  }
185
332
  else {
@@ -201,8 +348,15 @@ class Progressor extends device_model_js_1.Device {
201
348
  * @returns {Promise<void>} A promise that resolves when the streaming operation is completed.
202
349
  */
203
350
  this.stream = async (duration = 0) => {
204
- // Reset download packets
351
+ // Reset download packets and session stats for fresh measurement
205
352
  this.downloadPackets.length = 0;
353
+ this.peak = Number.NEGATIVE_INFINITY;
354
+ this.mean = 0;
355
+ this.sum = 0;
356
+ this.dataPointCount = 0;
357
+ this.min = Number.POSITIVE_INFINITY;
358
+ this.resetPacketTracking();
359
+ this.recentSampleTimestamps = [];
206
360
  // Start streaming data
207
361
  await this.write("progressor", "tx", this.commands.START_WEIGHT_MEAS, duration);
208
362
  // Stop streaming if duration is set
@@ -1 +1 @@
1
- {"version":3,"file":"progressor.model.js","sourceRoot":"","sources":["../../../../src/models/device/progressor.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progressor.model.js","sourceRoot":"","sources":["../../../../src/models/device/progressor.model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"smartboard-pro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/smartboard-pro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAA;AAEzF;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAO,YAAW,cAAc;;IA6CjE;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CA0DrD;CACF"}
1
+ {"version":3,"file":"smartboard-pro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/smartboard-pro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAA;AAEzF;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAO,YAAW,cAAc;;IA6CjE;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAqDrD;CACF"}
@@ -59,7 +59,6 @@ class SmartBoardPro extends device_model_js_1.Device {
59
59
  */
60
60
  this.handleNotifications = (value) => {
61
61
  if (value) {
62
- // Update timestamp
63
62
  this.updateTimestamp();
64
63
  if (value.buffer) {
65
64
  const length = value.byteLength / 2;
@@ -68,40 +67,36 @@ class SmartBoardPro extends device_model_js_1.Device {
68
67
  const offset = i * 2;
69
68
  if (offset + 1 < value.byteLength) {
70
69
  const intValue = value.getInt16(offset, true);
71
- // For debugging purposes
72
70
  console.log(intValue);
73
71
  dataArray.push(intValue);
74
72
  }
75
73
  }
76
74
  if (dataArray.length === 0)
77
75
  return;
76
+ this.currentSamplesPerPacket = dataArray.length;
77
+ this.recordPacketReceived();
78
78
  const receivedTime = Date.now();
79
- // Process each data point
80
79
  for (const receivedData of dataArray) {
81
80
  // Skip invalid values
82
81
  if (!Number.isFinite(receivedData))
83
82
  continue;
84
83
  const numericData = receivedData - this.applyTare(receivedData);
85
- // Add data to downloadable Array
86
- this.downloadPackets.push({
87
- received: receivedTime,
88
- sampleNum: this.dataPointCount,
89
- battRaw: 0,
90
- samples: [numericData],
91
- masses: [numericData],
92
- });
93
- // Update peak
94
- this.peak = Math.max(this.peak, numericData);
95
- // Update running sum and count
96
84
  const currentMassTotal = Math.max(-1000, numericData);
85
+ // Update session stats before building packet
86
+ this.peak = Math.max(this.peak, numericData);
87
+ this.min = Math.min(this.min, Math.max(-1000, numericData));
97
88
  this.sum += currentMassTotal;
98
89
  this.dataPointCount++;
99
- // Calculate the average dynamically
100
90
  this.mean = this.sum / this.dataPointCount;
91
+ // Add data to downloadable Array
92
+ this.downloadPackets.push(this.buildDownloadPacket(currentMassTotal, [numericData], {
93
+ timestamp: receivedTime,
94
+ sampleIndex: this.dataPointCount,
95
+ }));
101
96
  // Check if device is being used
102
97
  this.activityCheck(numericData);
103
98
  // Notify with weight data
104
- this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
99
+ this.notifyCallback(this.buildForceMeasurement(currentMassTotal));
105
100
  }
106
101
  }
107
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"smartboard-pro.model.js","sourceRoot":"","sources":["../../../../src/models/device/smartboard-pro.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smartboard-pro.model.js","sourceRoot":"","sources":["../../../../src/models/device/smartboard-pro.model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wh-c06.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AAEzE;;;;;GAKG;AACH,qBAAa,KAAM,SAAQ,MAAO,YAAW,MAAM;IACjD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAa;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IAEpD;;;;OAIG;IACH,OAAO,CAAC,oBAAoB,CAA6C;IAEzE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAa;;IA0BtD;;;;OAIG;IACM,OAAO,GACd,YAAW,MAAM,IAAkD,EACnE,UAAS,CAAC,KAAK,EAAE,KAAK,KAAK,IAAsC,KAChE,OAAO,CAAC,IAAI,CAAC,CAiFf;IAED;;;;OAIG;IACM,WAAW,QAAO,OAAO,CAEjC;IAED;;OAEG;IACH,OAAO,CAAC,yBAAyB,CAkBhC;CACF"}
1
+ {"version":3,"file":"wh-c06.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AAEzE;;;;;GAKG;AACH,qBAAa,KAAM,SAAQ,MAAO,YAAW,MAAM;IACjD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAa;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IAEpD;;;;OAIG;IACH,OAAO,CAAC,oBAAoB,CAA6C;IAEzE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAa;;IA0BtD;;;;OAIG;IACM,OAAO,GACd,YAAW,MAAM,IAAkD,EACnE,UAAS,CAAC,KAAK,EAAE,KAAK,KAAK,IAAsC,KAChE,OAAO,CAAC,IAAI,CAAC,CA8Ef;IAED;;;;OAIG;IACM,WAAW,QAAO,OAAO,CAEjC;IAED;;OAEG;IACH,OAAO,CAAC,yBAAyB,CAkBhC;CACF"}
@@ -68,33 +68,30 @@ class WHC06 extends device_model_js_1.Device {
68
68
  this.bluetooth.addEventListener("advertisementreceived", (event) => {
69
69
  const data = event.manufacturerData.get(WHC06.manufacturerId);
70
70
  if (data) {
71
- // Handle recieved data
71
+ this.currentSamplesPerPacket = 1;
72
+ this.recordPacketReceived();
72
73
  const weight = (data.getUint8(WHC06.weightOffset) << 8) | data.getUint8(WHC06.weightOffset + 1);
73
74
  // const stable = (data.getUint8(STABLE_OFFSET) & 0xf0) >> 4
74
75
  // const unit = data.getUint8(STABLE_OFFSET) & 0x0f
75
76
  const receivedTime = Date.now();
76
77
  const receivedData = weight / 100;
77
78
  const numericData = receivedData - this.applyTare(receivedData) * -1;
78
- // Add data to downloadable Array
79
- this.downloadPackets.push({
80
- received: receivedTime,
81
- sampleNum: this.dataPointCount,
82
- battRaw: 0,
83
- samples: [numericData],
84
- masses: [numericData],
85
- });
86
- // Update peak
87
- this.peak = Math.max(this.peak, numericData);
88
- // Update running sum and count
89
79
  const currentMassTotal = Math.max(-1000, numericData);
80
+ // Update session stats before building packet
81
+ this.peak = Math.max(this.peak, numericData);
82
+ this.min = Math.min(this.min, Math.max(-1000, numericData));
90
83
  this.sum += currentMassTotal;
91
84
  this.dataPointCount++;
92
- // Calculate the average dynamically
93
85
  this.mean = this.sum / this.dataPointCount;
86
+ // Add data to downloadable Array
87
+ this.downloadPackets.push(this.buildDownloadPacket(currentMassTotal, [numericData], {
88
+ timestamp: receivedTime,
89
+ sampleIndex: this.dataPointCount,
90
+ }));
94
91
  // Check if device is being used
95
92
  this.activityCheck(numericData);
96
93
  // Notify with weight data
97
- this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
94
+ this.notifyCallback(this.buildForceMeasurement(currentMassTotal));
98
95
  }
99
96
  // Reset "still advertising" counter
100
97
  this.resetAdvertisementTimeout();
@@ -1 +1 @@
1
- {"version":3,"file":"wh-c06.model.js","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wh-c06.model.js","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":"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"}