@hangtime/grip-connect 0.8.7 → 0.10.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 (123) hide show
  1. package/README.md +15 -9
  2. package/dist/cjs/index.d.ts +2 -1
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +3 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/interfaces/callback.interface.d.ts +37 -31
  7. package/dist/cjs/interfaces/callback.interface.d.ts.map +1 -1
  8. package/dist/cjs/interfaces/device/climbro.interface.d.ts +5 -0
  9. package/dist/cjs/interfaces/device/climbro.interface.d.ts.map +1 -1
  10. package/dist/cjs/interfaces/device/kilterboard.interface.d.ts +3 -2
  11. package/dist/cjs/interfaces/device/kilterboard.interface.d.ts.map +1 -1
  12. package/dist/cjs/interfaces/device.interface.d.ts +2 -2
  13. package/dist/cjs/interfaces/device.interface.d.ts.map +1 -1
  14. package/dist/cjs/models/device/climbro.model.d.ts +32 -1
  15. package/dist/cjs/models/device/climbro.model.d.ts.map +1 -1
  16. package/dist/cjs/models/device/climbro.model.js +129 -3
  17. package/dist/cjs/models/device/climbro.model.js.map +1 -1
  18. package/dist/cjs/models/device/entralpi.model.d.ts.map +1 -1
  19. package/dist/cjs/models/device/entralpi.model.js +5 -9
  20. package/dist/cjs/models/device/entralpi.model.js.map +1 -1
  21. package/dist/cjs/models/device/forceboard.model.d.ts.map +1 -1
  22. package/dist/cjs/models/device/forceboard.model.js +5 -9
  23. package/dist/cjs/models/device/forceboard.model.js.map +1 -1
  24. package/dist/cjs/models/device/kilterboard.model.d.ts +5 -3
  25. package/dist/cjs/models/device/kilterboard.model.d.ts.map +1 -1
  26. package/dist/cjs/models/device/kilterboard.model.js +52 -16
  27. package/dist/cjs/models/device/kilterboard.model.js.map +1 -1
  28. package/dist/cjs/models/device/motherboard.model.d.ts +7 -0
  29. package/dist/cjs/models/device/motherboard.model.d.ts.map +1 -1
  30. package/dist/cjs/models/device/motherboard.model.js +28 -15
  31. package/dist/cjs/models/device/motherboard.model.js.map +1 -1
  32. package/dist/cjs/models/device/pb-700bt.model.d.ts +63 -0
  33. package/dist/cjs/models/device/pb-700bt.model.d.ts.map +1 -0
  34. package/dist/cjs/models/device/pb-700bt.model.js +247 -0
  35. package/dist/cjs/models/device/pb-700bt.model.js.map +1 -0
  36. package/dist/cjs/models/device/progressor.model.d.ts.map +1 -1
  37. package/dist/cjs/models/device/progressor.model.js +4 -8
  38. package/dist/cjs/models/device/progressor.model.js.map +1 -1
  39. package/dist/cjs/models/device/smartboard-pro.model.d.ts +8 -0
  40. package/dist/cjs/models/device/smartboard-pro.model.d.ts.map +1 -1
  41. package/dist/cjs/models/device/smartboard-pro.model.js +62 -6
  42. package/dist/cjs/models/device/smartboard-pro.model.js.map +1 -1
  43. package/dist/cjs/models/device/wh-c06.model.d.ts.map +1 -1
  44. package/dist/cjs/models/device/wh-c06.model.js +5 -9
  45. package/dist/cjs/models/device/wh-c06.model.js.map +1 -1
  46. package/dist/cjs/models/device.model.d.ts +72 -12
  47. package/dist/cjs/models/device.model.d.ts.map +1 -1
  48. package/dist/cjs/models/device.model.js +127 -5
  49. package/dist/cjs/models/device.model.js.map +1 -1
  50. package/dist/cjs/models/index.d.ts +2 -1
  51. package/dist/cjs/models/index.d.ts.map +1 -1
  52. package/dist/cjs/models/index.js +4 -1
  53. package/dist/cjs/models/index.js.map +1 -1
  54. package/dist/index.d.ts +2 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/interfaces/callback.interface.d.ts +37 -31
  59. package/dist/interfaces/callback.interface.d.ts.map +1 -1
  60. package/dist/interfaces/device/climbro.interface.d.ts +5 -0
  61. package/dist/interfaces/device/climbro.interface.d.ts.map +1 -1
  62. package/dist/interfaces/device/kilterboard.interface.d.ts +3 -2
  63. package/dist/interfaces/device/kilterboard.interface.d.ts.map +1 -1
  64. package/dist/interfaces/device.interface.d.ts +2 -2
  65. package/dist/interfaces/device.interface.d.ts.map +1 -1
  66. package/dist/models/device/climbro.model.d.ts +32 -1
  67. package/dist/models/device/climbro.model.d.ts.map +1 -1
  68. package/dist/models/device/climbro.model.js +127 -3
  69. package/dist/models/device/climbro.model.js.map +1 -1
  70. package/dist/models/device/entralpi.model.d.ts.map +1 -1
  71. package/dist/models/device/entralpi.model.js +5 -9
  72. package/dist/models/device/entralpi.model.js.map +1 -1
  73. package/dist/models/device/forceboard.model.d.ts.map +1 -1
  74. package/dist/models/device/forceboard.model.js +5 -9
  75. package/dist/models/device/forceboard.model.js.map +1 -1
  76. package/dist/models/device/kilterboard.model.d.ts +5 -3
  77. package/dist/models/device/kilterboard.model.d.ts.map +1 -1
  78. package/dist/models/device/kilterboard.model.js +52 -16
  79. package/dist/models/device/kilterboard.model.js.map +1 -1
  80. package/dist/models/device/motherboard.model.d.ts +7 -0
  81. package/dist/models/device/motherboard.model.d.ts.map +1 -1
  82. package/dist/models/device/motherboard.model.js +28 -15
  83. package/dist/models/device/motherboard.model.js.map +1 -1
  84. package/dist/models/device/pb-700bt.model.d.ts +63 -0
  85. package/dist/models/device/pb-700bt.model.d.ts.map +1 -0
  86. package/dist/models/device/pb-700bt.model.js +243 -0
  87. package/dist/models/device/pb-700bt.model.js.map +1 -0
  88. package/dist/models/device/progressor.model.d.ts.map +1 -1
  89. package/dist/models/device/progressor.model.js +4 -8
  90. package/dist/models/device/progressor.model.js.map +1 -1
  91. package/dist/models/device/smartboard-pro.model.d.ts +8 -0
  92. package/dist/models/device/smartboard-pro.model.d.ts.map +1 -1
  93. package/dist/models/device/smartboard-pro.model.js +62 -6
  94. package/dist/models/device/smartboard-pro.model.js.map +1 -1
  95. package/dist/models/device/wh-c06.model.d.ts.map +1 -1
  96. package/dist/models/device/wh-c06.model.js +5 -9
  97. package/dist/models/device/wh-c06.model.js.map +1 -1
  98. package/dist/models/device.model.d.ts +72 -12
  99. package/dist/models/device.model.d.ts.map +1 -1
  100. package/dist/models/device.model.js +149 -14
  101. package/dist/models/device.model.js.map +1 -1
  102. package/dist/models/index.d.ts +2 -1
  103. package/dist/models/index.d.ts.map +1 -1
  104. package/dist/models/index.js +2 -1
  105. package/dist/models/index.js.map +1 -1
  106. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  107. package/package.json +4 -1
  108. package/src/index.ts +11 -0
  109. package/src/interfaces/callback.interface.ts +41 -31
  110. package/src/interfaces/device/climbro.interface.ts +8 -2
  111. package/src/interfaces/device/kilterboard.interface.ts +2 -2
  112. package/src/interfaces/device.interface.ts +2 -2
  113. package/src/models/device/climbro.model.ts +146 -3
  114. package/src/models/device/entralpi.model.ts +5 -9
  115. package/src/models/device/forceboard.model.ts +5 -9
  116. package/src/models/device/kilterboard.model.ts +56 -19
  117. package/src/models/device/motherboard.model.ts +32 -15
  118. package/src/models/device/pb-700bt.model.ts +263 -0
  119. package/src/models/device/progressor.model.ts +4 -8
  120. package/src/models/device/smartboard-pro.model.ts +73 -6
  121. package/src/models/device/wh-c06.model.ts +5 -9
  122. package/src/models/device.model.ts +179 -16
  123. package/src/models/index.ts +3 -1
