@hangtime/grip-connect 0.6.2 → 0.8.0

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 (128) hide show
  1. package/README.md +25 -10
  2. package/dist/index.d.ts +3 -2
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -1
  5. package/dist/index.js.map +1 -0
  6. package/dist/interfaces/base.interface.d.ts +1 -0
  7. package/dist/interfaces/base.interface.d.ts.map +1 -0
  8. package/dist/interfaces/base.interface.js +1 -0
  9. package/dist/interfaces/base.interface.js.map +1 -0
  10. package/dist/interfaces/callback.interface.d.ts +1 -0
  11. package/dist/interfaces/callback.interface.d.ts.map +1 -0
  12. package/dist/interfaces/callback.interface.js +1 -0
  13. package/dist/interfaces/callback.interface.js.map +1 -0
  14. package/dist/interfaces/command.interface.d.ts +7 -0
  15. package/dist/interfaces/command.interface.d.ts.map +1 -0
  16. package/dist/interfaces/command.interface.js +1 -0
  17. package/dist/interfaces/command.interface.js.map +1 -0
  18. package/dist/interfaces/device/climbro.interface.d.ts +1 -0
  19. package/dist/interfaces/device/climbro.interface.d.ts.map +1 -0
  20. package/dist/interfaces/device/climbro.interface.js +1 -0
  21. package/dist/interfaces/device/climbro.interface.js.map +1 -0
  22. package/dist/interfaces/device/entralpi.interface.d.ts +1 -0
  23. package/dist/interfaces/device/entralpi.interface.d.ts.map +1 -0
  24. package/dist/interfaces/device/entralpi.interface.js +1 -0
  25. package/dist/interfaces/device/entralpi.interface.js.map +1 -0
  26. package/dist/interfaces/device/forceboard.interface.d.ts +30 -3
  27. package/dist/interfaces/device/forceboard.interface.d.ts.map +1 -0
  28. package/dist/interfaces/device/forceboard.interface.js +1 -0
  29. package/dist/interfaces/device/forceboard.interface.js.map +1 -0
  30. package/dist/interfaces/device/kilterboard.interface.d.ts +1 -0
  31. package/dist/interfaces/device/kilterboard.interface.d.ts.map +1 -0
  32. package/dist/interfaces/device/kilterboard.interface.js +1 -0
  33. package/dist/interfaces/device/kilterboard.interface.js.map +1 -0
  34. package/dist/interfaces/device/motherboard.interface.d.ts +1 -0
  35. package/dist/interfaces/device/motherboard.interface.d.ts.map +1 -0
  36. package/dist/interfaces/device/motherboard.interface.js +1 -0
  37. package/dist/interfaces/device/motherboard.interface.js.map +1 -0
  38. package/dist/interfaces/device/mysmartboard.interface.d.ts +1 -0
  39. package/dist/interfaces/device/mysmartboard.interface.d.ts.map +1 -0
  40. package/dist/interfaces/device/mysmartboard.interface.js +1 -0
  41. package/dist/interfaces/device/mysmartboard.interface.js.map +1 -0
  42. package/dist/interfaces/device/progressor.interface.d.ts +1 -0
  43. package/dist/interfaces/device/progressor.interface.d.ts.map +1 -0
  44. package/dist/interfaces/device/progressor.interface.js +1 -0
  45. package/dist/interfaces/device/progressor.interface.js.map +1 -0
  46. package/dist/interfaces/device/smartboard-pro.interface.d.ts +7 -0
  47. package/dist/interfaces/device/smartboard-pro.interface.d.ts.map +1 -0
  48. package/dist/interfaces/device/smartboard-pro.interface.js +2 -0
  49. package/dist/interfaces/device/smartboard-pro.interface.js.map +1 -0
  50. package/dist/interfaces/device/wh-c06.interface.d.ts +1 -0
  51. package/dist/interfaces/device/wh-c06.interface.d.ts.map +1 -0
  52. package/dist/interfaces/device/wh-c06.interface.js +1 -0
  53. package/dist/interfaces/device/wh-c06.interface.js.map +1 -0
  54. package/dist/interfaces/device.interface.d.ts +1 -0
  55. package/dist/interfaces/device.interface.d.ts.map +1 -0
  56. package/dist/interfaces/device.interface.js +1 -0
  57. package/dist/interfaces/device.interface.js.map +1 -0
  58. package/dist/interfaces/download.interface.d.ts +1 -0
  59. package/dist/interfaces/download.interface.d.ts.map +1 -0
  60. package/dist/interfaces/download.interface.js +1 -0
  61. package/dist/interfaces/download.interface.js.map +1 -0
  62. package/dist/interfaces/index.d.ts +2 -0
  63. package/dist/interfaces/index.d.ts.map +1 -0
  64. package/dist/interfaces/index.js +1 -0
  65. package/dist/interfaces/index.js.map +1 -0
  66. package/dist/models/base.model.d.ts +1 -0
  67. package/dist/models/base.model.d.ts.map +1 -0
  68. package/dist/models/base.model.js +1 -0
  69. package/dist/models/base.model.js.map +1 -0
  70. package/dist/models/device/climbro.model.d.ts +1 -0
  71. package/dist/models/device/climbro.model.d.ts.map +1 -0
  72. package/dist/models/device/climbro.model.js +1 -0
  73. package/dist/models/device/climbro.model.js.map +1 -0
  74. package/dist/models/device/entralpi.model.d.ts +3 -2
  75. package/dist/models/device/entralpi.model.d.ts.map +1 -0
  76. package/dist/models/device/entralpi.model.js +3 -3
  77. package/dist/models/device/entralpi.model.js.map +1 -0
  78. package/dist/models/device/forceboard.model.d.ts +30 -5
  79. package/dist/models/device/forceboard.model.d.ts.map +1 -0
  80. package/dist/models/device/forceboard.model.js +97 -54
  81. package/dist/models/device/forceboard.model.js.map +1 -0
  82. package/dist/models/device/kilterboard.model.d.ts +1 -0
  83. package/dist/models/device/kilterboard.model.d.ts.map +1 -0
  84. package/dist/models/device/kilterboard.model.js +1 -0
  85. package/dist/models/device/kilterboard.model.js.map +1 -0
  86. package/dist/models/device/motherboard.model.d.ts +3 -2
  87. package/dist/models/device/motherboard.model.d.ts.map +1 -0
  88. package/dist/models/device/motherboard.model.js +3 -3
  89. package/dist/models/device/motherboard.model.js.map +1 -0
  90. package/dist/models/device/mysmartboard.model.d.ts +1 -0
  91. package/dist/models/device/mysmartboard.model.d.ts.map +1 -0
  92. package/dist/models/device/mysmartboard.model.js +1 -0
  93. package/dist/models/device/mysmartboard.model.js.map +1 -0
  94. package/dist/models/device/progressor.model.d.ts +3 -2
  95. package/dist/models/device/progressor.model.d.ts.map +1 -0
  96. package/dist/models/device/progressor.model.js +3 -3
  97. package/dist/models/device/progressor.model.js.map +1 -0
  98. package/dist/models/device/smartboard-pro.model.d.ts +11 -0
  99. package/dist/models/device/smartboard-pro.model.d.ts.map +1 -0
  100. package/dist/models/device/smartboard-pro.model.js +52 -0
  101. package/dist/models/device/smartboard-pro.model.js.map +1 -0
  102. package/dist/models/device/wh-c06.model.d.ts +1 -0
  103. package/dist/models/device/wh-c06.model.d.ts.map +1 -0
  104. package/dist/models/device/wh-c06.model.js +1 -0
  105. package/dist/models/device/wh-c06.model.js.map +1 -0
  106. package/dist/models/device.model.d.ts +6 -5
  107. package/dist/models/device.model.d.ts.map +1 -0
  108. package/dist/models/device.model.js +25 -38
  109. package/dist/models/device.model.js.map +1 -0
  110. package/dist/models/index.d.ts +2 -0
  111. package/dist/models/index.d.ts.map +1 -0
  112. package/dist/models/index.js +2 -0
  113. package/dist/models/index.js.map +1 -0
  114. package/package.json +2 -5
  115. package/src/index.ts +2 -0
  116. package/src/interfaces/command.interface.ts +9 -0
  117. package/src/interfaces/device/forceboard.interface.ts +33 -3
  118. package/src/interfaces/device/smartboard-pro.interface.ts +6 -0
  119. package/src/interfaces/index.ts +2 -0
  120. package/src/models/device/entralpi.model.ts +2 -4
  121. package/src/models/device/forceboard.model.ts +104 -54
  122. package/src/models/device/motherboard.model.ts +2 -4
  123. package/src/models/device/progressor.model.ts +2 -4
  124. package/src/models/device/smartboard-pro.model.ts +53 -0
  125. package/src/models/device.model.ts +27 -43
  126. package/src/models/index.ts +2 -0
  127. package/tsconfig.json +4 -0
  128. package/deno.json +0 -8
