@hangtime/grip-connect 0.10.2 → 0.10.4

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.
@@ -92,5 +92,9 @@ export interface Commands {
92
92
  * Get the Progressor ID.
93
93
  */
94
94
  GET_PROGRESSOR_ID?: string;
95
+ /**
96
+ * Set calibration curve (3× u32 LE). Payload at offsets +2,+6,+10.
97
+ */
98
+ SET_CALIBRATION?: string;
95
99
  }
96
100
  //# sourceMappingURL=command.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/command.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAGvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAInB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAIzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAEnC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B"}
1
+ {"version":3,"file":"command.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/command.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAGvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAInB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAIzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAEnC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB"}
@@ -20,13 +20,13 @@ export interface IProgressor extends IDevice {
20
20
  progressorId(): Promise<string | undefined>;
21
21
  /**
22
22
  * Retrieves calibration curve from the device (opcode 0x72). Payload is 12 opaque bytes;
23
- * parsed for display as zero-point, ref-point, and version (3× uint32 LE) plus hex.
24
- * @returns {Promise<string | undefined>} A Promise that resolves with a display string (e.g. "hex — zero-point: X | ref-point: Y | version: Z").
23
+ * parsed for display as hex plus 3× uint32 LE.
24
+ * @returns {Promise<string | undefined>} A Promise that resolves with a display string (e.g. "hex — 1: X | 2: Y | 3: Z").
25
25
  */
26
26
  calibration(): Promise<string | undefined>;
27
27
  /**
28
- * Saves the current calibration settings to the device.
29
- * @returns {Promise<void>} A Promise that resolves when the command is sent.
28
+ * Computes calibration curve from stored points and saves to flash.
29
+ * Call after addCalibrationPoint() for zero and reference. Normal flow: i → i → j.
30
30
  */
31
31
  saveCalibration(): Promise<void>;
32
32
  /**
@@ -34,6 +34,12 @@ export interface IProgressor extends IDevice {
34
34
  * @returns {Promise<void>} A Promise that resolves when the command is sent.
35
35
  */
36
36
  sleep(): Promise<void>;
37
+ /**
38
+ * Set a new calibration curve.
39
+ * @warning Expert only. This will overwrite the current calibration curve.
40
+ * @param curve - The 12-byte calibration curve to set.
41
+ */
42
+ setCalibration(curve: Uint8Array): Promise<void>;
37
43
  /**
38
44
  * Retrieves error information from the device.
39
45
  * @returns {Promise<string | undefined>} A Promise that resolves with the error info text.
@@ -56,10 +62,10 @@ export interface IProgressor extends IDevice {
56
62
  */
57
63
  stream(duration?: number): Promise<void>;
58
64
  /**
59
- * Adds a calibration point. Use 0 for zero point, then known weight; then saveCalibration().
60
- * @param weightKg - Weight in kg (0 or known reference &lt; 150 kg).
65
+ * Adds a calibration point by capturing the current live ADC reading.
66
+ * Call with no load for zero point, then with known weight; then saveCalibration().
61
67
  */
62
- addCalibrationPoint(weightKg: number): Promise<void>;
68
+ addCalibrationPoint(): Promise<void>;
63
69
  /**
64
70
  * Sends the device tare command to zero the scale (hardware tare).
65
71
  * For software tare over a duration, use the base tare(duration) method.
@@ -1 +1 @@
1
- {"version":3,"file":"progressor.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/progressor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEtC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEvC;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE3C;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE1C;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAExC;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAErB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpD;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B"}
1
+ {"version":3,"file":"progressor.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/progressor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEtC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEvC;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE3C;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE1C;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAExC;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAErB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpC;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B"}
@@ -25,18 +25,48 @@ export declare class Progressor extends Device implements IProgressor {
25
25
  */
26
26
  calibration: () => Promise<string | undefined>;
27
27
  /**
28
- * Saves the current calibration to the device. Call after adding both calibration points.
28
+ * Computes calibration curve from stored points and saves to flash (opcode 0x6A).
29
+ * Requires addCalibrationPoint() for zero and reference. Normal flow: i → i → j.
29
30
  * @returns {Promise<void>} A Promise that resolves when the command is sent.
30
31
  */
31
32
  saveCalibration: () => Promise<void>;
32
33
  /**
33
- * Adds a calibration point: 0x69 + 32-bit float (weight in kg), 5 bytes to the control characteristic.
34
- * Use for two-point calibration: (1) zero weight — addCalibrationPoint(0); (2) known weight — addCalibrationPoint(knownKg).
35
- * Order can be either way; writing zero first is recommended (hysteresis). Then call saveCalibration().
36
- * @param {number} weightKg - Weight in kg (use 0 for zero point, or known reference weight &lt; 150 kg).
37
- * @returns {Promise<void>} A Promise that resolves when the command is sent.
34
+ * Opcode 0x71 ('q'): write calibration curve directly (raw overwrite).
35
+ *
36
+ * Payload layout (14 bytes):
37
+ * - [0] opcode ('q' = 0x71)
38
+ * - [1] reserved (ignored by firmware)
39
+ * - [2..13] 12-byte calibration curve (3× u32 LE read at offsets +2, +6, +10)
40
+ *
41
+ * Notes:
42
+ * - This command does not compute anything; it overwrites stored calibration data.
43
+ * - Sending only the opcode (no 12-byte curve) is not a supported "reset" mode.
44
+ *
45
+ * @param curve - Raw 12-byte calibration curve (required).
46
+ * @returns Promise that resolves when the command is sent.
47
+ */
48
+ setCalibration: (curve: Uint8Array) => Promise<void>;
49
+ /**
50
+ * Captures a calibration point from the *current live measurement*.
51
+ *
52
+ * Command: 0x69 ('i') written to the control characteristic.
53
+ *
54
+ * The firmware does **not** parse a float payload for this command. It simply snapshots the
55
+ * current raw ADC/force reading and stores it as the next calibration point (typically
56
+ * used as the zero point and the reference point for two-point calibration).
57
+ *
58
+ * Typical two-point calibration flow:
59
+ * 1) Ensure the device is stable with **no load** attached → send addCalibrationPoint() (zero point)
60
+ * 2) Attach a **known weight** and wait until stable → send addCalibrationPoint() (reference point)
61
+ * 3) Call saveCalibration() ('j') to compute + persist the curve
62
+ *
63
+ * Notes:
64
+ * - Order usually doesn’t matter, but capturing the zero point first is common practice.
65
+ * - Any extra payload bytes are ignored by the firmware for this command.
66
+ *
67
+ * @returns {Promise<void>} Resolves when the command is sent.
38
68
  */
39
- addCalibrationPoint: (weightKg: number) => Promise<void>;
69
+ addCalibrationPoint: () => Promise<void>;
40
70
  /**
41
71
  * Sends the device tare command to zero the scale (hardware tare).
42
72
  * For software tare over a duration, use the base tare(duration) method.
@@ -1 +1 @@
1
- {"version":3,"file":"progressor.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/progressor.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAkFlF,qBAAa,UAAW,SAAQ,MAAO,YAAW,WAAW;IAC3D,iFAAiF;IACjF,OAAO,CAAC,sBAAsB,CAAe;;IAwD7C;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM9C;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMnD;IAED;;;OAGG;IACH,WAAW,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMlD;IAED;;;OAGG;IACH,eAAe,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAED;;;;;;OAMG;IACH,mBAAmB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAK5D;IAED;;;;OAIG;IACH,SAAS,QAAa,OAAO,CAAC,IAAI,CAAC,CAElC;IAED;;;OAGG;IACH,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAG9B;IAED;;;OAGG;IACH,SAAS,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMhD;IAED;;;OAGG;IACH,cAAc,QAAa,OAAO,CAAC,IAAI,CAAC,CAEvC;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAgFrD;IAED;;;OAGG;IACH,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;;OAIG;IACH,MAAM,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAgB3C;CACF"}
1
+ {"version":3,"file":"progressor.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/progressor.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAkFlF,qBAAa,UAAW,SAAQ,MAAO,YAAW,WAAW;IAC3D,iFAAiF;IACjF,OAAO,CAAC,sBAAsB,CAAe;;IAyD7C;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM9C;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMnD;IAED;;;OAGG;IACH,WAAW,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMlD;IAED;;;;OAIG;IACH,eAAe,QAAa,OAAO,CAAC,IAAI,CAAC,CAExC;IAED;;;;;;;;;;;;;;OAcG;IACH,cAAc,GAAU,OAAO,UAAU,KAAG,OAAO,CAAC,IAAI,CAAC,CAWxD;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAAC,CAG5C;IAED;;;;OAIG;IACH,SAAS,QAAa,OAAO,CAAC,IAAI,CAAC,CAElC;IAED;;;OAGG;IACH,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAG9B;IAED;;;OAGG;IACH,SAAS,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMhD;IAED;;;OAGG;IACH,cAAc,QAAa,OAAO,CAAC,IAAI,CAAC,CAEvC;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAwFrD;IAED;;;OAGG;IACH,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;;OAIG;IACH,MAAM,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAgB3C;CACF"}
@@ -11,27 +11,27 @@ 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_POWER_WARNING"] = 4] = "RESPONSE_LOW_POWER_WARNING";
35
35
  })(ProgressorResponses || (ProgressorResponses = {}));
36
36
  /**
37
37
  * Represents a Tindeq Progressor device.
@@ -71,7 +71,7 @@ function parseCalibrationCurvePayload(payload) {
71
71
  return hex;
72
72
  const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
73
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)})`;
74
+ return `${hex} — 1: ${v1.toLocaleString()} | 2: ${v0.toLocaleString()} | 3: ${v2}`;
75
75
  }
76
76
  class Progressor extends device_model_js_1.Device {
77
77
  constructor() {
@@ -123,6 +123,7 @@ class Progressor extends device_model_js_1.Device {
123
123
  SLEEP: "n", // 110 (0x6e)
124
124
  GET_BATTERY_VOLTAGE: "o", // 111 (0x6f)
125
125
  GET_PROGRESSOR_ID: "p", // 112 (0x70)
126
+ SET_CALIBRATION: "q", // 113 (0x71)
126
127
  GET_CALIBRATION: "r", // 114 (0x72)
127
128
  },
128
129
  });
@@ -173,23 +174,60 @@ class Progressor extends device_model_js_1.Device {
173
174
  return response;
174
175
  };
175
176
  /**
176
- * Saves the current calibration to the device. Call after adding both calibration points.
177
+ * Computes calibration curve from stored points and saves to flash (opcode 0x6A).
178
+ * Requires addCalibrationPoint() for zero and reference. Normal flow: i → i → j.
177
179
  * @returns {Promise<void>} A Promise that resolves when the command is sent.
178
180
  */
179
181
  this.saveCalibration = async () => {
180
182
  await this.write("progressor", "tx", this.commands.SAVE_CALIBRATION, 0);
181
183
  };
182
184
  /**
183
- * Adds a calibration point: 0x69 + 32-bit float (weight in kg), 5 bytes to the control characteristic.
184
- * Use for two-point calibration: (1) zero weight — addCalibrationPoint(0); (2) known weight — addCalibrationPoint(knownKg).
185
- * Order can be either way; writing zero first is recommended (hysteresis). Then call saveCalibration().
186
- * @param {number} weightKg - Weight in kg (use 0 for zero point, or known reference weight &lt; 150 kg).
187
- * @returns {Promise<void>} A Promise that resolves when the command is sent.
185
+ * Opcode 0x71 ('q'): write calibration curve directly (raw overwrite).
186
+ *
187
+ * Payload layout (14 bytes):
188
+ * - [0] opcode ('q' = 0x71)
189
+ * - [1] reserved (ignored by firmware)
190
+ * - [2..13] 12-byte calibration curve (3× u32 LE read at offsets +2, +6, +10)
191
+ *
192
+ * Notes:
193
+ * - This command does not compute anything; it overwrites stored calibration data.
194
+ * - Sending only the opcode (no 12-byte curve) is not a supported "reset" mode.
195
+ *
196
+ * @param curve - Raw 12-byte calibration curve (required).
197
+ * @returns Promise that resolves when the command is sent.
198
+ */
199
+ this.setCalibration = async (curve) => {
200
+ if (curve.length !== 12)
201
+ throw new Error("Curve must be 12 bytes");
202
+ const opcode = this.commands.SET_CALIBRATION.charCodeAt(0); // 0x71
203
+ const payload = new Uint8Array(14);
204
+ payload[0] = opcode;
205
+ payload[1] = 0; // reserved/ignored
206
+ payload.set(curve, 2);
207
+ await this.write("progressor", "tx", payload, 0);
208
+ };
209
+ /**
210
+ * Captures a calibration point from the *current live measurement*.
211
+ *
212
+ * Command: 0x69 ('i') written to the control characteristic.
213
+ *
214
+ * The firmware does **not** parse a float payload for this command. It simply snapshots the
215
+ * current raw ADC/force reading and stores it as the next calibration point (typically
216
+ * used as the zero point and the reference point for two-point calibration).
217
+ *
218
+ * Typical two-point calibration flow:
219
+ * 1) Ensure the device is stable with **no load** attached → send addCalibrationPoint() (zero point)
220
+ * 2) Attach a **known weight** and wait until stable → send addCalibrationPoint() (reference point)
221
+ * 3) Call saveCalibration() ('j') to compute + persist the curve
222
+ *
223
+ * Notes:
224
+ * - Order usually doesn’t matter, but capturing the zero point first is common practice.
225
+ * - Any extra payload bytes are ignored by the firmware for this command.
226
+ *
227
+ * @returns {Promise<void>} Resolves when the command is sent.
188
228
  */
189
- this.addCalibrationPoint = async (weightKg) => {
190
- const payload = new Uint8Array(5);
191
- payload[0] = this.commands.ADD_CALIBRATION_POINT.charCodeAt(0); // 0x69
192
- new DataView(payload.buffer).setFloat32(1, weightKg, true);
229
+ this.addCalibrationPoint = async () => {
230
+ const payload = new Uint8Array([this.commands.ADD_CALIBRATION_POINT.charCodeAt(0)]); // 0x69
193
231
  await this.write("progressor", "tx", payload, 0);
194
232
  };
195
233
  /**
@@ -235,86 +273,93 @@ class Progressor extends device_model_js_1.Device {
235
273
  */
236
274
  this.handleNotifications = (value) => {
237
275
  var _a;
238
- if (value) {
239
- // Update timestamp
240
- this.updateTimestamp();
241
- if (value.buffer) {
242
- const receivedTime = Date.now();
243
- // Read the first byte of the buffer to determine the kind of message
244
- const kind = value.getInt8(0);
245
- // Check if the message is a weight measurement
246
- if (kind === ProgressorResponses.WEIGHT_MEASURE) {
247
- // Payload = bytes from index 2 (skip byte 0 = message type, byte 1 = reserved/length)
248
- const payloadLength = value.byteLength - 2;
249
- if (payloadLength % 8 !== 0)
250
- return;
251
- const samplesPerPacket = payloadLength / 8;
252
- this.currentSamplesPerPacket = samplesPerPacket;
253
- this.recordPacketReceived();
254
- // for (i = 0; i < samplesPerPacket; i++) { offset = i*8; weight = getFloat32(offset); timestampUs = getUint32(offset+4); }
255
- for (let i = 0; i < samplesPerPacket; i++) {
256
- const offset = 2 + i * 8;
257
- const weight = value.getFloat32(offset, true);
258
- const timestampUs = value.getUint32(offset + 4, true);
259
- if (!isNaN(weight)) {
260
- const numericData = weight - this.applyTare(weight);
261
- const currentMassTotal = Math.max(-1000, Number(numericData));
262
- // Update session stats before building packet
263
- this.peak = Math.max(this.peak, Number(numericData));
264
- this.min = Math.min(this.min, Math.max(-1000, Number(numericData)));
265
- this.sum += currentMassTotal;
266
- this.dataPointCount++;
267
- this.mean = this.sum / this.dataPointCount;
268
- this.downloadPackets.push(this.buildDownloadPacket(currentMassTotal, [weight], {
269
- timestamp: receivedTime,
270
- sampleIndex: timestampUs,
271
- }));
272
- this.activityCheck(numericData);
273
- // Hz from device timestamps: keep only samples in last 1s
274
- this.recentSampleTimestamps.push(timestampUs);
275
- const latestUs = (_a = this.recentSampleTimestamps[this.recentSampleTimestamps.length - 1]) !== null && _a !== void 0 ? _a : 0;
276
- this.recentSampleTimestamps = this.recentSampleTimestamps.filter((ts) => latestUs - ts <= ONE_SECOND_US);
277
- const samplingRateHz = this.recentSampleTimestamps.length;
278
- const payload = this.buildForceMeasurement(currentMassTotal);
279
- if (payload.performance)
280
- payload.performance.samplingRateHz = samplingRateHz;
281
- this.notifyCallback(payload);
282
- }
283
- }
284
- }
285
- else if (kind === ProgressorResponses.COMMAND_RESPONSE) {
286
- if (!this.writeLast)
287
- return;
288
- let output = "";
289
- const payload = new Uint8Array(value.buffer).slice(2);
290
- if (this.writeLast === this.commands.GET_BATTERY_VOLTAGE) {
291
- output = new DataView(value.buffer, 2).getUint32(0, true).toString();
292
- }
293
- else if (this.writeLast === this.commands.GET_FIRMWARE_VERSION) {
294
- output = new TextDecoder().decode(payload);
295
- }
296
- else if (this.writeLast === this.commands.GET_ERROR_INFORMATION) {
297
- output = new TextDecoder().decode(payload);
298
- }
299
- else if (this.writeLast === this.commands.GET_PROGRESSOR_ID) {
300
- output = parseProgressorIdPayload(payload);
301
- }
302
- else if (this.writeLast === this.commands.GET_CALIBRATION) {
303
- output = parseCalibrationCurvePayload(payload);
304
- }
305
- else {
306
- // Unknown command response: return raw hex
307
- output = toHex(payload);
308
- }
309
- this.writeCallback(output);
310
- }
311
- else if (kind === ProgressorResponses.LOW_BATTERY_WARNING) {
312
- console.warn("⚠️ Low power detected. Please consider connecting to a power source.");
313
- }
314
- else {
315
- throw new Error(`Unknown message kind detected: ${kind}`);
316
- }
276
+ if (!(value === null || value === void 0 ? void 0 : value.buffer))
277
+ return;
278
+ // Update timestamp
279
+ this.updateTimestamp();
280
+ const receivedTime = Date.now();
281
+ // Read the first byte of the buffer to determine the kind of message
282
+ const kind = value.getUint8(0);
283
+ const payloadLength = value.getUint8(1);
284
+ const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
285
+ const payload = bytes.slice(2, 2 + payloadLength);
286
+ // Check if the message is a weight measurement
287
+ if (kind === ProgressorResponses.RESPONSE_WEIGHT_MEASUREMENT) {
288
+ if (payloadLength % 8 !== 0)
289
+ return;
290
+ const samplesPerPacket = payloadLength / 8;
291
+ this.currentSamplesPerPacket = samplesPerPacket;
292
+ this.recordPacketReceived();
293
+ for (let i = 0; i < samplesPerPacket; i++) {
294
+ const offset = 2 + i * 8;
295
+ const weight = value.getFloat32(offset, true);
296
+ const timestampUs = value.getUint32(offset + 4, true);
297
+ if (Number.isNaN(weight))
298
+ continue;
299
+ const numericData = weight - this.applyTare(weight);
300
+ const currentMassTotal = Math.max(-1000, Number(numericData));
301
+ // Update session stats before building packet
302
+ this.peak = Math.max(this.peak, Number(numericData));
303
+ this.min = Math.min(this.min, Math.max(-1000, Number(numericData)));
304
+ this.sum += currentMassTotal;
305
+ this.dataPointCount++;
306
+ this.mean = this.sum / this.dataPointCount;
307
+ this.downloadPackets.push(this.buildDownloadPacket(currentMassTotal, [weight], {
308
+ timestamp: receivedTime,
309
+ sampleIndex: timestampUs,
310
+ }));
311
+ this.activityCheck(numericData);
312
+ // Hz from device timestamps: keep only samples in last 1s
313
+ this.recentSampleTimestamps.push(timestampUs);
314
+ const latestUs = (_a = this.recentSampleTimestamps[this.recentSampleTimestamps.length - 1]) !== null && _a !== void 0 ? _a : 0;
315
+ this.recentSampleTimestamps = this.recentSampleTimestamps.filter((ts) => latestUs - ts <= ONE_SECOND_US);
316
+ const samplingRateHz = this.recentSampleTimestamps.length;
317
+ const payload = this.buildForceMeasurement(currentMassTotal);
318
+ if (payload.performance)
319
+ payload.performance.samplingRateHz = samplingRateHz;
320
+ this.notifyCallback(payload);
321
+ }
322
+ }
323
+ // Command response
324
+ else if (kind === ProgressorResponses.RESPONSE_COMMAND) {
325
+ if (!this.writeLast)
326
+ return;
327
+ let output = "";
328
+ if (this.writeLast === this.commands.GET_BATTERY_VOLTAGE) {
329
+ output = new DataView(payload.buffer, payload.byteOffset, payload.byteLength).getUint32(0, true).toString();
330
+ }
331
+ else if (this.writeLast === this.commands.GET_FIRMWARE_VERSION) {
332
+ output = new TextDecoder().decode(payload);
333
+ }
334
+ else if (this.writeLast === this.commands.GET_ERROR_INFORMATION) {
335
+ output = new TextDecoder().decode(payload);
336
+ }
337
+ else if (this.writeLast === this.commands.GET_PROGRESSOR_ID) {
338
+ output = parseProgressorIdPayload(payload);
317
339
  }
340
+ else if (this.writeLast === this.commands.GET_CALIBRATION) {
341
+ output = parseCalibrationCurvePayload(payload);
342
+ }
343
+ else {
344
+ // Unknown command response: return raw hex
345
+ output = toHex(payload);
346
+ }
347
+ this.writeCallback(output);
348
+ }
349
+ // RFD peak response
350
+ else if (kind === ProgressorResponses.RESPONSE_RFD_PEAK) {
351
+ console.warn("⚠️ RFD peak is currently unsupported.");
352
+ }
353
+ // RFD peak series response
354
+ else if (kind === ProgressorResponses.RESPONSE_RFD_PEAK_SERIES) {
355
+ console.warn("⚠️ RFD peak series is currently unsupported.");
356
+ }
357
+ // Low power warning response
358
+ else if (kind === ProgressorResponses.RESPONSE_LOW_POWER_WARNING) {
359
+ console.warn("⚠️ Low power detected. Please consider connecting to a power source.");
360
+ }
361
+ else {
362
+ throw new Error(`Unknown message kind detected: ${kind}`);
318
363
  }
319
364
  };
320
365
  /**
@@ -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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"}
@@ -92,5 +92,9 @@ export interface Commands {
92
92
  * Get the Progressor ID.
93
93
  */
94
94
  GET_PROGRESSOR_ID?: string;
95
+ /**
96
+ * Set calibration curve (3× u32 LE). Payload at offsets +2,+6,+10.
97
+ */
98
+ SET_CALIBRATION?: string;
95
99
  }
96
100
  //# sourceMappingURL=command.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/command.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAGvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAInB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAIzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAEnC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B"}
1
+ {"version":3,"file":"command.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/command.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAGvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAInB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAIxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAIzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAEnC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB"}
@@ -20,13 +20,13 @@ export interface IProgressor extends IDevice {
20
20
  progressorId(): Promise<string | undefined>;
21
21
  /**
22
22
  * Retrieves calibration curve from the device (opcode 0x72). Payload is 12 opaque bytes;
23
- * parsed for display as zero-point, ref-point, and version (3× uint32 LE) plus hex.
24
- * @returns {Promise<string | undefined>} A Promise that resolves with a display string (e.g. "hex — zero-point: X | ref-point: Y | version: Z").
23
+ * parsed for display as hex plus 3× uint32 LE.
24
+ * @returns {Promise<string | undefined>} A Promise that resolves with a display string (e.g. "hex — 1: X | 2: Y | 3: Z").
25
25
  */
26
26
  calibration(): Promise<string | undefined>;
27
27
  /**
28
- * Saves the current calibration settings to the device.
29
- * @returns {Promise<void>} A Promise that resolves when the command is sent.
28
+ * Computes calibration curve from stored points and saves to flash.
29
+ * Call after addCalibrationPoint() for zero and reference. Normal flow: i → i → j.
30
30
  */
31
31
  saveCalibration(): Promise<void>;
32
32
  /**
@@ -34,6 +34,12 @@ export interface IProgressor extends IDevice {
34
34
  * @returns {Promise<void>} A Promise that resolves when the command is sent.
35
35
  */
36
36
  sleep(): Promise<void>;
37
+ /**
38
+ * Set a new calibration curve.
39
+ * @warning Expert only. This will overwrite the current calibration curve.
40
+ * @param curve - The 12-byte calibration curve to set.
41
+ */
42
+ setCalibration(curve: Uint8Array): Promise<void>;
37
43
  /**
38
44
  * Retrieves error information from the device.
39
45
  * @returns {Promise<string | undefined>} A Promise that resolves with the error info text.
@@ -56,10 +62,10 @@ export interface IProgressor extends IDevice {
56
62
  */
57
63
  stream(duration?: number): Promise<void>;
58
64
  /**
59
- * Adds a calibration point. Use 0 for zero point, then known weight; then saveCalibration().
60
- * @param weightKg - Weight in kg (0 or known reference &lt; 150 kg).
65
+ * Adds a calibration point by capturing the current live ADC reading.
66
+ * Call with no load for zero point, then with known weight; then saveCalibration().
61
67
  */
62
- addCalibrationPoint(weightKg: number): Promise<void>;
68
+ addCalibrationPoint(): Promise<void>;
63
69
  /**
64
70
  * Sends the device tare command to zero the scale (hardware tare).
65
71
  * For software tare over a duration, use the base tare(duration) method.
@@ -1 +1 @@
1
- {"version":3,"file":"progressor.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device/progressor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEtC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEvC;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE3C;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE1C;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAExC;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAErB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpD;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B"}
1
+ {"version":3,"file":"progressor.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device/progressor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEtC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEvC;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE3C;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAE1C;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhD;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAExC;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/B;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAErB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpC;;;;OAIG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B"}
@@ -25,18 +25,48 @@ export declare class Progressor extends Device implements IProgressor {
25
25
  */
26
26
  calibration: () => Promise<string | undefined>;
27
27
  /**
28
- * Saves the current calibration to the device. Call after adding both calibration points.
28
+ * Computes calibration curve from stored points and saves to flash (opcode 0x6A).
29
+ * Requires addCalibrationPoint() for zero and reference. Normal flow: i → i → j.
29
30
  * @returns {Promise<void>} A Promise that resolves when the command is sent.
30
31
  */
31
32
  saveCalibration: () => Promise<void>;
32
33
  /**
33
- * Adds a calibration point: 0x69 + 32-bit float (weight in kg), 5 bytes to the control characteristic.
34
- * Use for two-point calibration: (1) zero weight — addCalibrationPoint(0); (2) known weight — addCalibrationPoint(knownKg).
35
- * Order can be either way; writing zero first is recommended (hysteresis). Then call saveCalibration().
36
- * @param {number} weightKg - Weight in kg (use 0 for zero point, or known reference weight &lt; 150 kg).
37
- * @returns {Promise<void>} A Promise that resolves when the command is sent.
34
+ * Opcode 0x71 ('q'): write calibration curve directly (raw overwrite).
35
+ *
36
+ * Payload layout (14 bytes):
37
+ * - [0] opcode ('q' = 0x71)
38
+ * - [1] reserved (ignored by firmware)
39
+ * - [2..13] 12-byte calibration curve (3× u32 LE read at offsets +2, +6, +10)
40
+ *
41
+ * Notes:
42
+ * - This command does not compute anything; it overwrites stored calibration data.
43
+ * - Sending only the opcode (no 12-byte curve) is not a supported "reset" mode.
44
+ *
45
+ * @param curve - Raw 12-byte calibration curve (required).
46
+ * @returns Promise that resolves when the command is sent.
47
+ */
48
+ setCalibration: (curve: Uint8Array) => Promise<void>;
49
+ /**
50
+ * Captures a calibration point from the *current live measurement*.
51
+ *
52
+ * Command: 0x69 ('i') written to the control characteristic.
53
+ *
54
+ * The firmware does **not** parse a float payload for this command. It simply snapshots the
55
+ * current raw ADC/force reading and stores it as the next calibration point (typically
56
+ * used as the zero point and the reference point for two-point calibration).
57
+ *
58
+ * Typical two-point calibration flow:
59
+ * 1) Ensure the device is stable with **no load** attached → send addCalibrationPoint() (zero point)
60
+ * 2) Attach a **known weight** and wait until stable → send addCalibrationPoint() (reference point)
61
+ * 3) Call saveCalibration() ('j') to compute + persist the curve
62
+ *
63
+ * Notes:
64
+ * - Order usually doesn’t matter, but capturing the zero point first is common practice.
65
+ * - Any extra payload bytes are ignored by the firmware for this command.
66
+ *
67
+ * @returns {Promise<void>} Resolves when the command is sent.
38
68
  */
39
- addCalibrationPoint: (weightKg: number) => Promise<void>;
69
+ addCalibrationPoint: () => Promise<void>;
40
70
  /**
41
71
  * Sends the device tare command to zero the scale (hardware tare).
42
72
  * For software tare over a duration, use the base tare(duration) method.