package/README.md CHANGED
@@ -8,7 +8,7 @@ the [Griptonite Motherboard](https://griptonite.io/shop/motherboard/),
8
8
  [Tindeq Progressor](https://tindeq.com/product/progressor/),
9
9
  [PitchSix Force Board](https://pitchsix.com/products/force-board-portable),
10
10
  [Weiheng WH-C06](https://weihengmanufacturer.com/products/wh-c06-bluetooth-300kg-hanging-scale/),
11
- [Forma DUE](https://forma.training/products/due-pre-sale), [Entralpi](https://entralpi.com/),
11
+ [Frez Dyno](https://shop.frez.app/products/pre-order-frez-dyno), [Entralpi](https://entralpi.com/),
12
12
  [Climbro](https://climbro.com/), or [mySmartBoard](https://www.smartboard-climbing.com/)
13
13
 
14
14
  And LED system boards from [Aurora Climbing](https://auroraclimbing.com/) like the
@@ -18,6 +18,8 @@ And LED system boards from [Aurora Climbing](https://auroraclimbing.com/) like t
18
18
  [Decoy Board](https://decoy-holds.com/pages/decoy-board), [Touchstone Board](https://touchstoneboardapp.com/) and
19
19
  [So iLL Board](https://apps.apple.com/us/app/so-ill-board/id1358056082).
20
20
 
21
+ And gyroscopic hand exercisers, such as the [NSD PB-700BT](https://www.nsd.com.tw/).
22
+
21
23
  The library is available in multiple flavors to support different platforms:
22
24
 
23
25
  - **Web**: The core package for web applications using the Web Bluetooth API
@@ -26,7 +28,7 @@ The library is available in multiple flavors to support different platforms:
26
28
  - **CLI**: Command-line tools for device management and data analysis
27
29
 
28
30
  Learn more: [Documentation](https://stevie-ray.github.io/hangtime-grip-connect/) -
29
- [Browser Support](https://caniuse.com/web-bluetooth)
31
+ [Browser Support](https://caniuse.com/web-bluetooth) - [Discord](https://discord.gg/f7QQnEBQQt)
30
32
 
31
33
  > This project is provided "as-is" without any express or implied warranties. By using this software, you assume all
32
34
  > risks associated with its use, including but not limited to hardware damage, data loss, or any other issues that may
@@ -36,6 +38,7 @@ Learn more: [Documentation](https://stevie-ray.github.io/hangtime-grip-connect/)
36
38
  ## Try it out
37
39
 
38
40
  [Chart](https://grip-connect.vercel.app/) - [Flappy Bird](https://grip-connect-flappy-bird.vercel.app/) -
41
+ [Pong](https://hangtime-grip-connect-pong.vercel.app/) -
39
42
  [Kilter Board](https://grip-connect-kilter-board.vercel.app/?route=p1083r15p1117r15p1164r12p1185r12p1233r13p1282r13p1303r13p1372r13p1392r14p1505r15)
40
43
 
41
44
  ![Force-Sensing Climbing Devices](https://github.com/user-attachments/assets/c1a8ef3b-8d94-47b6-84a6-f73893e948d6)
@@ -77,7 +80,7 @@ const motherboard = new Motherboard()
77
80
 
78
81
  // Optional: Custom data handler
79
82
  motherboard.notify((data) => {
80
- // { massTotal: "0", massMax: "0", massAverage: "0", massLeft: "0", massCenter: "0", massRight: "0" }
83
+ // { unit, timestamp, current, peak, mean, distribution? }
81
84
  console.log(data)
82
85
  })
83
86
 
@@ -135,8 +138,9 @@ document.querySelector("#motherboard").addEventListener("click", async () => {
135
138
  - ✅ [Kilter Board](https://stevie-ray.github.io/hangtime-grip-connect/devices/kilterboard.html)
136
139
  - ✅ [Entralpi](https://stevie-ray.github.io/hangtime-grip-connect/devices/entralpi.html) / Lefu / Unique CW275 Scale
137
140
  - ✅ [PitchSix - Force Board](https://stevie-ray.github.io/hangtime-grip-connect/devices/forceboard.html)
138
- - ➡️ [Forma - DUE](https://stevie-ray.github.io/hangtime-grip-connect/devices/due.html)
139
- - ➡️ [Climbro](https://stevie-ray.github.io/hangtime-grip-connect/devices/climbro.html)
141
+ - [Climbro](https://stevie-ray.github.io/hangtime-grip-connect/devices/climbro.html)
142
+ - [NSD PB-700BT](https://stevie-ray.github.io/hangtime-grip-connect/devices/pb-700bt.html)
143
+ - ➡️ [Frez - Dyno](https://stevie-ray.github.io/hangtime-grip-connect/devices/dyno.html)
140
144
  - ➡️ [Smartboard Climbing - mySmartBoard](https://stevie-ray.github.io/hangtime-grip-connect/devices/mysmartboard.html)
141
145
  - ➡️
142
146
  [Smartboard Climbing - SmartBoard Pro](https://stevie-ray.github.io/hangtime-grip-connect/devices/smartboard-pro.html)
@@ -165,21 +169,23 @@ npm install
165
169
  A special thank you to:
166
170
 
167
171
  - [@CassimLadha](https://github.com/CassimLadha) for sharing insights on reading the Motherboards data.
168
- - [@donaldharvey](https://github.com/donaldharvey) for a valuable example on connecting to the Motherboard.
172
+ - [@donaldharvey](https://github.com/donaldharvey) for a valuable example of connecting to the Motherboard.
169
173
  - [@ecstrema](https://github.com/ecstrema) for providing [examples](https://github.com/ecstrema/entralpi-games) on how
170
174
  to play games with the Entralpi.
171
175
  - [Tindeq](https://tindeq.com/) for providing an open [Progressor API](https://tindeq.com/progressor_api/).
172
176
  - [PitchSix](https://pitchsix.com/) for the [Force Board Portable Public API](https://pitchsix.com/pages/downloads).
173
177
  - [@StuartLittlefair](https://github.com/StuartLittlefair) for his
174
178
  [PyTindeq](https://github.com/StuartLittlefair/PyTindeq) implementation.
175
- - [@Phil9l](https://github.com/phil9l) for his research and providing a [blog](https://bazun.me/blog/kiterboard/) on how
176
- to connect with the Kilter Board.
179
+ - [@Phil9l](https://github.com/phil9l) for his research and providing a [blog post](https://bazun.me/blog/kiterboard/)
180
+ on how to connect with the Kilter Board.
177
181
  - [@1-max-1](https://github.com/1-max-1) for the docs on his Kilter Board
178
- [simulator](https://github.com/1-max-1/fake_kilter_board) that I coverted to
182
+ [simulator](https://github.com/1-max-1/fake_kilter_board) that I converted to
179
183
  [hangtime-arduino-kilterboard](https://github.com/Stevie-Ray/hangtime-arduino-kilterboard).
180
184
  - [@sebws](https://github.com/sebws) for a [code sample](https://github.com/sebws/Crane) of the Weiheng WH-C06 App.
181
185
  - [@olrut](https://github.com/olrut) for the React Native / Expo [CraneGrip](https://github.com/olrut/CraneGrip) example
182
186
  App.
187
+ - [@ninopelov](https://github.com/ninopelov) and the Climbro Team for testing and providing insights into their
188
+ protocol.
183
189
 
184
190
  ## Disclaimer
185
191
 
@@ -1,3 +1,4 @@
1
1
  export type { IClimbro, IEntralpi, IForceBoard, IKilterBoard, IMotherboard, ImySmartBoard, IProgressor, ISmartBoardPro, IWHC06, } from "./interfaces/index.js";
2
- export { Climbro, Entralpi, ForceBoard, KilterBoard, Motherboard, mySmartBoard, Progressor, SmartBoardPro, WHC06, } from "./models/index.js";
2
+ export type { ForceUnit, ForceStats, ForceMeasurement, NotifyCallback, WriteCallback, ActiveCallback, } from "./interfaces/callback.interface.js";
3
+ export { Climbro, Entralpi, ForceBoard, KilterBoard, KilterBoardPlacementRoles, Motherboard, mySmartBoard, PB700BT, Progressor, SmartBoardPro, WHC06, } from "./models/index.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,MAAM,GACP,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,KAAK,GACN,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,MAAM,GACP,MAAM,uBAAuB,CAAA;AAE9B,YAAY,EACV,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,aAAa,EACb,KAAK,GACN,MAAM,mBAAmB,CAAA"}
package/dist/cjs/index.js CHANGED
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WHC06 = exports.SmartBoardPro = exports.Progressor = exports.mySmartBoard = exports.Motherboard = exports.KilterBoard = exports.ForceBoard = exports.Entralpi = exports.Climbro = void 0;
3
+ exports.WHC06 = exports.SmartBoardPro = exports.Progressor = exports.PB700BT = exports.mySmartBoard = exports.Motherboard = exports.KilterBoardPlacementRoles = exports.KilterBoard = exports.ForceBoard = exports.Entralpi = exports.Climbro = void 0;
4
4
  var index_js_1 = require("./models/index.js");
5
5
  Object.defineProperty(exports, "Climbro", { enumerable: true, get: function () { return index_js_1.Climbro; } });
6
6
  Object.defineProperty(exports, "Entralpi", { enumerable: true, get: function () { return index_js_1.Entralpi; } });
7
7
  Object.defineProperty(exports, "ForceBoard", { enumerable: true, get: function () { return index_js_1.ForceBoard; } });
8
8
  Object.defineProperty(exports, "KilterBoard", { enumerable: true, get: function () { return index_js_1.KilterBoard; } });
9
+ Object.defineProperty(exports, "KilterBoardPlacementRoles", { enumerable: true, get: function () { return index_js_1.KilterBoardPlacementRoles; } });
9
10
  Object.defineProperty(exports, "Motherboard", { enumerable: true, get: function () { return index_js_1.Motherboard; } });
10
11
  Object.defineProperty(exports, "mySmartBoard", { enumerable: true, get: function () { return index_js_1.mySmartBoard; } });
12
+ Object.defineProperty(exports, "PB700BT", { enumerable: true, get: function () { return index_js_1.PB700BT; } });
11
13
  Object.defineProperty(exports, "Progressor", { enumerable: true, get: function () { return index_js_1.Progressor; } });
12
14
  Object.defineProperty(exports, "SmartBoardPro", { enumerable: true, get: function () { return index_js_1.SmartBoardPro; } });
13
15
  Object.defineProperty(exports, "WHC06", { enumerable: true, get: function () { return index_js_1.WHC06; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAYA,8CAU0B;AATxB,mGAAA,OAAO,OAAA;AACP,oGAAA,QAAQ,OAAA;AACR,sGAAA,UAAU,OAAA;AACV,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,iGAAA,KAAK,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAqBA,8CAY0B;AAXxB,mGAAA,OAAO,OAAA;AACP,oGAAA,QAAQ,OAAA;AACR,sGAAA,UAAU,OAAA;AACV,uGAAA,WAAW,OAAA;AACX,qHAAA,yBAAyB,OAAA;AACzB,uGAAA,WAAW,OAAA;AACX,wGAAA,YAAY,OAAA;AACZ,mGAAA,OAAO,OAAA;AACP,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,iGAAA,KAAK,OAAA"}
@@ -1,45 +1,51 @@
1
+ /** Force-equivalent display unit used for all values in this measurement */
2
+ export type ForceUnit = "kg" | "lbs";
1
3
  /**
2
- * Represents the mass data collected from a device.
4
+ * Core statistical values describing force over a time window or session.
3
5
  */
4
- export interface massObject {
5
- /**
6
- * The total mass measured from the device.
7
- * This is the overall weight or force reading.
8
- */
9
- massTotal: string;
10
- /**
11
- * The maximum mass recorded during the session.
12
- * This is the highest weight or force value detected.
13
- */
14
- massMax: string;
15
- /**
16
- * The average mass calculated from all the recorded data points.
17
- * This represents the mean value of the mass measurements.
18
- */
19
- massAverage: string;
20
- /**
21
- * The mass recorded on the left side of the device (optional for Motherboard devices).
22
- * Used for devices that measure force across multiple zones.
23
- */
24
- massLeft?: string;
6
+ export interface ForceStats {
7
+ /** Instantaneous total force at the current sample moment */
8
+ current: number;
9
+ /** Highest instantaneous force recorded within the measured window or session */
10
+ peak: number;
11
+ /** Mean (average) force across all samples in the measured window or session */
12
+ mean: number;
13
+ }
14
+ /**
15
+ * Complete force measurement including timing, unit, and optional spatial distribution.
16
+ * Can represent either a single real-time sample or a rolling/session summary.
17
+ */
18
+ export interface ForceMeasurement extends ForceStats {
19
+ /** Display unit for all force values (force-equivalent kgf or lbf) */
20
+ unit: ForceUnit;
21
+ /** Unix epoch timestamp in milliseconds indicating when the measurement was recorded */
22
+ timestamp: number;
25
23
  /**
26
- * The mass recorded at the center of the device (optional for Motherboard devices).
27
- * Used for devices that measure force distribution across a center zone.
24
+ * Sampling frequency of the underlying force signal in Hertz.
25
+ * Required for time-dependent metrics such as RFD, impulse, or filtering.
28
26
  */
29
- massCenter?: string;
27
+ samplingRateHz?: number;
30
28
  /**
31
- * The mass recorded on the right side of the device (optional for Motherboard devices).
32
- * Used for devices that measure force across multiple zones.
29
+ * Optional force distribution across multiple sensor zones.
30
+ * Each zone follows the exact same measurement structure as the parent.
31
+ * Nested distributions should be avoided to keep the model one level deep.
33
32
  */
34
- massRight?: string;
33
+ distribution?: {
34
+ /** Force statistics for the left sensor zone */
35
+ left?: ForceMeasurement;
36
+ /** Force statistics for the center sensor zone */
37
+ center?: ForceMeasurement;
38
+ /** Force statistics for the right sensor zone */
39
+ right?: ForceMeasurement;
40
+ };
35
41
  }
36
42
  /**
37
43
  * Defines the type for a callback function that handles mass data notifications.
38
- * The callback receives a `massObject` as the parameter.
44
+ * The callback receives a `ForceMeasurement` as the parameter.
39
45
  * @callback NotifyCallback
40
- * @param {massObject} data - The mass data passed to the callback.
46
+ * @param {ForceMeasurement} data - The force measurement data passed to the callback.
41
47
  */
42
- export type NotifyCallback = (data: massObject) => void;
48
+ export type NotifyCallback = (data: ForceMeasurement) => void;
43
49
  /**
44
50
  * Defines the type for a callback function that handles write operations to the device.
45
51
  * The callback receives the data string written to the device.
@@ -1 +1 @@
1
- {"version":3,"file":"callback.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/callback.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAElD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA"}
1
+ {"version":3,"file":"callback.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/callback.interface.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IAEf,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAA;IAEZ,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,sEAAsE;IACtE,IAAI,EAAE,SAAS,CAAA;IAEf,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,YAAY,CAAC,EAAE;QACb,gDAAgD;QAChD,IAAI,CAAC,EAAE,gBAAgB,CAAA;QAEvB,kDAAkD;QAClD,MAAM,CAAC,EAAE,gBAAgB,CAAA;QAEzB,iDAAiD;QACjD,KAAK,CAAC,EAAE,gBAAgB,CAAA;KACzB,CAAA;CACF;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAElD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA"}
@@ -3,5 +3,10 @@ import type { IDevice } from "../device.interface.js";
3
3
  * Interface representing the Climbro device, extending the base Device interface.
4
4
  */
5
5
  export interface IClimbro extends IDevice {
6
+ /**
7
+ * Retrieves battery level from the device.
8
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
9
+ */
10
+ battery(): Promise<string | undefined>;
6
11
  }
7
12
  //# sourceMappingURL=climbro.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD;;GAEG;AAEH,MAAM,WAAW,QAAS,SAAQ,OAAO;CAAG"}
1
+ {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACvC"}
@@ -5,12 +5,13 @@ import type { IDevice } from "../device.interface.js";
5
5
  export interface IKilterBoard extends IDevice {
6
6
  /**
7
7
  * Configures the LEDs based on an array of climb placements.
8
- * @param {{ position: number; role_id: number }[]} config - Array of climb placements for the LEDs.
8
+ * @param {{ position: number; role_id?: number; color?: string }[]} config - Array of climb placements for the LEDs. Either role_id or color (hex string) must be provided.
9
9
  * @returns {Promise<number[] | undefined>} A promise that resolves with the payload array for the Kilter Board if LED settings were applied, or `undefined` if no action was taken or for the Motherboard.
10
10
  */
11
11
  led(config: {
12
12
  position: number;
13
- role_id: number;
13
+ role_id?: number;
14
+ color?: string;
14
15
  }[]): Promise<number[] | undefined>;
15
16
  }
16
17
  //# sourceMappingURL=kilterboard.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kilterboard.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/kilterboard.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;CACpF"}
1
+ {"version":3,"file":"kilterboard.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/kilterboard.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;CACrG"}
@@ -1,5 +1,5 @@
1
1
  import type { IBase } from "./base.interface.js";
2
- import type { massObject } from "./callback.interface.js";
2
+ import type { ForceMeasurement } from "./callback.interface.js";
3
3
  import type { Commands } from "./command.interface.js";
4
4
  /**
5
5
  * Represents a characteristic of a Bluetooth service.
@@ -151,7 +151,7 @@ export interface IDevice extends IBase {
151
151
  * console.log('Received notification:', data);
152
152
  * });
153
153
  */
154
- notify(callback: (data: massObject) => void): void;
154
+ notify(callback: (data: ForceMeasurement) => void): void;
155
155
  /**
156
156
  * Reads the value of the specified characteristic from the device.
157
157
  * @param {string} serviceId - The service ID where the characteristic belongs.
@@ -1 +1 @@
1
- {"version":3,"file":"device.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;GAEG;AACH,UAAU,cAAc;IACtB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,cAAc,CAAC,EAAE,iCAAiC,CAAA;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,eAAe,EAAE,cAAc,EAAE,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,KAAK;IACpC;;;;;;OAMG;IACH,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAEhC;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAE3B;;;;;;OAMG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAErG;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhF;;;;;;;;;;;OAWG;IACH,UAAU,IAAI,IAAI,CAAA;IAElB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAA;IAE/C;;;;;;;;;;;OAWG;IACH,WAAW,IAAI,OAAO,CAAA;IAEtB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAA;IAElD;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEjG;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAEhC;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,EACxC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB"}
1
+ {"version":3,"file":"device.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEtD;;GAEG;AACH,UAAU,cAAc;IACtB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,cAAc,CAAC,EAAE,iCAAiC,CAAA;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,eAAe,EAAE,cAAc,EAAE,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,KAAK;IACpC;;;;;;OAMG;IACH,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAEhC;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAE3B;;;;;;OAMG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAElB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAErG;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhF;;;;;;;;;;;OAWG;IACH,UAAU,IAAI,IAAI,CAAA;IAElB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAA;IAE/C;;;;;;;;;;;OAWG;IACH,WAAW,IAAI,OAAO,CAAA;IAEtB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAA;IAExD;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAEjG;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAEhC;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,EACxC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB"}
@@ -2,10 +2,41 @@ import { Device } from "../device.model.js";
2
2
  import type { IClimbro } from "../../interfaces/device/climbro.interface.js";
3
3
  /**
4
4
  * Represents a Climbro device.
5
- * TODO: Add services, do you own a Climbro? Help us!
6
5
  * {@link https://climbro.com/}
7
6
  */
8
7
  export declare class Climbro extends Device implements IClimbro {
8
+ /**
9
+ * Battery constants
10
+ */
11
+ private static readonly minBatteryDisc;
12
+ private static readonly maxBatteryDisc;
13
+ private static readonly batRangeDisc;
14
+ private static readonly batLevelCoef;
15
+ /**
16
+ * Synchronization flag used to track the current data type being processed.
17
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
18
+ * @type {number}
19
+ * @private
20
+ */
21
+ private flagSynchro;
22
+ /**
23
+ * Current battery level percentage calculated from the device's battery voltage.
24
+ * @type {number}
25
+ * @private
26
+ */
27
+ private batteryLevel;
9
28
  constructor();
29
+ /**
30
+ * Retrieves battery level from the device.
31
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
32
+ */
33
+ battery: () => Promise<string | undefined>;
34
+ /**
35
+ * Handles data received from the device, processes force measurements and battery data
36
+ * according to the Climbro protocol.
37
+ *
38
+ * @param {DataView} value - The notification event.
39
+ */
40
+ handleNotifications: (value: DataView) => void;
10
41
  }
11
42
  //# sourceMappingURL=climbro.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAE5E;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;;CAOtD"}
1
+ {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAoB5E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;IACrD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAoD;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAEtE;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAI;IAEvB;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAI;;IAsBxB;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9C;IAED;;;;;OAKG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAyErD;CACF"}
@@ -1,19 +1,145 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.Climbro = void 0;
4
5
  const device_model_js_1 = require("../device.model.js");
6
+ /**
7
+ * Climbro protocol constants
8
+ */
9
+ var ClimbroResponses;
10
+ (function (ClimbroResponses) {
11
+ /**
12
+ * 240 - Battery data marker
13
+ */
14
+ ClimbroResponses[ClimbroResponses["BAT_DAT"] = 240] = "BAT_DAT";
15
+ /**
16
+ * 245 - Sensor data marker
17
+ */
18
+ ClimbroResponses[ClimbroResponses["SENS_DAT"] = 245] = "SENS_DAT";
19
+ /**
20
+ * 246 - 36kg value
21
+ */
22
+ ClimbroResponses[ClimbroResponses["DAT_36KG"] = 246] = "DAT_36KG";
23
+ })(ClimbroResponses || (ClimbroResponses = {}));
5
24
  /**
6
25
  * Represents a Climbro device.
7
- * TODO: Add services, do you own a Climbro? Help us!
8
26
  * {@link https://climbro.com/}
9
27
  */
10
28
  class Climbro extends device_model_js_1.Device {
11
29
  constructor() {
12
30
  super({
13
- filters: [{ name: "Climbro" }],
14
- services: [],
31
+ filters: [{ namePrefix: "Climbro" }],
32
+ services: [
33
+ {
34
+ name: "UART Transparent Service",
35
+ id: "uart",
36
+ uuid: "49535343-fe7d-4ae5-8fa9-9fafd205e455",
37
+ characteristics: [
38
+ {
39
+ name: "Read/Notify",
40
+ id: "rx",
41
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
42
+ },
43
+ ],
44
+ },
45
+ ],
15
46
  });
47
+ /**
48
+ * Synchronization flag used to track the current data type being processed.
49
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
50
+ * @type {number}
51
+ * @private
52
+ */
53
+ this.flagSynchro = 0;
54
+ /**
55
+ * Current battery level percentage calculated from the device's battery voltage.
56
+ * @type {number}
57
+ * @private
58
+ */
59
+ this.batteryLevel = 0;
60
+ /**
61
+ * Retrieves battery level from the device.
62
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
63
+ */
64
+ this.battery = async () => {
65
+ // Battery level is continuously updated via notifications
66
+ return this.batteryLevel.toString();
67
+ };
68
+ /**
69
+ * Handles data received from the device, processes force measurements and battery data
70
+ * according to the Climbro protocol.
71
+ *
72
+ * @param {DataView} value - The notification event.
73
+ */
74
+ this.handleNotifications = (value) => {
75
+ if (value) {
76
+ // Update timestamp
77
+ this.updateTimestamp();
78
+ if (value.buffer) {
79
+ const receivedTime = Date.now();
80
+ // Convert DataView to Uint8Array for easier processing
81
+ const buffer = new Uint8Array(value.buffer);
82
+ const byteCount = buffer.length;
83
+ for (let i = 0; i < byteCount; i++) {
84
+ let signalValue = buffer[i];
85
+ // Check for battery data marker
86
+ if (signalValue === ClimbroResponses.BAT_DAT) {
87
+ this.flagSynchro = ClimbroResponses.BAT_DAT;
88
+ continue;
89
+ }
90
+ // Check for sensor data marker
91
+ if (signalValue === ClimbroResponses.SENS_DAT) {
92
+ this.flagSynchro = ClimbroResponses.SENS_DAT;
93
+ continue;
94
+ }
95
+ // Check if signal is the reserved word for 36kg and convert it
96
+ if (signalValue === ClimbroResponses.DAT_36KG) {
97
+ signalValue = 36;
98
+ }
99
+ // Process battery level signal
100
+ if (this.flagSynchro === ClimbroResponses.BAT_DAT) {
101
+ this.batteryLevel = _a.batLevelCoef * (signalValue - _a.minBatteryDisc);
102
+ continue;
103
+ }
104
+ // Process force signal
105
+ if (this.flagSynchro === ClimbroResponses.SENS_DAT) {
106
+ // Process force data inline
107
+ const forceValue = signalValue;
108
+ const numericData = forceValue - this.applyTare(forceValue);
109
+ // Add data to downloadable array
110
+ this.downloadPackets.push({
111
+ received: receivedTime,
112
+ sampleNum: this.dataPointCount,
113
+ battRaw: this.batteryLevel,
114
+ samples: [forceValue],
115
+ masses: [numericData],
116
+ });
117
+ // Check for max weight
118
+ this.peak = Math.max(this.peak, Number(numericData));
119
+ // Update running sum and count
120
+ const currentMassTotal = Math.max(-1000, Number(numericData));
121
+ this.sum += currentMassTotal;
122
+ this.dataPointCount++;
123
+ // Calculate the average dynamically
124
+ this.mean = this.sum / this.dataPointCount;
125
+ // Check if device is being used
126
+ this.activityCheck(numericData);
127
+ this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
128
+ continue;
129
+ }
130
+ }
131
+ }
132
+ }
133
+ };
16
134
  }
17
135
  }
18
136
  exports.Climbro = Climbro;
137
+ _a = Climbro;
138
+ /**
139
+ * Battery constants
140
+ */
141
+ Climbro.minBatteryDisc = 112;
142
+ Climbro.maxBatteryDisc = 230;
143
+ Climbro.batRangeDisc = _a.maxBatteryDisc - _a.minBatteryDisc;
144
+ Climbro.batLevelCoef = 100 / _a.batRangeDisc;
19
145
  //# sourceMappingURL=climbro.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":";;;AAAA,wDAA2C;AAG3C;;;;GAIG;AACH,MAAa,OAAQ,SAAQ,wBAAM;IACjC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC9B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;CACF;AAPD,0BAOC"}
1
+ {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entralpi.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/entralpi.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAE9E;;;GAGG;AACH,qBAAa,QAAS,SAAQ,MAAO,YAAW,SAAS;;IA2HvD;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9C;IAED;;;OAGG;IACH,aAAa,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEpD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CA6CrD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAED;;;OAGG;IACH,KAAK,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE5C;IAED;;;;OAIG;IACH,GAAG,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1C;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,MAAM,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7C;CACF"}
1
+ {"version":3,"file":"entralpi.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/entralpi.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAE9E;;;GAGG;AACH,qBAAa,QAAS,SAAQ,MAAO,YAAW,SAAS;;IA2HvD;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9C;IAED;;;OAGG;IACH,aAAa,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEpD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAyCrD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAED;;;OAGG;IACH,KAAK,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE5C;IAED;;;;OAIG;IACH,GAAG,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1C;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,MAAM,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7C;CACF"}
@@ -176,22 +176,18 @@ class Entralpi extends device_model_js_1.Device {
176
176
  samples: [convertedData],
177
177
  masses: [numericData],
178
178
  });
179
- // Update massMax
180
- this.massMax = Math.max(Number(this.massMax), numericData).toFixed(1);
179
+ // Update peak
180
+ this.peak = Math.max(this.peak, numericData);
181
181
  // Update running sum and count
182
182
  const currentMassTotal = Math.max(-1000, numericData);
183
- this.massTotalSum += currentMassTotal;
183
+ this.sum += currentMassTotal;
184
184
  this.dataPointCount++;
185
185
  // Calculate the average dynamically
186
- this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1);
186
+ this.mean = this.sum / this.dataPointCount;
187
187
  // Check if device is being used
188
188
  this.activityCheck(numericData);
189
189
  // Notify with weight data
190
- this.notifyCallback({
191
- massMax: this.massMax,
192
- massAverage: this.massAverage,
193
- massTotal: Math.max(-1000, numericData).toFixed(1),
194
- });
190
+ this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
195
191
  }
196
192
  }
197
193
  };
@@ -1 +1 @@
1
- {"version":3,"file":"entralpi.model.js","sourceRoot":"","sources":["../../../../src/models/device/entralpi.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entralpi.model.js","sourceRoot":"","sources":["../../../../src/models/device/entralpi.model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"forceboard.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/forceboard.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAElF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,MAAO,YAAW,WAAW;;IAsK3D;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9C;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAuDrD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAED;;;OAGG;IACH,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;;OAIG;IACH,MAAM,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAG3C;IAED;;;;OAIG;IACH,SAAS,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAStD;IAED;;;OAGG;IACH,oBAAoB,QAAa,OAAO,CAAC,IAAI,CAAC,CAI7C;IAED;;;;OAIG;IACH,UAAU,QAAa,OAAO,CAAC,IAAI,CAAC,CAEnC;IAED;;;OAGG;IACH,WAAW,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAElD;IAED;;;;;OAKG;IACH,KAAK,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAG1C;CACF"}
1
+ {"version":3,"file":"forceboard.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/forceboard.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAElF;;;GAGG;AACH,qBAAa,UAAW,SAAQ,MAAO,YAAW,WAAW;;IAsK3D;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE9C;IAED;;;;;;OAMG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CAmDrD;IAED;;;OAGG;IACH,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/C;IAED;;;OAGG;IACH,YAAY,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAED;;;OAGG;IACH,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;;OAIG;IACH,MAAM,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAG3C;IAED;;;;OAIG;IACH,SAAS,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAStD;IAED;;;OAGG;IACH,oBAAoB,QAAa,OAAO,CAAC,IAAI,CAAC,CAI7C;IAED;;;;OAIG;IACH,UAAU,QAAa,OAAO,CAAC,IAAI,CAAC,CAEnC;IAED;;;OAGG;IACH,WAAW,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAElD;IAED;;;;;OAKG;IACH,KAAK,GAAU,iBAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CAG1C;CACF"}
@@ -211,22 +211,18 @@ class ForceBoard extends device_model_js_1.Device {
211
211
  samples: [convertedReceivedData],
212
212
  masses: [numericData],
213
213
  });
214
- // Update massMax
215
- this.massMax = Math.max(Number(this.massMax), numericData).toFixed(1);
214
+ // Update peak
215
+ this.peak = Math.max(this.peak, numericData);
216
216
  // Update running sum and count
217
217
  const currentMassTotal = Math.max(-1000, numericData);
218
- this.massTotalSum += currentMassTotal;
218
+ this.sum += currentMassTotal;
219
219
  this.dataPointCount++;
220
220
  // Calculate the average dynamically
221
- this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1);
221
+ this.mean = this.sum / this.dataPointCount;
222
222
  // Check if device is being used
223
223
  this.activityCheck(numericData);
224
224
  // Notify with weight data
225
- this.notifyCallback({
226
- massMax: this.massMax,
227
- massAverage: this.massAverage,
228
- massTotal: Math.max(-1000, numericData).toFixed(1),
229
- });
225
+ this.notifyCallback(this.buildForceMeasurement(Math.max(-1000, numericData)));
230
226
  }
231
227
  }
232
228
  }