@@ -389,34 +389,27 @@ export class Device extends BaseModel {
389
389
  // HH-MM-SS
390
390
  const time = now.toTimeString().split(" ")[0].replace(/:/g, "-");
391
391
  const fileName = `data-export-${date}-${time}.${format}`;
392
- if (typeof window !== "undefined" && typeof document !== "undefined") {
393
- const mimeTypes = {
394
- csv: "text/csv",
395
- json: "application/json",
396
- xml: "application/xml",
397
- };
398
- // Create a Blob object containing the data
399
- const blob = new Blob([content], { type: mimeTypes[format] });
400
- // Create a URL for the Blob
401
- const url = globalThis.URL.createObjectURL(blob);
402
- // Create a link element
403
- const link = document.createElement("a");
404
- // Set link attributes
405
- link.href = url;
406
- link.setAttribute("download", fileName);
407
- // Append link to document body
408
- document.body.appendChild(link);
409
- // Programmatically click the link to trigger the download
410
- link.click();
411
- // Clean up: remove the link and revoke the URL
412
- document.body.removeChild(link);
413
- globalThis.URL.revokeObjectURL(url);
414
- }
415
- else {
416
- const { writeFile } = await import("node:fs/promises");
417
- await writeFile(fileName, content);
418
- console.log(`File saved as ${fileName}`);
419
- }
392
+ const mimeTypes = {
393
+ csv: "text/csv",
394
+ json: "application/json",
395
+ xml: "application/xml",
396
+ };
397
+ // Create a Blob object containing the data
398
+ const blob = new Blob([content], { type: mimeTypes[format] });
399
+ // Create a URL for the Blob
400
+ const url = globalThis.URL.createObjectURL(blob);
401
+ // Create a link element
402
+ const link = document.createElement("a");
403
+ // Set link attributes
404
+ link.href = url;
405
+ link.setAttribute("download", fileName);
406
+ // Append link to document body
407
+ document.body.appendChild(link);
408
+ // Programmatically click the link to trigger the download
409
+ link.click();
410
+ // Clean up: remove the link and revoke the URL
411
+ document.body.removeChild(link);
412
+ globalThis.URL.revokeObjectURL(url);
420
413
  };
