@hangtime/grip-connect 0.9.0 → 0.10.1
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.
- package/README.md +24 -15
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/callback.interface.d.ts +37 -31
- package/dist/cjs/interfaces/callback.interface.d.ts.map +1 -1
- package/dist/cjs/interfaces/device/kilterboard.interface.d.ts +3 -2
- package/dist/cjs/interfaces/device/kilterboard.interface.d.ts.map +1 -1
- package/dist/cjs/interfaces/device.interface.d.ts +4 -2
- package/dist/cjs/interfaces/device.interface.d.ts.map +1 -1
- package/dist/cjs/models/device/climbro.model.d.ts.map +1 -1
- package/dist/cjs/models/device/climbro.model.js +4 -8
- package/dist/cjs/models/device/climbro.model.js.map +1 -1
- package/dist/cjs/models/device/entralpi.model.d.ts.map +1 -1
- package/dist/cjs/models/device/entralpi.model.js +5 -9
- package/dist/cjs/models/device/entralpi.model.js.map +1 -1
- package/dist/cjs/models/device/forceboard.model.d.ts +1 -0
- package/dist/cjs/models/device/forceboard.model.d.ts.map +1 -1
- package/dist/cjs/models/device/forceboard.model.js +10 -15
- package/dist/cjs/models/device/forceboard.model.js.map +1 -1
- package/dist/cjs/models/device/kilterboard.model.d.ts +5 -3
- package/dist/cjs/models/device/kilterboard.model.d.ts.map +1 -1
- package/dist/cjs/models/device/kilterboard.model.js +52 -16
- package/dist/cjs/models/device/kilterboard.model.js.map +1 -1
- package/dist/cjs/models/device/motherboard.model.d.ts +7 -0
- package/dist/cjs/models/device/motherboard.model.d.ts.map +1 -1
- package/dist/cjs/models/device/motherboard.model.js +28 -15
- package/dist/cjs/models/device/motherboard.model.js.map +1 -1
- package/dist/cjs/models/device/pb-700bt.model.d.ts +63 -0
- package/dist/cjs/models/device/pb-700bt.model.d.ts.map +1 -0
- package/dist/cjs/models/device/pb-700bt.model.js +247 -0
- package/dist/cjs/models/device/pb-700bt.model.js.map +1 -0
- package/dist/cjs/models/device/progressor.model.d.ts.map +1 -1
- package/dist/cjs/models/device/progressor.model.js +4 -8
- package/dist/cjs/models/device/progressor.model.js.map +1 -1
- package/dist/cjs/models/device/smartboard-pro.model.d.ts +8 -0
- package/dist/cjs/models/device/smartboard-pro.model.d.ts.map +1 -1
- package/dist/cjs/models/device/smartboard-pro.model.js +62 -6
- package/dist/cjs/models/device/smartboard-pro.model.js.map +1 -1
- package/dist/cjs/models/device/wh-c06.model.d.ts.map +1 -1
- package/dist/cjs/models/device/wh-c06.model.js +5 -9
- package/dist/cjs/models/device/wh-c06.model.js.map +1 -1
- package/dist/cjs/models/device.model.d.ts +81 -13
- package/dist/cjs/models/device.model.d.ts.map +1 -1
- package/dist/cjs/models/device.model.js +138 -6
- package/dist/cjs/models/device.model.js.map +1 -1
- package/dist/cjs/models/index.d.ts +2 -1
- package/dist/cjs/models/index.d.ts.map +1 -1
- package/dist/cjs/models/index.js +4 -1
- package/dist/cjs/models/index.js.map +1 -1
- package/dist/cjs/utils.d.ts +16 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +54 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/callback.interface.d.ts +37 -31
- package/dist/interfaces/callback.interface.d.ts.map +1 -1
- package/dist/interfaces/device/kilterboard.interface.d.ts +3 -2
- package/dist/interfaces/device/kilterboard.interface.d.ts.map +1 -1
- package/dist/interfaces/device.interface.d.ts +4 -2
- package/dist/interfaces/device.interface.d.ts.map +1 -1
- package/dist/models/device/climbro.model.d.ts.map +1 -1
- package/dist/models/device/climbro.model.js +4 -8
- package/dist/models/device/climbro.model.js.map +1 -1
- package/dist/models/device/entralpi.model.d.ts.map +1 -1
- package/dist/models/device/entralpi.model.js +5 -9
- package/dist/models/device/entralpi.model.js.map +1 -1
- package/dist/models/device/forceboard.model.d.ts +1 -0
- package/dist/models/device/forceboard.model.d.ts.map +1 -1
- package/dist/models/device/forceboard.model.js +10 -15
- package/dist/models/device/forceboard.model.js.map +1 -1
- package/dist/models/device/kilterboard.model.d.ts +5 -3
- package/dist/models/device/kilterboard.model.d.ts.map +1 -1
- package/dist/models/device/kilterboard.model.js +52 -16
- package/dist/models/device/kilterboard.model.js.map +1 -1
- package/dist/models/device/motherboard.model.d.ts +7 -0
- package/dist/models/device/motherboard.model.d.ts.map +1 -1
- package/dist/models/device/motherboard.model.js +28 -15
- package/dist/models/device/motherboard.model.js.map +1 -1
- package/dist/models/device/pb-700bt.model.d.ts +63 -0
- package/dist/models/device/pb-700bt.model.d.ts.map +1 -0
- package/dist/models/device/pb-700bt.model.js +243 -0
- package/dist/models/device/pb-700bt.model.js.map +1 -0
- package/dist/models/device/progressor.model.d.ts.map +1 -1
- package/dist/models/device/progressor.model.js +4 -8
- package/dist/models/device/progressor.model.js.map +1 -1
- package/dist/models/device/smartboard-pro.model.d.ts +8 -0
- package/dist/models/device/smartboard-pro.model.d.ts.map +1 -1
- package/dist/models/device/smartboard-pro.model.js +62 -6
- package/dist/models/device/smartboard-pro.model.js.map +1 -1
- package/dist/models/device/wh-c06.model.d.ts.map +1 -1
- package/dist/models/device/wh-c06.model.js +5 -9
- package/dist/models/device/wh-c06.model.js.map +1 -1
- package/dist/models/device.model.d.ts +81 -13
- package/dist/models/device.model.d.ts.map +1 -1
- package/dist/models/device.model.js +160 -15
- package/dist/models/device.model.js.map +1 -1
- package/dist/models/index.d.ts +2 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -1
- package/dist/models/index.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/package.json +4 -1
- package/src/index.ts +13 -0
- package/src/interfaces/callback.interface.ts +41 -31
- package/src/interfaces/device/kilterboard.interface.ts +2 -2
- package/src/interfaces/device.interface.ts +4 -2
- package/src/models/device/climbro.model.ts +4 -8
- package/src/models/device/entralpi.model.ts +5 -9
- package/src/models/device/forceboard.model.ts +11 -16
- package/src/models/device/kilterboard.model.ts +56 -19
- package/src/models/device/motherboard.model.ts +32 -15
- package/src/models/device/pb-700bt.model.ts +263 -0
- package/src/models/device/progressor.model.ts +4 -8
- package/src/models/device/smartboard-pro.model.ts +73 -6
- package/src/models/device/wh-c06.model.ts +5 -9
- package/src/models/device.model.ts +191 -17
- package/src/models/index.ts +3 -1
- package/src/utils.ts +57 -0
|
@@ -151,20 +151,16 @@ class Progressor extends device_model_js_1.Device {
|
|
|
151
151
|
masses: [numericData],
|
|
152
152
|
});
|
|
153
153
|
// Check for max weight
|
|
154
|
-
this.
|
|
154
|
+
this.peak = Math.max(this.peak, Number(numericData));
|
|
155
155
|
// Update running sum and count
|
|
156
156
|
const currentMassTotal = Math.max(-1000, Number(numericData));
|
|
157
|
-
this.
|
|
157
|
+
this.sum += currentMassTotal;
|
|
158
158
|
this.dataPointCount++;
|
|
159
159
|
// Calculate the average dynamically
|
|
160
|
-
this.
|
|
160
|
+
this.mean = this.sum / this.dataPointCount;
|
|
161
161
|
// Check if device is being used
|
|
162
162
|
this.activityCheck(numericData);
|
|
163
|
-
this.notifyCallback(
|
|
164
|
-
massMax: this.massMax,
|
|
165
|
-
massAverage: this.massAverage,
|
|
166
|
-
massTotal: Math.max(-1000, numericData).toFixed(1),
|
|
167
|
-
});
|
|
163
|
+
this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
|
|
168
164
|
}
|
|
169
165
|
}
|
|
170
166
|
}
|
|
@@ -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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"}
|
|
@@ -7,5 +7,13 @@ import type { ISmartBoardPro } from "../../interfaces/device/smartboard-pro.inte
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class SmartBoardPro extends Device implements ISmartBoardPro {
|
|
9
9
|
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Handles data received from the device, processes weight measurements,
|
|
12
|
+
* and updates mass data including maximum and average values.
|
|
13
|
+
* It also handles command responses for retrieving device information.
|
|
14
|
+
*
|
|
15
|
+
* @param {DataView} value - The notification event.
|
|
16
|
+
*/
|
|
17
|
+
handleNotifications: (value: DataView) => void;
|
|
10
18
|
}
|
|
11
19
|
//# sourceMappingURL=smartboard-pro.model.d.ts.map
|
|
@@ -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;;
|
|
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"}
|
|
@@ -13,8 +13,8 @@ class SmartBoardPro extends device_model_js_1.Device {
|
|
|
13
13
|
filters: [{ name: "SMARTBOARD" }],
|
|
14
14
|
services: [
|
|
15
15
|
{
|
|
16
|
-
name: "
|
|
17
|
-
id: "
|
|
16
|
+
name: "Weight Scale Service",
|
|
17
|
+
id: "weight",
|
|
18
18
|
uuid: "00001851-0000-1000-8000-00805f9b34fb",
|
|
19
19
|
characteristics: [
|
|
20
20
|
{
|
|
@@ -25,13 +25,13 @@ class SmartBoardPro extends device_model_js_1.Device {
|
|
|
25
25
|
],
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
|
-
name: "
|
|
29
|
-
id: "",
|
|
28
|
+
name: "Smartboard Service",
|
|
29
|
+
id: "smartboard",
|
|
30
30
|
uuid: "0000403d-0000-1000-8000-00805f9b34fb",
|
|
31
31
|
characteristics: [
|
|
32
32
|
{
|
|
33
|
-
name: "",
|
|
34
|
-
id: "",
|
|
33
|
+
name: "SmartBoard Measurement",
|
|
34
|
+
id: "rx",
|
|
35
35
|
uuid: "00001583-0000-1000-8000-00805f9b34fb",
|
|
36
36
|
},
|
|
37
37
|
],
|
|
@@ -50,6 +50,62 @@ class SmartBoardPro extends device_model_js_1.Device {
|
|
|
50
50
|
},
|
|
51
51
|
],
|
|
52
52
|
});
|
|
53
|
+
/**
|
|
54
|
+
* Handles data received from the device, processes weight measurements,
|
|
55
|
+
* and updates mass data including maximum and average values.
|
|
56
|
+
* It also handles command responses for retrieving device information.
|
|
57
|
+
*
|
|
58
|
+
* @param {DataView} value - The notification event.
|
|
59
|
+
*/
|
|
60
|
+
this.handleNotifications = (value) => {
|
|
61
|
+
if (value) {
|
|
62
|
+
// Update timestamp
|
|
63
|
+
this.updateTimestamp();
|
|
64
|
+
if (value.buffer) {
|
|
65
|
+
const length = value.byteLength / 2;
|
|
66
|
+
const dataArray = [];
|
|
67
|
+
for (let i = 0; i < length; i++) {
|
|
68
|
+
const offset = i * 2;
|
|
69
|
+
if (offset + 1 < value.byteLength) {
|
|
70
|
+
const intValue = value.getInt16(offset, true);
|
|
71
|
+
// For debugging purposes
|
|
72
|
+
console.log(intValue);
|
|
73
|
+
dataArray.push(intValue);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (dataArray.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
const receivedTime = Date.now();
|
|
79
|
+
// Process each data point
|
|
80
|
+
for (const receivedData of dataArray) {
|
|
81
|
+
// Skip invalid values
|
|
82
|
+
if (!Number.isFinite(receivedData))
|
|
83
|
+
continue;
|
|
84
|
+
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
|
+
const currentMassTotal = Math.max(-1000, numericData);
|
|
97
|
+
this.sum += currentMassTotal;
|
|
98
|
+
this.dataPointCount++;
|
|
99
|
+
// Calculate the average dynamically
|
|
100
|
+
this.mean = this.sum / this.dataPointCount;
|
|
101
|
+
// Check if device is being used
|
|
102
|
+
this.activityCheck(numericData);
|
|
103
|
+
// Notify with weight data
|
|
104
|
+
this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
53
109
|
}
|
|
54
110
|
}
|
|
55
111
|
exports.SmartBoardPro = SmartBoardPro;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartboard-pro.model.js","sourceRoot":"","sources":["../../../../src/models/device/smartboard-pro.model.ts"],"names":[],"mappings":";;;AAAA,wDAA2C;AAG3C;;;;GAIG;AACH,MAAa,aAAc,SAAQ,wBAAM;IACvC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACjC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,
|
|
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,
|
|
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"}
|
|
@@ -83,22 +83,18 @@ class WHC06 extends device_model_js_1.Device {
|
|
|
83
83
|
samples: [numericData],
|
|
84
84
|
masses: [numericData],
|
|
85
85
|
});
|
|
86
|
-
// Update
|
|
87
|
-
this.
|
|
86
|
+
// Update peak
|
|
87
|
+
this.peak = Math.max(this.peak, numericData);
|
|
88
88
|
// Update running sum and count
|
|
89
89
|
const currentMassTotal = Math.max(-1000, numericData);
|
|
90
|
-
this.
|
|
90
|
+
this.sum += currentMassTotal;
|
|
91
91
|
this.dataPointCount++;
|
|
92
92
|
// Calculate the average dynamically
|
|
93
|
-
this.
|
|
93
|
+
this.mean = this.sum / this.dataPointCount;
|
|
94
94
|
// Check if device is being used
|
|
95
95
|
this.activityCheck(numericData);
|
|
96
96
|
// Notify with weight data
|
|
97
|
-
this.notifyCallback(
|
|
98
|
-
massMax: this.massMax,
|
|
99
|
-
massAverage: this.massAverage,
|
|
100
|
-
massTotal: Math.max(-1000, numericData).toFixed(1),
|
|
101
|
-
});
|
|
97
|
+
this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
|
|
102
98
|
}
|
|
103
99
|
// Reset "still advertising" counter
|
|
104
100
|
this.resetAdvertisementTimeout();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wh-c06.model.js","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":";;;AAAA,wDAA2C;AAG3C;;;;;GAKG;AACH,MAAa,KAAM,SAAQ,wBAAM;IAkC/B,MAAM;IACN,0FAA0F;IAC1F,oBAAoB;IACpB,aAAa;IACb,eAAe;IACf,eAAe;IACf,MAAM;IACN,oDAAoD;IACpD;QACE,KAAK,CAAC;YACJ,OAAO,EAAE;gBACP;oBACE,iBAAiB;oBACjB,gBAAgB,EAAE;wBAChB;4BACE,iBAAiB,EAAE,MAAM,EAAE,MAAM;yBAClC;qBACF;iBACF;aACF;YACD,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;QApCJ;;;;WAIG;QACK,yBAAoB,GAAyC,IAAI,CAAA;QAEzE;;;;;WAKG;QACc,6BAAwB,GAAW,EAAE,CAAA;QA0BtD;;;;WAIG;QACM,YAAO,GAAG,KAAK,EACtB,YAAwB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EACnE,UAAkC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAClD,EAAE;YACjB,IAAI,CAAC;gBACH,gLAAgL;gBAChL,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACnD,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,MAAM,CAAC,gBAAgB,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAI,EAAE,CAAA,EAAA,CACjF,CAAA;gBAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;gBAE3C,IAAI,CAAC,SAAS,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC;oBAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,wBAAwB;iBACzB,CAAC,CAAA;gBAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBACzD,CAAC;gBACD,mBAAmB;gBACnB,IAAI,CAAC,eAAe,EAAE,CAAA;gBAEtB,0EAA0E;gBAC1E,SAAS,EAAE,CAAA;gBAEX,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjE,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7D,IAAI,IAAI,EAAE,CAAC;wBACT,uBAAuB;wBACvB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;wBAC/F,4DAA4D;wBAC5D,mDAAmD;wBACnD,MAAM,YAAY,GAAW,IAAI,CAAC,GAAG,EAAE,CAAA;wBACvC,MAAM,YAAY,GAAG,MAAM,GAAG,GAAG,CAAA;wBAEjC,MAAM,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;wBAEpE,iCAAiC;wBACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;4BACxB,QAAQ,EAAE,YAAY;4BACtB,SAAS,EAAE,IAAI,CAAC,cAAc;4BAC9B,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,CAAC,WAAW,CAAC;4BACtB,MAAM,EAAE,CAAC,WAAW,CAAC;yBACtB,CAAC,CAAA;wBAEF,
|
|
1
|
+
{"version":3,"file":"wh-c06.model.js","sourceRoot":"","sources":["../../../../src/models/device/wh-c06.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseModel } from "./../models/base.model.js";
|
|
2
2
|
import type { IDevice, Service } from "../interfaces/device.interface.js";
|
|
3
|
-
import type { ActiveCallback, NotifyCallback, WriteCallback } from "../interfaces/callback.interface.js";
|
|
3
|
+
import type { ActiveCallback, ForceMeasurement, ForceUnit, NotifyCallback, WriteCallback } from "../interfaces/callback.interface.js";
|
|
4
4
|
import type { DownloadPacket } from "../interfaces/download.interface.js";
|
|
5
5
|
import type { Commands } from "../interfaces/command.interface.js";
|
|
6
6
|
export declare abstract class Device extends BaseModel implements IDevice {
|
|
@@ -57,24 +57,55 @@ export declare abstract class Device extends BaseModel implements IDevice {
|
|
|
57
57
|
*/
|
|
58
58
|
private activeConfig;
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
60
|
+
* Highest instantaneous force (peak) recorded in the session; may be negative.
|
|
61
|
+
* Initialized to Number.NEGATIVE_INFINITY so the first sample sets the peak.
|
|
62
|
+
* @type {number}
|
|
62
63
|
* @protected
|
|
63
64
|
*/
|
|
64
|
-
protected
|
|
65
|
+
protected peak: number;
|
|
65
66
|
/**
|
|
66
|
-
*
|
|
67
|
-
* @type {
|
|
67
|
+
* Mean (average) force over the session, initialized to 0.
|
|
68
|
+
* @type {number}
|
|
68
69
|
* @protected
|
|
69
70
|
*/
|
|
70
|
-
protected
|
|
71
|
+
protected mean: number;
|
|
71
72
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
73
|
+
* Display unit for force measurements (output unit for notify callbacks).
|
|
74
|
+
* @type {ForceUnit}
|
|
75
|
+
* @protected
|
|
76
|
+
*/
|
|
77
|
+
protected unit: ForceUnit;
|
|
78
|
+
/**
|
|
79
|
+
* Unit of the values streamed by the device (kg for most devices, lbs for ForceBoard).
|
|
80
|
+
* @type {ForceUnit}
|
|
81
|
+
* @protected
|
|
82
|
+
*/
|
|
83
|
+
protected streamUnit: ForceUnit;
|
|
84
|
+
/**
|
|
85
|
+
* Optional sampling rate in Hz when known or calculated from notification timestamps.
|
|
86
|
+
* @type {number | undefined}
|
|
87
|
+
* @protected
|
|
88
|
+
*/
|
|
89
|
+
protected samplingRateHz?: number;
|
|
90
|
+
/**
|
|
91
|
+
* Start time of the current rate measurement interval.
|
|
92
|
+
* @type {number}
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
private rateIntervalStart;
|
|
96
|
+
/**
|
|
97
|
+
* Number of samples in the current rate measurement interval.
|
|
98
|
+
* @type {number}
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
private rateIntervalSamples;
|
|
102
|
+
/**
|
|
103
|
+
* Running sum of force values for the session.
|
|
104
|
+
* Used to calculate mean (average) force.
|
|
74
105
|
* @type {number}
|
|
75
106
|
* @protected
|
|
76
107
|
*/
|
|
77
|
-
protected
|
|
108
|
+
protected sum: number;
|
|
78
109
|
/**
|
|
79
110
|
* Number of data points received from the device.
|
|
80
111
|
* Used to calculate the average mass.
|
|
@@ -115,9 +146,9 @@ export declare abstract class Device extends BaseModel implements IDevice {
|
|
|
115
146
|
*/
|
|
116
147
|
private tareDuration;
|
|
117
148
|
/**
|
|
118
|
-
* Optional callback for handling
|
|
149
|
+
* Optional callback for handling mass/force data notifications.
|
|
119
150
|
* @callback NotifyCallback
|
|
120
|
-
* @param {
|
|
151
|
+
* @param {ForceMeasurement} data - The force measurement passed to the callback.
|
|
121
152
|
* @type {NotifyCallback | undefined}
|
|
122
153
|
* @protected
|
|
123
154
|
*/
|
|
@@ -155,6 +186,41 @@ export declare abstract class Device extends BaseModel implements IDevice {
|
|
|
155
186
|
*/
|
|
156
187
|
private notificationListeners;
|
|
157
188
|
constructor(device: Partial<IDevice>);
|
|
189
|
+
/**
|
|
190
|
+
* Builds a ForceMeasurement for a single zone (e.g. left/center/right).
|
|
191
|
+
* With one argument, current/peak/mean are all set to that value.
|
|
192
|
+
* With three arguments, uses the given current, peak, and mean for the zone.
|
|
193
|
+
* @param valueOrCurrent - Force value, or current force for this zone
|
|
194
|
+
* @param peak - Optional peak for this zone (required if mean is provided)
|
|
195
|
+
* @param mean - Optional mean for this zone
|
|
196
|
+
* @returns ForceMeasurement (no nested distribution)
|
|
197
|
+
* @protected
|
|
198
|
+
*/
|
|
199
|
+
protected buildZoneMeasurement(valueOrCurrent: number, peak?: number, mean?: number): ForceMeasurement;
|
|
200
|
+
/**
|
|
201
|
+
* Interval duration (ms) for sampling rate calculation.
|
|
202
|
+
* @private
|
|
203
|
+
* @readonly
|
|
204
|
+
*/
|
|
205
|
+
private static readonly RATE_INTERVAL_MS;
|
|
206
|
+
/**
|
|
207
|
+
* Calculates sampling rate: samples per second.
|
|
208
|
+
* Uses fixed intervals to avoid sliding window edge effects.
|
|
209
|
+
* @private
|
|
210
|
+
*/
|
|
211
|
+
private updateSamplingRate;
|
|
212
|
+
/**
|
|
213
|
+
* Builds a ForceMeasurement payload with unit and timestamp for notify callbacks.
|
|
214
|
+
* @param current - Current force at this sample
|
|
215
|
+
* @param distribution - Optional zone distribution: numbers (converted via buildZoneMeasurement) or full ForceMeasurement per zone
|
|
216
|
+
* @returns ForceMeasurement
|
|
217
|
+
* @protected
|
|
218
|
+
*/
|
|
219
|
+
protected buildForceMeasurement(current: number, distribution?: {
|
|
220
|
+
left?: ForceMeasurement;
|
|
221
|
+
center?: ForceMeasurement;
|
|
222
|
+
right?: ForceMeasurement;
|
|
223
|
+
}): ForceMeasurement;
|
|
158
224
|
/**
|
|
159
225
|
* Sets the callback function to be called when the activity status changes,
|
|
160
226
|
* and optionally sets the configuration for threshold and duration.
|
|
@@ -308,6 +374,7 @@ export declare abstract class Device extends BaseModel implements IDevice {
|
|
|
308
374
|
/**
|
|
309
375
|
* Sets the callback function to be called when notifications are received.
|
|
310
376
|
* @param {NotifyCallback} callback - The callback function to be set.
|
|
377
|
+
* @param {ForceUnit} [unit="kg"] - Optional display unit for force values in the callback payload.
|
|
311
378
|
* @returns {void}
|
|
312
379
|
* @public
|
|
313
380
|
*
|
|
@@ -315,8 +382,9 @@ export declare abstract class Device extends BaseModel implements IDevice {
|
|
|
315
382
|
* device.notify((data) => {
|
|
316
383
|
* console.log('Received notification:', data);
|
|
317
384
|
* });
|
|
385
|
+
* device.notify((data) => { ... }, 'lbs');
|
|
318
386
|
*/
|
|
319
|
-
notify: (callback: NotifyCallback) => void;
|
|
387
|
+
notify: (callback: NotifyCallback, unit?: ForceUnit) => void;
|
|
320
388
|
/**
|
|
321
389
|
* Handles the 'connected' event.
|
|
322
390
|
* @param {Function} onSuccess - Callback function to execute on successful connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.model.d.ts","sourceRoot":"","sources":["../../../src/models/device.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"device.model.d.ts","sourceRoot":"","sources":["../../../src/models/device.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Device = void 0;
|
|
4
4
|
const base_model_js_1 = require("./../models/base.model.js");
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
5
6
|
class Device extends base_model_js_1.BaseModel {
|
|
6
7
|
constructor(device) {
|
|
7
8
|
super(device);
|
|
@@ -23,6 +24,24 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
23
24
|
threshold: 2.5,
|
|
24
25
|
duration: 1000,
|
|
25
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Unit of the values streamed by the device (kg for most devices, lbs for ForceBoard).
|
|
29
|
+
* @type {ForceUnit}
|
|
30
|
+
* @protected
|
|
31
|
+
*/
|
|
32
|
+
this.streamUnit = "kg";
|
|
33
|
+
/**
|
|
34
|
+
* Start time of the current rate measurement interval.
|
|
35
|
+
* @type {number}
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
this.rateIntervalStart = 0;
|
|
39
|
+
/**
|
|
40
|
+
* Number of samples in the current rate measurement interval.
|
|
41
|
+
* @type {number}
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
this.rateIntervalSamples = 0;
|
|
26
45
|
/**
|
|
27
46
|
* Array of DownloadPacket entries.
|
|
28
47
|
* This array holds packets that contain data downloaded from the device.
|
|
@@ -56,9 +75,9 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
56
75
|
*/
|
|
57
76
|
this.tareDuration = 5000;
|
|
58
77
|
/**
|
|
59
|
-
* Optional callback for handling
|
|
78
|
+
* Optional callback for handling mass/force data notifications.
|
|
60
79
|
* @callback NotifyCallback
|
|
61
|
-
* @param {
|
|
80
|
+
* @param {ForceMeasurement} data - The force measurement passed to the callback.
|
|
62
81
|
* @type {NotifyCallback | undefined}
|
|
63
82
|
* @protected
|
|
64
83
|
*/
|
|
@@ -167,6 +186,27 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
167
186
|
// Request device and set up connection
|
|
168
187
|
const deviceServices = this.getAllServiceUUIDs();
|
|
169
188
|
const bluetooth = await this.getBluetooth();
|
|
189
|
+
// Experiment: Reconnect to known devices, enable these Chrome flags:
|
|
190
|
+
// - chrome://flags/#enable-experimental-web-platform-features → enables getDevices() API
|
|
191
|
+
// - chrome://flags/#enable-web-bluetooth-new-permissions-backend → ensures it returns all permitted devices, not just connected ones
|
|
192
|
+
// let reconnectDevice: BluetoothDevice | undefined
|
|
193
|
+
// if (typeof bluetooth.getDevices === "function") {
|
|
194
|
+
// const devices: BluetoothDevice[] = await bluetooth.getDevices()
|
|
195
|
+
// if (devices.length > 0 && this.filters.length > 0) {
|
|
196
|
+
// reconnectDevice = devices.find((device) => {
|
|
197
|
+
// if (!device.name) return false
|
|
198
|
+
// const d = device
|
|
199
|
+
// return this.filters.some(
|
|
200
|
+
// (f) => (f.name && d.name === f.name) || (f.namePrefix && d.name?.startsWith(f.namePrefix)),
|
|
201
|
+
// )
|
|
202
|
+
// })
|
|
203
|
+
// }
|
|
204
|
+
// if (reconnectDevice) {
|
|
205
|
+
// this.bluetooth = reconnectDevice
|
|
206
|
+
// // It's currently impossible to call this.bluetooth.gatt.connect() here.
|
|
207
|
+
// // After restarting the Browser, it will always give: "Bluetooth Device is no longer in range."
|
|
208
|
+
// }
|
|
209
|
+
// }
|
|
170
210
|
this.bluetooth = await bluetooth.requestDevice({
|
|
171
211
|
filters: this.filters,
|
|
172
212
|
optionalServices: deviceServices,
|
|
@@ -393,6 +433,7 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
393
433
|
/**
|
|
394
434
|
* Sets the callback function to be called when notifications are received.
|
|
395
435
|
* @param {NotifyCallback} callback - The callback function to be set.
|
|
436
|
+
* @param {ForceUnit} [unit="kg"] - Optional display unit for force values in the callback payload.
|
|
396
437
|
* @returns {void}
|
|
397
438
|
* @public
|
|
398
439
|
*
|
|
@@ -400,8 +441,10 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
400
441
|
* device.notify((data) => {
|
|
401
442
|
* console.log('Received notification:', data);
|
|
402
443
|
* });
|
|
444
|
+
* device.notify((data) => { ... }, 'lbs');
|
|
403
445
|
*/
|
|
404
|
-
this.notify = (callback) => {
|
|
446
|
+
this.notify = (callback, unit) => {
|
|
447
|
+
this.unit = unit !== null && unit !== void 0 ? unit : "kg";
|
|
405
448
|
this.notifyCallback = callback;
|
|
406
449
|
};
|
|
407
450
|
/**
|
|
@@ -584,13 +627,96 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
584
627
|
if (device.bluetooth !== undefined) {
|
|
585
628
|
this.bluetooth = device.bluetooth;
|
|
586
629
|
}
|
|
587
|
-
this.
|
|
588
|
-
this.
|
|
589
|
-
this.
|
|
630
|
+
this.peak = Number.NEGATIVE_INFINITY;
|
|
631
|
+
this.mean = 0;
|
|
632
|
+
this.sum = 0;
|
|
590
633
|
this.dataPointCount = 0;
|
|
634
|
+
this.unit = "kg";
|
|
635
|
+
// Reset sampling rate calculation state
|
|
636
|
+
this.rateIntervalStart = 0;
|
|
637
|
+
this.rateIntervalSamples = 0;
|
|
591
638
|
this.createdAt = new Date();
|
|
592
639
|
this.updatedAt = new Date();
|
|
593
640
|
}
|
|
641
|
+
/**
|
|
642
|
+
* Builds a ForceMeasurement for a single zone (e.g. left/center/right).
|
|
643
|
+
* With one argument, current/peak/mean are all set to that value.
|
|
644
|
+
* With three arguments, uses the given current, peak, and mean for the zone.
|
|
645
|
+
* @param valueOrCurrent - Force value, or current force for this zone
|
|
646
|
+
* @param peak - Optional peak for this zone (required if mean is provided)
|
|
647
|
+
* @param mean - Optional mean for this zone
|
|
648
|
+
* @returns ForceMeasurement (no nested distribution)
|
|
649
|
+
* @protected
|
|
650
|
+
*/
|
|
651
|
+
buildZoneMeasurement(valueOrCurrent, peak, mean) {
|
|
652
|
+
const useFullStats = peak !== undefined && mean !== undefined;
|
|
653
|
+
const current = valueOrCurrent;
|
|
654
|
+
const zonePeak = useFullStats ? (peak === 0 && current < 0 ? current : peak) : valueOrCurrent;
|
|
655
|
+
const zoneMean = useFullStats ? mean : valueOrCurrent;
|
|
656
|
+
const zone = {
|
|
657
|
+
unit: this.unit,
|
|
658
|
+
timestamp: Date.now(),
|
|
659
|
+
current,
|
|
660
|
+
peak: zonePeak,
|
|
661
|
+
mean: zoneMean,
|
|
662
|
+
};
|
|
663
|
+
if (this.samplingRateHz !== undefined) {
|
|
664
|
+
zone.samplingRateHz = this.samplingRateHz;
|
|
665
|
+
}
|
|
666
|
+
return zone;
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* Calculates sampling rate: samples per second.
|
|
670
|
+
* Uses fixed intervals to avoid sliding window edge effects.
|
|
671
|
+
* @private
|
|
672
|
+
*/
|
|
673
|
+
updateSamplingRate() {
|
|
674
|
+
const now = Date.now();
|
|
675
|
+
if (this.rateIntervalStart === 0) {
|
|
676
|
+
this.rateIntervalStart = now;
|
|
677
|
+
}
|
|
678
|
+
this.rateIntervalSamples++;
|
|
679
|
+
const elapsed = now - this.rateIntervalStart;
|
|
680
|
+
if (elapsed >= Device.RATE_INTERVAL_MS) {
|
|
681
|
+
this.samplingRateHz = Math.round((this.rateIntervalSamples / elapsed) * 1000);
|
|
682
|
+
this.rateIntervalStart = now;
|
|
683
|
+
this.rateIntervalSamples = 0;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Builds a ForceMeasurement payload with unit and timestamp for notify callbacks.
|
|
688
|
+
* @param current - Current force at this sample
|
|
689
|
+
* @param distribution - Optional zone distribution: numbers (converted via buildZoneMeasurement) or full ForceMeasurement per zone
|
|
690
|
+
* @returns ForceMeasurement
|
|
691
|
+
* @protected
|
|
692
|
+
*/
|
|
693
|
+
buildForceMeasurement(current, distribution) {
|
|
694
|
+
this.updateSamplingRate();
|
|
695
|
+
const payload = {
|
|
696
|
+
unit: this.unit,
|
|
697
|
+
timestamp: Date.now(),
|
|
698
|
+
current: (0, utils_js_1.convertForce)(current, this.streamUnit, this.unit),
|
|
699
|
+
peak: (0, utils_js_1.convertForce)(this.peak, this.streamUnit, this.unit),
|
|
700
|
+
mean: (0, utils_js_1.convertForce)(this.mean, this.streamUnit, this.unit),
|
|
701
|
+
};
|
|
702
|
+
if (this.samplingRateHz !== undefined) {
|
|
703
|
+
payload.samplingRateHz = this.samplingRateHz;
|
|
704
|
+
}
|
|
705
|
+
if (distribution !== undefined &&
|
|
706
|
+
(distribution.left !== undefined || distribution.center !== undefined || distribution.right !== undefined)) {
|
|
707
|
+
payload.distribution = {};
|
|
708
|
+
if (distribution.left !== undefined) {
|
|
709
|
+
payload.distribution.left = (0, utils_js_1.convertForceMeasurement)(distribution.left, this.streamUnit, this.unit);
|
|
710
|
+
}
|
|
711
|
+
if (distribution.center !== undefined) {
|
|
712
|
+
payload.distribution.center = (0, utils_js_1.convertForceMeasurement)(distribution.center, this.streamUnit, this.unit);
|
|
713
|
+
}
|
|
714
|
+
if (distribution.right !== undefined) {
|
|
715
|
+
payload.distribution.right = (0, utils_js_1.convertForceMeasurement)(distribution.right, this.streamUnit, this.unit);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
return payload;
|
|
719
|
+
}
|
|
594
720
|
/**
|
|
595
721
|
* Returns the Bluetooth instance available for the current environment.
|
|
596
722
|
* In browsers, it returns the native Web Bluetooth API (i.e. `navigator.bluetooth`).
|
|
@@ -662,4 +788,10 @@ class Device extends base_model_js_1.BaseModel {
|
|
|
662
788
|
}
|
|
663
789
|
}
|
|
664
790
|
exports.Device = Device;
|
|
791
|
+
/**
|
|
792
|
+
* Interval duration (ms) for sampling rate calculation.
|
|
793
|
+
* @private
|
|
794
|
+
* @readonly
|
|
795
|
+
*/
|
|
796
|
+
Device.RATE_INTERVAL_MS = 1000;
|
|
665
797
|
//# sourceMappingURL=device.model.js.map
|