421
414
  /**
422
415
  * Returns UUIDs of all services associated with the device.
@@ -444,24 +437,17 @@ export class Device extends BaseModel {
444
437
  if (typeof navigator !== "undefined" && navigator.bluetooth) {
445
438
  return navigator.bluetooth;
446
439
  }
447
- const process = await import("node:process");
448
- // If running in Node, Bun, or Deno environment
449
- if (typeof process !== "undefined" && process.versions?.node) {
450
- const { bluetooth } = await import("webbluetooth");
451
- return bluetooth;
452
- }
453
440
  // If none of the above conditions are met, throw an error.
454
441
  throw new Error("Bluetooth not available.");
455
442
  }
456
443
  /**
457
444
  * Handles notifications received from a characteristic.
458
- * @param {BluetoothRemoteGATTCharacteristic} characteristic - The notification event.
445
+ * @param {DataView} value - The notification event.
459
446
  *
460
447
  * @example
461
448
  * device.handleNotifications(someCharacteristic);
462
449
  */
463
- handleNotifications = (characteristic) => {
464
- const value = characteristic.value;
450
+ handleNotifications = (value) => {
465
451
  if (!value)
466
452
  return;
467
453
  this.updateTimestamp();
@@ -546,7 +532,7 @@ export class Device extends BaseModel {
546
532
  const target = event.target;
547
533
  if (target && target.value) {
548
534
  // Delegate the data to handleNotifications method
549
- this.handleNotifications(target);
535
+ this.handleNotifications(target.value);
550
536
  }
551
537
  };
552
538
  // Attach the event listener to listen for changes in the characteristic's value
@@ -729,3 +715,4 @@ export class Device extends BaseModel {
729
715
  }
730
716
  };
731
717
  }
718
+ //# sourceMappingURL=device.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.model.js","sourceRoot":"","sources":["../../src/models/device.model.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,6 @@ export { KilterBoard } from "./device/kilterboard.model";
5
5
  export { Motherboard } from "./device/motherboard.model";
6
6
  export { mySmartBoard } from "./device/mysmartboard.model";
7
7
  export { Progressor } from "./device/progressor.model";
8
+ export { SmartBoardPro } from "./device/smartboard-pro.model";
8
9
  export { WHC06 } from "./device/wh-c06.model";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
@@ -5,4 +5,6 @@ export { KilterBoard } from "./device/kilterboard.model";
5
5
  export { Motherboard } from "./device/motherboard.model";
6
6
  export { mySmartBoard } from "./device/mysmartboard.model";
7
7
  export { Progressor } from "./device/progressor.model";
8
+ export { SmartBoardPro } from "./device/smartboard-pro.model";
8
9
  export { WHC06 } from "./device/wh-c06.model";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hangtime/grip-connect",
3
- "version": "0.6.2",
3
+ "version": "0.8.0",
4
4
  "description": "Griptonite Motherboard, Tindeq Progressor, PitchSix Force Board, WHC-06, Entralpi, Climbro, mySmartBoard: Bluetooth API Force-Sensing strength analysis for climbers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,8 +33,5 @@
33
33
  "bugs": {
34
34
  "url": "https://github.com/Stevie-Ray/hangtime-grip-connect/issues"
35
35
  },
36
- "homepage": "https://stevie-ray.github.io/hangtime-grip-connect/",
37
- "dependencies": {
38
- "webbluetooth": "^3.3.2"
39
- }
36
+ "homepage": "https://stevie-ray.github.io/hangtime-grip-connect/"
40
37
  }
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ export type {
6
6
  IMotherboard,
7
7
  ImySmartBoard,
8
8
  IProgressor,
9
+ ISmartBoardPro,
9
10
  IWHC06,
10
11
  } from "./interfaces/index"
11
12
 
@@ -17,5 +18,6 @@ export {
17
18
  Motherboard,
18
19
  mySmartBoard,
19
20
  Progressor,
21
+ SmartBoardPro,
20
22
  WHC06,
21
23
  } from "./models/index"
@@ -48,6 +48,15 @@ export interface Commands {
48
48
  */
49
49
  GET_CALIBRATION?: string
50
50
 
51
+ // Force Board Portable
52
+
53
+ /**
54
+ * Sets the Force Board into Quick Start mode.
55
+ * In this mode, data transmission starts when force exceeds the threshold
56
+ * and stops when force drops below the threshold.
57
+ */
58
+ START_QUICK_MEAS?: string
59
+
51
60
  // Tindeq Progressor
52
61
 
53
62
  /**
@@ -23,21 +23,51 @@ export interface IForceBoard extends IDevice {
23
23
  manufacturer(): Promise<string | undefined>
24
24
 
25
25
  /**
26
- * Stops the data stream on the specified device.
26
+ * Stops the data stream on the specified device by setting it to Idle mode.
27
+ * Writes 0x07 to the Device Mode characteristic.
27
28
  * @returns {Promise<void>} A promise that resolves when the stream is stopped.
28
29
  */
29
30
  stop(): Promise<void>
30
31
 
31
32
  /**
32
- * Starts streaming data from the specified device.
33
+ * Starts streaming data from the specified device in Streaming Data Mode.
34
+ * Writes 0x04 to the Device Mode characteristic.
33
35
  * @param {number} [duration=0] - The duration of the stream in milliseconds. If set to 0, stream will continue indefinitely.
34
36
  * @returns {Promise<void>} A promise that resolves when the streaming operation is completed.
35
37
  */
36
38
  stream(duration?: number): Promise<void>
37
39
 
40
+ /**
41
+ * Tares the Force Board device using a characteristic to zero out the current load value.
42
+ * @returns {Promise<void>} A promise that resolves when the tare operation is completed.
43
+ */
44
+ tareByCharacteristic(): Promise<void>
45
+
46
+ /**
47
+ * Tares the Force Board device using the Device Mode characteristic.
48
+ * Writes 0x05 to the Device Mode characteristic to zero out the current load value.
49
+ * @returns {Promise<void>} A promise that resolves when the tare operation is completed.
50
+ */
51
+ tareByMode(): Promise<void>
52
+
53
+ /**
54
+ * Sets the threshold for the Quick Start mode.
55
+ * @param {number} thresholdLbs - The threshold value in pounds.
56
+ * @returns {Promise<void>} A promise that resolves when the threshold is set.
57
+ */
58
+ threshold(thresholdLbs: number): Promise<void>
59
+
38
60
  /**
39
61
  * Retrieves temperature information from the device.
40
- * @returns {Promise<string | undefined>} A Promise that resolves with the humidity level.
62
+ * @returns {Promise<string | undefined>} A Promise that resolves with the temperature information.
41
63
  */
42
64
  temperature(): Promise<string | undefined>
65
+
66
+ /**
67
+ * Starts the Force Board in Quick Start mode.
68
+ * Writes 0x06 to the Device Mode characteristic.
69
+ * @param {number} [duration=0] - The duration in milliseconds. If set to 0, mode will continue indefinitely.
70
+ * @returns {Promise<void>} A promise that resolves when the operation is completed.
71
+ */
72
+ quick(duration?: number): Promise<void>
43
73
  }
@@ -0,0 +1,6 @@
1
+ import type { IDevice } from "../device.interface"
2
+ /**
3
+ * Interface representing the Smartboard Climbing SmartBoard Pro device, extending the base Device interface.
4
+ */
5
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
6
+ export interface ISmartBoardPro extends IDevice {}
@@ -12,4 +12,6 @@ export type { ImySmartBoard } from "./device/mysmartboard.interface"
12
12
 
13
13
  export type { IProgressor } from "./device/progressor.interface"
14
14
 
15
+ export type { ISmartBoardPro } from "./device/smartboard-pro.interface"
16
+
15
17
  export type { IWHC06 } from "./device/wh-c06.interface"
@@ -157,11 +157,9 @@ export class Entralpi extends Device implements IEntralpi {
157
157
  * and updates mass data including maximum and average values.
158
158
  * It also handles command responses for retrieving device information.
159
159
  *
160
- * @param {BluetoothRemoteGATTCharacteristic} characteristic - The notification event.
160
+ * @param {DataView} value - The notification event.
161
161
  */
162
- override handleNotifications = (characteristic: BluetoothRemoteGATTCharacteristic): void => {
163
- const value: DataView | undefined = characteristic.value
164
-
162
+ override handleNotifications = (value: DataView): void => {
165
163
  if (value) {
166
164
  // Update timestamp
167
165
  this.updateTimestamp()
@@ -108,13 +108,13 @@ export class ForceBoard extends Device implements IForceBoard {
108
108
  uuid: "9a88d681-8df2-4afe-9e0d-c2bbbe773dd0",
109
109
  },
110
110
  {
111
- name: "Read + Notify",
111
+ name: "Force Data",
112
112
  id: "rx",
113
113
  uuid: "9a88d682-8df2-4afe-9e0d-c2bbbe773dd0",
114
114
  },
115
115
  {
116
- name: "Write",
117
- id: "",
116
+ name: "Tare",
117
+ id: "tare",
118
118
  uuid: "9a88d683-8df2-4afe-9e0d-c2bbbe773dd0",
119
119
  },
120
120
  {
@@ -123,8 +123,8 @@ export class ForceBoard extends Device implements IForceBoard {
123
123
  uuid: "9a88d685-8df2-4afe-9e0d-c2bbbe773dd0",
124
124
  },
125
125
  {
126
- name: "Write",
127
- id: "",
126
+ name: "Threshold",
127
+ id: "threshold",
128
128
  uuid: "9a88d686-8df2-4afe-9e0d-c2bbbe773dd0",
129
129
  },
130
130
  {
@@ -145,12 +145,12 @@ export class ForceBoard extends Device implements IForceBoard {
145
145
  ],
146
146
  },
147
147
  {
148
- name: "Weight Serivce",
148
+ name: "Weight Service",
149
149
  id: "weight",
150
150
  uuid: "467a8516-6e39-11eb-9439-0242ac130002",
151
151
  characteristics: [
152
152
  {
153
- name: "Read + Write",
153
+ name: "Device Mode",
154
154
  id: "tx",
155
155
  uuid: "467a8517-6e39-11eb-9439-0242ac130002",
156
156
  },
@@ -163,7 +163,10 @@ export class ForceBoard extends Device implements IForceBoard {
163
163
  },
164
164
  ],
165
165
  commands: {
166
- STOP_WEIGHT_MEAS: "",
166
+ START_WEIGHT_MEAS: String.fromCharCode(0x04), // Streaming Data Mode: continuously streams force data.
167
+ TARE_SCALE: String.fromCharCode(0x05), // Tare function: zeroes out the current load value
168
+ START_QUICK_MEAS: String.fromCharCode(0x06), // Quick Start Mode: Starts data transmission when a force value exceeds the Threshold and stops data transmission when the force data drops below the Threshold.
169
+ STOP_WEIGHT_MEAS: String.fromCharCode(0x07), // Idle Mode: Force Board is idle.
167
170
  },
168
171
  })
169
172
  }
@@ -181,53 +184,60 @@ export class ForceBoard extends Device implements IForceBoard {
181
184
  * and updates mass data including maximum and average values.
182
185
  * It also handles command responses for retrieving device information.
183
186
  *
184
- * @param {BluetoothRemoteGATTCharacteristic} characteristic - The notification event.
187
+ * @param {DataView} value - The notification event.
185
188
  */
186
- override handleNotifications = (characteristic: BluetoothRemoteGATTCharacteristic): void => {
187
- const value: DataView | undefined = characteristic.value
189
+ override handleNotifications = (value: DataView): void => {
188
190
  if (value) {
189
191
  // Update timestamp
190
192
  this.updateTimestamp()
191
193
  if (value.buffer) {
192
194
  const receivedTime: number = Date.now()
193
195
  const dataArray = new Uint8Array(value.buffer)
194
- // Skip the first 2 bytes, which are the command and length
195
- // The data is sent in groups of 3 bytes
196
- for (let i = 2; i < dataArray.length; i += 3) {
197
- const receivedData = (dataArray[i] << 16) | (dataArray[i + 1] << 8) | dataArray[i + 2]
198
- // Convert from LBS to KG
199
- const convertedReceivedData = receivedData * 0.453592
200
- // Tare correction
201
- const numericData = convertedReceivedData - this.applyTare(convertedReceivedData)
202
- // Add data to downloadable Array
203
- this.downloadPackets.push({
204
- received: receivedTime,
205
- sampleNum: this.dataPointCount,
206
- battRaw: 0,
207
- samples: [convertedReceivedData],
208
- masses: [numericData],
209
- })
210
196
 
211
- // Update massMax
212
- this.massMax = Math.max(Number(this.massMax), numericData).toFixed(1)
197
+ // First two bytes contain the number of samples in the packet
198
+ const numSamples = (dataArray[0] << 8) | dataArray[1]
199
+
200
+ // Process each sample (3 bytes per sample)
201
+ for (let i = 0; i < numSamples; i++) {
202
+ const offset = 2 + i * 3 // Skip the first 2 bytes which indicate number of samples
203
+ if (offset + 2 < dataArray.length) {
204
+ // Sample = byte1*32768 + byte2*256 + byte3
205
+ const receivedData = dataArray[offset] * 32768 + dataArray[offset + 1] * 256 + dataArray[offset + 2]
206
+
207
+ // Convert from LBS to KG
208
+ const convertedReceivedData = receivedData * 0.453592
209
+ // Tare correction
210
+ const numericData = convertedReceivedData - this.applyTare(convertedReceivedData)
211
+ // Add data to downloadable Array
212
+ this.downloadPackets.push({
213
+ received: receivedTime,
214
+ sampleNum: this.dataPointCount,
215
+ battRaw: 0,
216
+ samples: [convertedReceivedData],
217
+ masses: [numericData],
218
+ })
213
219
 
214
- // Update running sum and count
215
- const currentMassTotal = Math.max(-1000, numericData)
216
- this.massTotalSum += currentMassTotal
217
- this.dataPointCount++
220
+ // Update massMax
221
+ this.massMax = Math.max(Number(this.massMax), numericData).toFixed(1)
218
222
 
219
- // Calculate the average dynamically
220
- this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1)
223
+ // Update running sum and count
224
+ const currentMassTotal = Math.max(-1000, numericData)
225
+ this.massTotalSum += currentMassTotal
226
+ this.dataPointCount++
221
227
 
222
- // Check if device is being used
223
- this.activityCheck(numericData)
228
+ // Calculate the average dynamically
229
+ this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1)
224
230
 
225
- // Notify with weight data
226
- this.notifyCallback({
227
- massMax: this.massMax,
228
- massAverage: this.massAverage,
229
- massTotal: Math.max(-1000, numericData).toFixed(1),
230
- })
231
+ // Check if device is being used
232
+ this.activityCheck(numericData)
233
+
234
+ // Notify with weight data
235
+ this.notifyCallback({
236
+ massMax: this.massMax,
237
+ massAverage: this.massAverage,
238
+ massTotal: Math.max(-1000, numericData).toFixed(1),
239
+ })
240
+ }
231
241
  }
232
242
  }
233
243
  }
@@ -250,7 +260,7 @@ export class ForceBoard extends Device implements IForceBoard {
250
260
  }
251
261
 
252
262
  /**
253
- * Stops the data stream on the specified device.
263
+ * Stops the data stream on the specified device by setting it to Idle mode.
254
264
  * @returns {Promise<void>} A promise that resolves when the stream is stopped.
255
265
  */
256
266
  stop = async (): Promise<void> => {
@@ -258,26 +268,66 @@ export class ForceBoard extends Device implements IForceBoard {
258
268
  }
259
269
 
260
270
  /**
261
- * Starts streaming data from the specified device.
271
+ * Starts streaming data from the specified device in Streaming Data Mode.
262
272
  * @param {number} [duration=0] - The duration of the stream in milliseconds. If set to 0, stream will continue indefinitely.
263
273
  * @returns {Promise<void>} A promise that resolves when the streaming operation is completed.
264
274
  */
265
275
  stream = async (duration = 0): Promise<void> => {
266
- // Reset download packets
267
- this.downloadPackets.length = 0
268
- // Start streaming data
269
- await this.write("weight", "tx", new Uint8Array([0x04]), duration) // ASCII control character EOT (End of Transmission)
270
- // Stop streaming if duration is set
271
- if (duration !== 0) {
272
- await this.stop()
273
- }
276
+ // Start streaming data - Streaming Data Mode
277
+ await this.write("weight", "tx", this.commands.START_WEIGHT_MEAS, duration)
278
+ }
279
+
280
+ /**
281
+ * Sets the threshold in Lbs for the Quick Start mode.
282
+ * @param {number} thresholdLbs - The threshold value in pounds.
283
+ * @returns {Promise<void>} A promise that resolves when the threshold is set.
284
+ */
285
+ threshold = async (thresholdLbs: number): Promise<void> => {
286
+ const thresholdHex = thresholdLbs.toString(16).padStart(6, "0")
287
+ // 3-byte array from the hex string
288
+ const bytes = new Uint8Array(3)
289
+ bytes[0] = parseInt(thresholdHex.substring(0, 2), 16)
290
+ bytes[1] = parseInt(thresholdHex.substring(2, 4), 16)
291
+ bytes[2] = parseInt(thresholdHex.substring(4, 6), 16)
292
+
293
+ await this.write("forceboard", "threshold", String.fromCharCode(...bytes), 0)
294
+ }
295
+
296
+ /**
297
+ * Tares the Force Board device using a characteristic to zero out the current load value.
298
+ * @returns {Promise<void>} A promise that resolves when the tare operation is completed.
299
+ */
300
+ tareByCharacteristic = async (): Promise<void> => {
301
+ // Send tare command (0x01) to the tare characteristic
302
+ const tareValue = String.fromCharCode(0x01)
303
+ await this.write("forceboard", "tare", tareValue, 0)
304
+ }
305
+
306
+ /**
307
+ * Initiates a tare routine via the Device Mode characteristic.
308
+ * Writes 0x05 to the Device Mode characteristic to zero out the current load value.
309
+ * @returns {Promise<void>} A promise that resolves when the tare operation is completed.
310
+ */
311
+ tareByMode = async (): Promise<void> => {
312
+ await this.write("weight", "tx", this.commands.TARE_SCALE, 0)
274
313
  }
275
314
 
276
315
  /**
277
316
  * Retrieves temperature information from the device.
278
- * @returns {Promise<string>} A Promise that resolves with the manufacturer information,
317
+ * @returns {Promise<string>} A Promise that resolves with the temperature information,
279
318
  */
280
319
  temperature = async (): Promise<string | undefined> => {
281
320
  return await this.read("temperature", "level", 250)
282
321
  }
322
+
323
+ /**
324
+ * Starts the Force Board in Quick Start mode.
325
+ * Writes 0x06 to the Device Mode characteristic.
326
+ * @param {number} [duration=0] - The duration in milliseconds. If set to 0, mode will continue indefinitely.
327
+ * @returns {Promise<void>} A promise that resolves when the operation is completed.
328
+ */
329
+ quick = async (duration = 0): Promise<void> => {
330
+ // Start in Quick Start mode
331
+ await this.write("weight", "tx", this.commands.START_QUICK_MEAS, duration)
332
+ }
283
333
  }
@@ -202,11 +202,9 @@ export class Motherboard extends Device implements IMotherboard {
202
202
  * to extract samples, calibrate masses, and update running averages of mass data.
203
203
  * If the received data is not a valid hex packet, it returns the unprocessed data.
204
204
  *
205
- * @param {BluetoothRemoteGATTCharacteristic} characteristic - The notification event.
205
+ * @param {DataView} value - The notification event.
206
206
  */
207
- override handleNotifications = (characteristic: BluetoothRemoteGATTCharacteristic): void => {
208
- const value: DataView | undefined = characteristic.value
209
-
207
+ override handleNotifications = (value: DataView): void => {
210
208
  if (value) {
211
209
  // Update timestamp
212
210
  this.updateTimestamp()
@@ -121,11 +121,9 @@ export class Progressor extends Device implements IProgressor {
121
121
  * and updates mass data including maximum and average values.
122
122
  * It also handles command responses for retrieving device information.
123
123
  *
124
- * @param {BluetoothRemoteGATTCharacteristic} characteristic - The notification event.
124
+ * @param {DataView} value - The notification event.
125
125
  */
126
- override handleNotifications = (characteristic: BluetoothRemoteGATTCharacteristic): void => {
127
- const value: DataView | undefined = characteristic.value
128
-
126
+ override handleNotifications = (value: DataView): void => {
129
127
  if (value) {
130
128
  // Update timestamp
131
129
  this.updateTimestamp()
@@ -0,0 +1,53 @@
1
+ import { Device } from "../device.model"
2
+ import type { ISmartBoardPro } from "../../interfaces/device/smartboard-pro.interface"
3
+
4
+ /**
5
+ * Represents a Smartboard Climbing SmartBoard Pro device.
6
+ * TODO: Figure out services, do you own a SmartBoard Pro? Help us!
7
+ * {@link https://www.smartboard-climbing.com}
8
+ */
9
+ export class SmartBoardPro extends Device implements ISmartBoardPro {
10
+ constructor() {
11
+ super({
12
+ filters: [{ name: "SMARTBOARD" }],
13
+ services: [
14
+ {
15
+ name: "Basic Audio Announcement",
16
+ id: "audio",
17
+ uuid: "00001851-0000-1000-8000-00805f9b34fb",
18
+ characteristics: [
19
+ {
20
+ name: "",
21
+ id: "",
22
+ uuid: "0000937d-0000-1000-8000-00805f9b34fb",
23
+ },
24
+ ],
25
+ },
26
+ {
27
+ name: "Read + Notify",
28
+ id: "",
29
+ uuid: "0000403d-0000-1000-8000-00805f9b34fb",
30
+ characteristics: [
31
+ {
32
+ name: "",
33
+ id: "",
34
+ uuid: "00001583-0000-1000-8000-00805f9b34fb",
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ name: "Generic Attribute",
40
+ id: "attribute",
41
+ uuid: "00001801-0000-1000-8000-00805f9b34fb",
42
+ characteristics: [
43
+ {
44
+ name: "Service Changed",
45
+ id: "service",
46
+ uuid: "00002a05-0000-1000-8000-00805f9b34fb",
47
+ },
48
+ ],
49
+ },
50
+ ],
51
+ })
52
+ }
53
+ }