node-poweredup 10.0.0 → 10.1.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 (313) hide show
  1. package/README.md +0 -1
  2. package/dist/browser/poweredup.js +6193 -0
  3. package/dist/browser/poweredup.js.map +7 -0
  4. package/dist/consts.d.ts +40 -0
  5. package/dist/consts.d.ts.map +1 -1
  6. package/dist/consts.js +42 -0
  7. package/dist/consts.js.map +1 -1
  8. package/dist/devices/absolutemotor.d.ts +8 -6
  9. package/dist/devices/absolutemotor.d.ts.map +1 -1
  10. package/dist/devices/absolutemotor.js +24 -31
  11. package/dist/devices/absolutemotor.js.map +1 -1
  12. package/dist/devices/basicmotor.d.ts +11 -10
  13. package/dist/devices/basicmotor.d.ts.map +1 -1
  14. package/dist/devices/basicmotor.js +16 -22
  15. package/dist/devices/basicmotor.js.map +1 -1
  16. package/dist/devices/colordistancesensor.d.ts +13 -12
  17. package/dist/devices/colordistancesensor.d.ts.map +1 -1
  18. package/dist/devices/colordistancesensor.js +25 -31
  19. package/dist/devices/colordistancesensor.js.map +1 -1
  20. package/dist/devices/device.d.ts +15 -6
  21. package/dist/devices/device.d.ts.map +1 -1
  22. package/dist/devices/device.js +209 -21
  23. package/dist/devices/device.js.map +1 -1
  24. package/dist/devices/duplotrainbasespeaker.d.ts +4 -4
  25. package/dist/devices/duplotrainbasespeaker.d.ts.map +1 -1
  26. package/dist/devices/duplotrainbasespeaker.js +5 -8
  27. package/dist/devices/duplotrainbasespeaker.js.map +1 -1
  28. package/dist/devices/hubled.d.ts +5 -4
  29. package/dist/devices/hubled.d.ts.map +1 -1
  30. package/dist/devices/hubled.js +24 -24
  31. package/dist/devices/hubled.js.map +1 -1
  32. package/dist/devices/light.d.ts +7 -4
  33. package/dist/devices/light.d.ts.map +1 -1
  34. package/dist/devices/light.js +11 -17
  35. package/dist/devices/light.js.map +1 -1
  36. package/dist/devices/piezobuzzer.d.ts +3 -2
  37. package/dist/devices/piezobuzzer.d.ts.map +1 -1
  38. package/dist/devices/piezobuzzer.js +2 -2
  39. package/dist/devices/piezobuzzer.js.map +1 -1
  40. package/dist/devices/tachomotor.d.ts +14 -8
  41. package/dist/devices/tachomotor.d.ts.map +1 -1
  42. package/dist/devices/tachomotor.js +50 -56
  43. package/dist/devices/tachomotor.js.map +1 -1
  44. package/dist/devices/technic3x3colorlightmatrix.d.ts +3 -2
  45. package/dist/devices/technic3x3colorlightmatrix.d.ts.map +1 -1
  46. package/dist/devices/technic3x3colorlightmatrix.js +20 -23
  47. package/dist/devices/technic3x3colorlightmatrix.js.map +1 -1
  48. package/dist/devices/techniccolorsensor.d.ts +9 -4
  49. package/dist/devices/techniccolorsensor.d.ts.map +1 -1
  50. package/dist/devices/techniccolorsensor.js +99 -8
  51. package/dist/devices/techniccolorsensor.js.map +1 -1
  52. package/dist/devices/technicdistancesensor.d.ts +1 -1
  53. package/dist/devices/technicdistancesensor.js +1 -1
  54. package/dist/devices/technicmediumhubtiltsensor.d.ts +7 -6
  55. package/dist/devices/technicmediumhubtiltsensor.d.ts.map +1 -1
  56. package/dist/devices/technicmediumhubtiltsensor.js +9 -18
  57. package/dist/devices/technicmediumhubtiltsensor.js.map +1 -1
  58. package/dist/devices/tiltsensor.d.ts +4 -1
  59. package/dist/devices/tiltsensor.d.ts.map +1 -1
  60. package/dist/devices/tiltsensor.js +84 -3
  61. package/dist/devices/tiltsensor.js.map +1 -1
  62. package/dist/hubs/basehub.d.ts +1 -0
  63. package/dist/hubs/basehub.d.ts.map +1 -1
  64. package/dist/hubs/basehub.js +17 -0
  65. package/dist/hubs/basehub.js.map +1 -1
  66. package/dist/hubs/lpf2hub.d.ts +1 -0
  67. package/dist/hubs/lpf2hub.d.ts.map +1 -1
  68. package/dist/hubs/lpf2hub.js +11 -0
  69. package/dist/hubs/lpf2hub.js.map +1 -1
  70. package/dist/portoutputcommand.d.ts +13 -0
  71. package/dist/portoutputcommand.d.ts.map +1 -0
  72. package/dist/portoutputcommand.js +30 -0
  73. package/dist/portoutputcommand.js.map +1 -0
  74. package/dist/portoutputsleep.d.ts +6 -0
  75. package/dist/portoutputsleep.d.ts.map +1 -0
  76. package/dist/portoutputsleep.js +10 -0
  77. package/dist/portoutputsleep.js.map +1 -0
  78. package/dist/utils.d.ts +1 -3
  79. package/dist/utils.d.ts.map +1 -1
  80. package/dist/utils.js +13 -19
  81. package/dist/utils.js.map +1 -1
  82. package/package.json +1 -1
  83. package/src/consts.ts +44 -0
  84. package/src/devices/absolutemotor.ts +24 -31
  85. package/src/devices/basicmotor.ts +16 -22
  86. package/src/devices/colordistancesensor.ts +23 -29
  87. package/src/devices/device.ts +198 -20
  88. package/src/devices/duplotrainbasespeaker.ts +5 -8
  89. package/src/devices/hubled.ts +22 -22
  90. package/src/devices/light.ts +11 -18
  91. package/src/devices/piezobuzzer.ts +3 -3
  92. package/src/devices/tachomotor.ts +47 -53
  93. package/src/devices/technic3x3colorlightmatrix.ts +20 -23
  94. package/src/devices/techniccolorsensor.ts +102 -10
  95. package/src/devices/technicdistancesensor.ts +1 -1
  96. package/src/devices/technicmediumhubtiltsensor.ts +9 -18
  97. package/src/devices/tiltsensor.ts +85 -5
  98. package/src/hubs/basehub.ts +18 -0
  99. package/src/hubs/lpf2hub.ts +12 -5
  100. package/src/portoutputcommand.ts +37 -0
  101. package/src/portoutputsleep.ts +11 -0
  102. package/src/utils.ts +14 -19
  103. package/tsconfig.tsbuildinfo +1 -1
  104. package/webpack.config.cjs +35 -0
  105. package/dist/node/color.d.ts +0 -6
  106. package/dist/node/color.js +0 -15
  107. package/dist/node/color.js.map +0 -1
  108. package/dist/node/commands.d.ts +0 -299
  109. package/dist/node/commands.js +0 -672
  110. package/dist/node/commands.js.map +0 -1
  111. package/dist/node/connection.d.ts +0 -187
  112. package/dist/node/connection.js +0 -478
  113. package/dist/node/connection.js.map +0 -1
  114. package/dist/node/consts.d.ts +0 -644
  115. package/dist/node/consts.js +0 -675
  116. package/dist/node/consts.js.map +0 -1
  117. package/dist/node/devices/absolutemotor.d.ts +0 -43
  118. package/dist/node/devices/absolutemotor.js +0 -118
  119. package/dist/node/devices/absolutemotor.js.map +0 -1
  120. package/dist/node/devices/basicmotor.d.ts +0 -40
  121. package/dist/node/devices/basicmotor.js +0 -61
  122. package/dist/node/devices/basicmotor.js.map +0 -1
  123. package/dist/node/devices/colordistancesensor.d.ts +0 -79
  124. package/dist/node/devices/colordistancesensor.js +0 -284
  125. package/dist/node/devices/colordistancesensor.js.map +0 -1
  126. package/dist/node/devices/currentsensor.d.ts +0 -16
  127. package/dist/node/devices/currentsensor.js +0 -55
  128. package/dist/node/devices/currentsensor.js.map +0 -1
  129. package/dist/node/devices/device.d.ts +0 -71
  130. package/dist/node/devices/device.js +0 -162
  131. package/dist/node/devices/device.js.map +0 -1
  132. package/dist/node/devices/duplotrainbasecolorsensor.d.ts +0 -19
  133. package/dist/node/devices/duplotrainbasecolorsensor.js +0 -77
  134. package/dist/node/devices/duplotrainbasecolorsensor.js.map +0 -1
  135. package/dist/node/devices/duplotrainbasemotor.d.ts +0 -9
  136. package/dist/node/devices/duplotrainbasemotor.js +0 -12
  137. package/dist/node/devices/duplotrainbasemotor.js.map +0 -1
  138. package/dist/node/devices/duplotrainbasespeaker.d.ts +0 -28
  139. package/dist/node/devices/duplotrainbasespeaker.js +0 -40
  140. package/dist/node/devices/duplotrainbasespeaker.js.map +0 -1
  141. package/dist/node/devices/duplotrainbasespeedometer.d.ts +0 -16
  142. package/dist/node/devices/duplotrainbasespeedometer.js +0 -34
  143. package/dist/node/devices/duplotrainbasespeedometer.js.map +0 -1
  144. package/dist/node/devices/hubled.d.ts +0 -29
  145. package/dist/node/devices/hubled.js +0 -60
  146. package/dist/node/devices/hubled.js.map +0 -1
  147. package/dist/node/devices/index.d.ts +0 -14
  148. package/dist/node/devices/index.js +0 -154
  149. package/dist/node/devices/index.js.map +0 -1
  150. package/dist/node/devices/led.d.ts +0 -140
  151. package/dist/node/devices/led.js +0 -295
  152. package/dist/node/devices/led.js.map +0 -1
  153. package/dist/node/devices/light.d.ts +0 -25
  154. package/dist/node/devices/light.js +0 -46
  155. package/dist/node/devices/light.js.map +0 -1
  156. package/dist/node/devices/marioaccelerometer.d.ts +0 -17
  157. package/dist/node/devices/marioaccelerometer.js +0 -50
  158. package/dist/node/devices/marioaccelerometer.js.map +0 -1
  159. package/dist/node/devices/mariobarcodesensor.d.ts +0 -17
  160. package/dist/node/devices/mariobarcodesensor.js +0 -58
  161. package/dist/node/devices/mariobarcodesensor.js.map +0 -1
  162. package/dist/node/devices/mariopantssensor.d.ts +0 -16
  163. package/dist/node/devices/mariopantssensor.js +0 -34
  164. package/dist/node/devices/mariopantssensor.js.map +0 -1
  165. package/dist/node/devices/mediumlinearmotor.d.ts +0 -9
  166. package/dist/node/devices/mediumlinearmotor.js +0 -12
  167. package/dist/node/devices/mediumlinearmotor.js.map +0 -1
  168. package/dist/node/devices/motionsensor.d.ts +0 -16
  169. package/dist/node/devices/motionsensor.js +0 -38
  170. package/dist/node/devices/motionsensor.js.map +0 -1
  171. package/dist/node/devices/motor.d.ts +0 -182
  172. package/dist/node/devices/motor.js +0 -367
  173. package/dist/node/devices/motor.js.map +0 -1
  174. package/dist/node/devices/movehubmediumlinearmotor.d.ts +0 -9
  175. package/dist/node/devices/movehubmediumlinearmotor.js +0 -12
  176. package/dist/node/devices/movehubmediumlinearmotor.js.map +0 -1
  177. package/dist/node/devices/movehubtiltsensor.d.ts +0 -16
  178. package/dist/node/devices/movehubtiltsensor.js +0 -36
  179. package/dist/node/devices/movehubtiltsensor.js.map +0 -1
  180. package/dist/node/devices/piezobuzzer.d.ts +0 -17
  181. package/dist/node/devices/piezobuzzer.js +0 -28
  182. package/dist/node/devices/piezobuzzer.js.map +0 -1
  183. package/dist/node/devices/remotecontrolbutton.d.ts +0 -19
  184. package/dist/node/devices/remotecontrolbutton.js +0 -40
  185. package/dist/node/devices/remotecontrolbutton.js.map +0 -1
  186. package/dist/node/devices/sensor.d.ts +0 -305
  187. package/dist/node/devices/sensor.js +0 -662
  188. package/dist/node/devices/sensor.js.map +0 -1
  189. package/dist/node/devices/simplemediumlinearmotor.d.ts +0 -9
  190. package/dist/node/devices/simplemediumlinearmotor.js +0 -12
  191. package/dist/node/devices/simplemediumlinearmotor.js.map +0 -1
  192. package/dist/node/devices/tachomotor.d.ts +0 -70
  193. package/dist/node/devices/tachomotor.js +0 -167
  194. package/dist/node/devices/tachomotor.js.map +0 -1
  195. package/dist/node/devices/technic3x3colorlightmatrix.d.ts +0 -22
  196. package/dist/node/devices/technic3x3colorlightmatrix.js +0 -54
  197. package/dist/node/devices/technic3x3colorlightmatrix.js.map +0 -1
  198. package/dist/node/devices/techniccolorsensor.d.ts +0 -27
  199. package/dist/node/devices/techniccolorsensor.js +0 -72
  200. package/dist/node/devices/techniccolorsensor.js.map +0 -1
  201. package/dist/node/devices/technicdistancesensor.d.ts +0 -27
  202. package/dist/node/devices/technicdistancesensor.js +0 -58
  203. package/dist/node/devices/technicdistancesensor.js.map +0 -1
  204. package/dist/node/devices/technicforcesensor.d.ts +0 -18
  205. package/dist/node/devices/technicforcesensor.js +0 -58
  206. package/dist/node/devices/technicforcesensor.js.map +0 -1
  207. package/dist/node/devices/techniclargeangularmotor.d.ts +0 -12
  208. package/dist/node/devices/techniclargeangularmotor.js +0 -12
  209. package/dist/node/devices/techniclargeangularmotor.js.map +0 -1
  210. package/dist/node/devices/techniclargelinearmotor.d.ts +0 -9
  211. package/dist/node/devices/techniclargelinearmotor.js +0 -12
  212. package/dist/node/devices/techniclargelinearmotor.js.map +0 -1
  213. package/dist/node/devices/technicmediumangularmotor.d.ts +0 -12
  214. package/dist/node/devices/technicmediumangularmotor.js +0 -12
  215. package/dist/node/devices/technicmediumangularmotor.js.map +0 -1
  216. package/dist/node/devices/technicmediumhubaccelerometersensor.d.ts +0 -16
  217. package/dist/node/devices/technicmediumhubaccelerometersensor.js +0 -38
  218. package/dist/node/devices/technicmediumhubaccelerometersensor.js.map +0 -1
  219. package/dist/node/devices/technicmediumhubgyrosensor.d.ts +0 -16
  220. package/dist/node/devices/technicmediumhubgyrosensor.js +0 -38
  221. package/dist/node/devices/technicmediumhubgyrosensor.js.map +0 -1
  222. package/dist/node/devices/technicmediumhubtiltsensor.d.ts +0 -40
  223. package/dist/node/devices/technicmediumhubtiltsensor.js +0 -106
  224. package/dist/node/devices/technicmediumhubtiltsensor.js.map +0 -1
  225. package/dist/node/devices/technicsmallangularmotor.d.ts +0 -12
  226. package/dist/node/devices/technicsmallangularmotor.js +0 -12
  227. package/dist/node/devices/technicsmallangularmotor.js.map +0 -1
  228. package/dist/node/devices/technicxlargelinearmotor.d.ts +0 -9
  229. package/dist/node/devices/technicxlargelinearmotor.js +0 -12
  230. package/dist/node/devices/technicxlargelinearmotor.js.map +0 -1
  231. package/dist/node/devices/tiltsensor.d.ts +0 -16
  232. package/dist/node/devices/tiltsensor.js +0 -36
  233. package/dist/node/devices/tiltsensor.js.map +0 -1
  234. package/dist/node/devices/trainmotor.d.ts +0 -9
  235. package/dist/node/devices/trainmotor.js +0 -12
  236. package/dist/node/devices/trainmotor.js.map +0 -1
  237. package/dist/node/devices/voltagesensor.d.ts +0 -16
  238. package/dist/node/devices/voltagesensor.js +0 -59
  239. package/dist/node/devices/voltagesensor.js.map +0 -1
  240. package/dist/node/hub.d.ts +0 -291
  241. package/dist/node/hub.js +0 -778
  242. package/dist/node/hub.js.map +0 -1
  243. package/dist/node/hubs/basehub.d.ts +0 -162
  244. package/dist/node/hubs/basehub.js +0 -392
  245. package/dist/node/hubs/basehub.js.map +0 -1
  246. package/dist/node/hubs/duplotrainbase.d.ts +0 -17
  247. package/dist/node/hubs/duplotrainbase.js +0 -35
  248. package/dist/node/hubs/duplotrainbase.js.map +0 -1
  249. package/dist/node/hubs/hub.d.ts +0 -19
  250. package/dist/node/hubs/hub.js +0 -44
  251. package/dist/node/hubs/hub.js.map +0 -1
  252. package/dist/node/hubs/lpf2hub.d.ts +0 -48
  253. package/dist/node/hubs/lpf2hub.js +0 -314
  254. package/dist/node/hubs/lpf2hub.js.map +0 -1
  255. package/dist/node/hubs/mario.d.ts +0 -17
  256. package/dist/node/hubs/mario.js +0 -31
  257. package/dist/node/hubs/mario.js.map +0 -1
  258. package/dist/node/hubs/movehub.d.ts +0 -18
  259. package/dist/node/hubs/movehub.js +0 -46
  260. package/dist/node/hubs/movehub.js.map +0 -1
  261. package/dist/node/hubs/remotecontrol.d.ts +0 -17
  262. package/dist/node/hubs/remotecontrol.js +0 -37
  263. package/dist/node/hubs/remotecontrol.js.map +0 -1
  264. package/dist/node/hubs/technicmediumhub.d.ts +0 -17
  265. package/dist/node/hubs/technicmediumhub.js +0 -42
  266. package/dist/node/hubs/technicmediumhub.js.map +0 -1
  267. package/dist/node/hubs/technicsmallhub.d.ts +0 -18
  268. package/dist/node/hubs/technicsmallhub.js +0 -41
  269. package/dist/node/hubs/technicsmallhub.js.map +0 -1
  270. package/dist/node/hubs/wedo2smarthub.d.ts +0 -40
  271. package/dist/node/hubs/wedo2smarthub.js +0 -188
  272. package/dist/node/hubs/wedo2smarthub.js.map +0 -1
  273. package/dist/node/index-browser.d.ts +0 -1
  274. package/dist/node/index-browser.js +0 -96
  275. package/dist/node/index-browser.js.map +0 -1
  276. package/dist/node/index-node.d.ts +0 -49
  277. package/dist/node/index-node.js +0 -50
  278. package/dist/node/index-node.js.map +0 -1
  279. package/dist/node/index.d.ts +0 -31
  280. package/dist/node/index.js +0 -93
  281. package/dist/node/index.js.map +0 -1
  282. package/dist/node/index.mjs +0 -0
  283. package/dist/node/interfaces.d.ts +0 -23
  284. package/dist/node/interfaces.js +0 -2
  285. package/dist/node/interfaces.js.map +0 -1
  286. package/dist/node/nobleabstraction.d.ts +0 -26
  287. package/dist/node/nobleabstraction.js +0 -123
  288. package/dist/node/nobleabstraction.js.map +0 -1
  289. package/dist/node/poweredup-browser.d.ts +0 -50
  290. package/dist/node/poweredup-browser.js +0 -216
  291. package/dist/node/poweredup-browser.js.map +0 -1
  292. package/dist/node/poweredup-node.d.ts +0 -54
  293. package/dist/node/poweredup-node.js +0 -173
  294. package/dist/node/poweredup-node.js.map +0 -1
  295. package/dist/node/poweredup.d.ts +0 -83
  296. package/dist/node/poweredup.js +0 -542
  297. package/dist/node/poweredup.js.map +0 -1
  298. package/dist/node/protocol-wedo.d.ts +0 -158
  299. package/dist/node/protocol-wedo.js +0 -342
  300. package/dist/node/protocol-wedo.js.map +0 -1
  301. package/dist/node/protocol.d.ts +0 -340
  302. package/dist/node/protocol.js +0 -730
  303. package/dist/node/protocol.js.map +0 -1
  304. package/dist/node/types.d.ts +0 -408
  305. package/dist/node/types.js +0 -291
  306. package/dist/node/types.js.map +0 -1
  307. package/dist/node/utils.d.ts +0 -12
  308. package/dist/node/utils.js +0 -90
  309. package/dist/node/utils.js.map +0 -1
  310. package/dist/node/webbleabstraction.d.ts +0 -26
  311. package/dist/node/webbleabstraction.js +0 -104
  312. package/dist/node/webbleabstraction.js.map +0 -1
  313. package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/node/hub.js DELETED
@@ -1,778 +0,0 @@
1
- "use strict";
2
- /**
3
- * Hub - Main hub class for LEGO Powered UP hubs
4
- *
5
- * Follows the event-driven pattern from node-coral/node-wedo/node-controllab.
6
- * Hubs emit device attach/detach events when peripherals are connected/disconnected.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.DuploTrainBase = exports.RemoteControl = exports.TechnicMediumHub = exports.MoveHub = exports.WeDo2Hub = exports.LWP3Hub = exports.BaseHub = void 0;
43
- exports.createHub = createHub;
44
- const events_1 = require("events");
45
- const types_1 = require("./types");
46
- const connection_1 = require("./connection");
47
- const Protocol = __importStar(require("./protocol"));
48
- const WeDo2Protocol = __importStar(require("./protocol-wedo"));
49
- const commands = __importStar(require("./commands"));
50
- const devices_1 = require("./devices");
51
- // ============================================================================
52
- // Hub Base Class
53
- // ============================================================================
54
- /**
55
- * Base class for all LEGO Powered UP hubs
56
- */
57
- class BaseHub extends events_1.EventEmitter {
58
- constructor(peripheral, hubType) {
59
- super();
60
- this._ports = new Map();
61
- this._devices = new Map(); // Registered device instances
62
- this._isConnected = false;
63
- this._peripheral = peripheral;
64
- this.hubType = hubType;
65
- this._properties = {
66
- name: peripheral.name || "",
67
- firmwareVersion: "",
68
- hardwareVersion: "",
69
- batteryLevel: 0,
70
- rssi: peripheral.rssi || 0,
71
- batteryType: types_1.BatteryType.NORMAL,
72
- primaryMACAddress: "",
73
- };
74
- }
75
- /**
76
- * Get hub name
77
- */
78
- get name() {
79
- return this._properties.name;
80
- }
81
- /**
82
- * Get firmware version
83
- */
84
- get firmwareVersion() {
85
- return this._properties.firmwareVersion;
86
- }
87
- /**
88
- * Get hardware version
89
- */
90
- get hardwareVersion() {
91
- return this._properties.hardwareVersion;
92
- }
93
- /**
94
- * Get battery level (0-100)
95
- */
96
- get batteryLevel() {
97
- return this._properties.batteryLevel;
98
- }
99
- /**
100
- * Get RSSI signal strength
101
- */
102
- get rssi() {
103
- return this._properties.rssi;
104
- }
105
- /**
106
- * Check if hub is connected
107
- */
108
- get isConnected() {
109
- return this._isConnected;
110
- }
111
- /**
112
- * Get attached ports
113
- */
114
- get ports() {
115
- return new Map(this._ports);
116
- }
117
- /**
118
- * Get port info by port ID
119
- */
120
- getPort(portId) {
121
- return this._ports.get(portId);
122
- }
123
- /**
124
- * Get ports by device type
125
- */
126
- getPortsByType(deviceType) {
127
- const result = [];
128
- for (const [, port] of this._ports) {
129
- if (port.deviceType === deviceType) {
130
- result.push(port);
131
- }
132
- }
133
- return result;
134
- }
135
- /**
136
- * Wait for a device of a specific type to be attached
137
- * @param deviceType The device type to wait for
138
- * @param timeout Timeout in milliseconds (default: 10000)
139
- * @returns Promise that resolves to the Device
140
- */
141
- async waitForDeviceByType(deviceType, timeout = 10000) {
142
- // Check if device is already attached
143
- for (const [portId, port] of this._ports) {
144
- if (port.deviceType === deviceType) {
145
- return this._getOrCreateDevice(portId, port);
146
- }
147
- }
148
- // Wait for device to be attached
149
- return new Promise((resolve, reject) => {
150
- const timeoutId = setTimeout(() => {
151
- this.removeListener("attach", attachHandler);
152
- reject(new Error(`Timeout waiting for device type ${deviceType}`));
153
- }, timeout);
154
- const attachHandler = (deviceInfo) => {
155
- if (deviceInfo.deviceType === deviceType) {
156
- clearTimeout(timeoutId);
157
- this.removeListener("attach", attachHandler);
158
- resolve(this._getOrCreateDevice(deviceInfo.portId, deviceInfo));
159
- }
160
- };
161
- this.on("attach", attachHandler);
162
- });
163
- }
164
- /**
165
- * Wait for a device at a specific port
166
- * @param portName The port name (e.g., "A", "B", "LEFT", "RIGHT")
167
- * @param timeout Timeout in milliseconds (default: 10000)
168
- * @returns Promise that resolves to the Device
169
- */
170
- async waitForDeviceAtPort(portName, timeout = 10000) {
171
- const portId = this._portNameToId(portName);
172
- // Check if device is already attached
173
- const existingPort = this._ports.get(portId);
174
- if (existingPort) {
175
- return this._getOrCreateDevice(portId, existingPort);
176
- }
177
- // Wait for device to be attached
178
- return new Promise((resolve, reject) => {
179
- const timeoutId = setTimeout(() => {
180
- this.removeListener("attach", attachHandler);
181
- reject(new Error(`Timeout waiting for device at port ${portName}`));
182
- }, timeout);
183
- const attachHandler = (deviceInfo) => {
184
- if (deviceInfo.portId === portId) {
185
- clearTimeout(timeoutId);
186
- this.removeListener("attach", attachHandler);
187
- resolve(this._getOrCreateDevice(portId, deviceInfo));
188
- }
189
- };
190
- this.on("attach", attachHandler);
191
- });
192
- }
193
- /**
194
- * Get existing device or create and register a new one
195
- */
196
- _getOrCreateDevice(portId, portInfo) {
197
- let device = this._devices.get(portId);
198
- if (!device) {
199
- device = (0, devices_1.createDevice)(this, portInfo);
200
- this._devices.set(portId, device);
201
- }
202
- return device;
203
- }
204
- /**
205
- * Convert port name to port ID
206
- */
207
- _portNameToId(portName) {
208
- const name = portName.toUpperCase();
209
- // WeDo2 uses different port IDs
210
- if (this.hubType === types_1.HubType.WEDO2_SMART_HUB) {
211
- switch (name) {
212
- case "A": return 1;
213
- case "B": return 2;
214
- case "LED": return 6;
215
- default:
216
- const num = parseInt(portName, 10);
217
- if (!isNaN(num))
218
- return num;
219
- throw new Error(`Unknown port name: ${portName}`);
220
- }
221
- }
222
- // LWP3 hubs (Powered UP, Boost, Technic, etc.)
223
- switch (name) {
224
- case "A": return 0;
225
- case "B": return 1;
226
- case "C": return 2;
227
- case "D": return 3;
228
- case "LEFT": return 0;
229
- case "RIGHT": return 1;
230
- default:
231
- // Try to parse as number
232
- const num = parseInt(portName, 10);
233
- if (!isNaN(num))
234
- return num;
235
- throw new Error(`Unknown port name: ${portName}`);
236
- }
237
- }
238
- /**
239
- * Sleep for a specified time
240
- * @param ms Time to sleep in milliseconds
241
- */
242
- sleep(ms) {
243
- return new Promise(resolve => setTimeout(resolve, ms));
244
- }
245
- // Event emitter type overrides
246
- on(event, listener) {
247
- return super.on(event, listener);
248
- }
249
- once(event, listener) {
250
- return super.once(event, listener);
251
- }
252
- emit(event, ...args) {
253
- return super.emit(event, ...args);
254
- }
255
- }
256
- exports.BaseHub = BaseHub;
257
- // ============================================================================
258
- // LWP3 Hub (Powered UP, Boost, Technic, etc.)
259
- // ============================================================================
260
- /**
261
- * Hub class for LWP3-based hubs (Powered UP, Boost Move Hub, Technic, etc.)
262
- */
263
- class LWP3Hub extends BaseHub {
264
- constructor(peripheral, hubType) {
265
- super(peripheral, hubType);
266
- this._connection = new connection_1.LWP3Connection(peripheral);
267
- }
268
- /**
269
- * Connect to the hub and initialize
270
- */
271
- async connect() {
272
- // Set up message handler before connecting
273
- this._connection.on("message", (message) => this._handleMessage(message));
274
- this._connection.on("disconnect", () => this._handleDisconnect());
275
- // Connect to the peripheral
276
- await this._connection.open();
277
- this._isConnected = true;
278
- // Request hub properties
279
- await this._requestHubProperties();
280
- // Enable button notifications
281
- await this._enableButtonNotifications();
282
- this.emit("connect");
283
- }
284
- /**
285
- * Disconnect from the hub
286
- */
287
- async disconnect() {
288
- if (!this._isConnected)
289
- return;
290
- const message = commands.disconnect();
291
- await this._connection.send(message);
292
- await this._connection.close();
293
- this._isConnected = false;
294
- }
295
- /**
296
- * Shutdown the hub (power off)
297
- */
298
- async shutdown() {
299
- if (!this._isConnected)
300
- return;
301
- const message = commands.shutdown();
302
- await this._connection.send(message);
303
- this._isConnected = false;
304
- }
305
- /**
306
- * Set the hub name
307
- */
308
- async setName(name) {
309
- const message = commands.setName(name);
310
- await this._connection.send(message);
311
- this._properties.name = name;
312
- }
313
- /**
314
- * Set the hub LED color
315
- */
316
- async setLEDColor(color) {
317
- const ledPort = this._findPortByDeviceType(types_1.DeviceType.HUB_LED);
318
- if (ledPort === undefined) {
319
- throw new Error("Hub LED not found");
320
- }
321
- const message = commands.ledColor(ledPort, color);
322
- await this._connection.send(message);
323
- }
324
- /**
325
- * Set the hub LED to RGB color
326
- */
327
- async setLEDRGB(red, green, blue) {
328
- const ledPort = this._findPortByDeviceType(types_1.DeviceType.HUB_LED);
329
- if (ledPort === undefined) {
330
- throw new Error("Hub LED not found");
331
- }
332
- const message = commands.ledRGB(ledPort, red, green, blue);
333
- await this._connection.send(message);
334
- }
335
- /**
336
- * Run a motor at a given power level (-100 to 100)
337
- */
338
- async motorPower(portId, power) {
339
- const message = commands.motorPower(portId, power);
340
- await this._connection.send(message);
341
- }
342
- /**
343
- * Run a motor at a given speed (-100 to 100) with power regulation
344
- */
345
- async motorSpeed(portId, speed, maxPower = 100) {
346
- const message = commands.motorSpeed(portId, speed, maxPower);
347
- await this._connection.send(message);
348
- }
349
- /**
350
- * Run a motor for a specified time
351
- */
352
- async motorRunForTime(portId, time, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE) {
353
- const message = commands.motorRunForTime(portId, time, speed, maxPower, endState);
354
- await this._connection.send(message);
355
- }
356
- /**
357
- * Run a motor for a specified number of degrees
358
- */
359
- async motorRunForDegrees(portId, degrees, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE) {
360
- const message = commands.motorRunForDegrees(portId, degrees, speed, maxPower, endState);
361
- await this._connection.send(message);
362
- }
363
- /**
364
- * Move motor to absolute position
365
- */
366
- async motorGotoPosition(portId, position, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE) {
367
- const message = commands.motorGotoPosition(portId, position, speed, maxPower, endState);
368
- await this._connection.send(message);
369
- }
370
- /**
371
- * Stop a motor
372
- */
373
- async motorStop(portId) {
374
- const message = commands.motorStop(portId);
375
- await this._connection.send(message);
376
- }
377
- /**
378
- * Brake a motor
379
- */
380
- async motorBrake(portId) {
381
- const message = commands.motorBrake(portId);
382
- await this._connection.send(message);
383
- }
384
- /**
385
- * Subscribe to sensor updates on a port
386
- */
387
- async subscribe(portId, mode = 0, deltaInterval = 1) {
388
- const message = commands.subscribe(portId, mode, deltaInterval);
389
- await this._connection.send(message);
390
- }
391
- /**
392
- * Unsubscribe from sensor updates on a port
393
- */
394
- async unsubscribe(portId, mode = 0) {
395
- const message = commands.unsubscribe(portId, mode);
396
- await this._connection.send(message);
397
- }
398
- /**
399
- * Send raw command to the hub
400
- */
401
- async sendRaw(data) {
402
- await this._connection.send(data);
403
- }
404
- // ========================================================================
405
- // Private methods
406
- // ========================================================================
407
- async _requestHubProperties() {
408
- // Request hub name
409
- await this._connection.send(commands.requestProperty(Protocol.HubProperty.ADVERTISING_NAME));
410
- // Request firmware version
411
- await this._connection.send(commands.requestProperty(Protocol.HubProperty.FW_VERSION));
412
- // Request hardware version
413
- await this._connection.send(commands.requestProperty(Protocol.HubProperty.HW_VERSION));
414
- // Request battery level and enable updates
415
- await this._connection.send(commands.requestProperty(Protocol.HubProperty.BATTERY_VOLTAGE));
416
- await this._connection.send(commands.enablePropertyUpdates(Protocol.HubProperty.BATTERY_VOLTAGE));
417
- }
418
- async _enableButtonNotifications() {
419
- await this._connection.send(commands.enablePropertyUpdates(Protocol.HubProperty.BUTTON));
420
- }
421
- _handleMessage(message) {
422
- switch (message.type) {
423
- case Protocol.MessageType.HUB_PROPERTIES:
424
- this._handleHubProperty(message);
425
- break;
426
- case Protocol.MessageType.HUB_ATTACHED_IO:
427
- this._handleAttachedIO(message);
428
- break;
429
- case Protocol.MessageType.PORT_VALUE_SINGLE:
430
- this._handlePortValue(message);
431
- break;
432
- case Protocol.MessageType.PORT_OUTPUT_COMMAND_FEEDBACK:
433
- this._handleCommandFeedback(message);
434
- break;
435
- case Protocol.MessageType.HUB_ALERTS:
436
- this._handleAlert(message);
437
- break;
438
- case Protocol.MessageType.GENERIC_ERROR_MESSAGES:
439
- this._handleError(message);
440
- break;
441
- }
442
- }
443
- _handleHubProperty(message) {
444
- switch (message.property) {
445
- case Protocol.HubProperty.ADVERTISING_NAME:
446
- this._properties.name = message.payload.toString("ascii");
447
- break;
448
- case Protocol.HubProperty.FW_VERSION:
449
- this._properties.firmwareVersion = this._parseVersion(message.payload);
450
- break;
451
- case Protocol.HubProperty.HW_VERSION:
452
- this._properties.hardwareVersion = this._parseVersion(message.payload);
453
- break;
454
- case Protocol.HubProperty.BATTERY_VOLTAGE:
455
- this._properties.batteryLevel = message.payload[0];
456
- this.emit("batteryLevel", this._properties.batteryLevel);
457
- break;
458
- case Protocol.HubProperty.BUTTON:
459
- const buttonState = message.payload[0] === 1 ? types_1.ButtonState.PRESSED : types_1.ButtonState.RELEASED;
460
- this.emit("button", buttonState);
461
- break;
462
- case Protocol.HubProperty.RSSI:
463
- this._properties.rssi = message.payload.readInt8(0);
464
- this.emit("rssi", this._properties.rssi);
465
- break;
466
- }
467
- }
468
- _handleAttachedIO(message) {
469
- const portId = message.portId;
470
- const event = message.event;
471
- switch (event) {
472
- case types_1.PortEvent.ATTACHED:
473
- case types_1.PortEvent.ATTACHED_VIRTUAL: {
474
- const deviceType = message.deviceType;
475
- const deviceInfo = {
476
- portId,
477
- deviceType,
478
- hardwareRevision: message.hardwareRevision,
479
- softwareRevision: message.softwareRevision,
480
- };
481
- this._ports.set(portId, deviceInfo);
482
- this.emit("attach", deviceInfo);
483
- break;
484
- }
485
- case types_1.PortEvent.DETACHED: {
486
- const deviceInfo = this._ports.get(portId);
487
- if (deviceInfo) {
488
- this._ports.delete(portId);
489
- this.emit("detach", portId);
490
- }
491
- break;
492
- }
493
- }
494
- }
495
- _handlePortValue(message) {
496
- const device = this._devices.get(message.portId);
497
- if (device && typeof device.handlePortValue === "function") {
498
- device.handlePortValue(message.value);
499
- }
500
- }
501
- _handleCommandFeedback(message) {
502
- // Command feedback can be used for promise resolution
503
- }
504
- _handleAlert(message) {
505
- this.emit("alert", message.alertType);
506
- }
507
- _handleError(message) {
508
- this.emit("error", new Error(`Hub error: command 0x${message.commandType.toString(16)}, error 0x${message.errorCode.toString(16)}`));
509
- }
510
- _handleDisconnect() {
511
- this._isConnected = false;
512
- this._ports.clear();
513
- this.emit("disconnect");
514
- }
515
- _findPortByDeviceType(deviceType) {
516
- for (const [portId, port] of this._ports) {
517
- if (port.deviceType === deviceType) {
518
- return portId;
519
- }
520
- }
521
- return undefined;
522
- }
523
- _parseVersion(buffer) {
524
- if (buffer.length < 4)
525
- return "";
526
- const version = buffer.readUInt32LE(0);
527
- const major = (version >> 28) & 0x0f;
528
- const minor = (version >> 24) & 0x0f;
529
- const bugfix = (version >> 16) & 0xff;
530
- const build = version & 0xffff;
531
- return `${major}.${minor}.${bugfix}.${build}`;
532
- }
533
- }
534
- exports.LWP3Hub = LWP3Hub;
535
- // ============================================================================
536
- // WeDo 2.0 Hub
537
- // ============================================================================
538
- /**
539
- * Hub class for WeDo 2.0 Smart Hub
540
- */
541
- class WeDo2Hub extends BaseHub {
542
- constructor(peripheral) {
543
- super(peripheral, types_1.HubType.WEDO2_SMART_HUB);
544
- this._connection = new connection_1.WeDo2Connection(peripheral);
545
- }
546
- /**
547
- * Connect to the hub and initialize
548
- */
549
- async connect() {
550
- // Set up message handlers - WeDo2Connection emits separate events for each message type
551
- this._connection.on("port", (message) => this._handlePortInfo(message));
552
- this._connection.on("sensor", (message) => this._handleSensorValue(message));
553
- this._connection.on("button", (message) => this._handleButton(message));
554
- this._connection.on("battery", (message) => this._handleBattery(message));
555
- this._connection.on("disconnect", () => this._handleDisconnect());
556
- // Connect to the peripheral
557
- await this._connection.open();
558
- this._isConnected = true;
559
- // Note: Internal devices (LED, voltage, current, piezo) are detected via
560
- // PORT_TYPE notifications during connection, so no manual registration needed
561
- this.emit("connect");
562
- }
563
- /**
564
- * Disconnect from the hub
565
- */
566
- async disconnect() {
567
- if (!this._isConnected)
568
- return;
569
- await this._connection.close();
570
- this._isConnected = false;
571
- }
572
- /**
573
- * Shutdown the hub (WeDo 2.0 doesn't support remote shutdown)
574
- */
575
- async shutdown() {
576
- await this.disconnect();
577
- }
578
- /**
579
- * Set the hub name
580
- */
581
- async setName(name) {
582
- const message = WeDo2Protocol.createWeDo2SetName(name);
583
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.NAME_ID, message);
584
- this._properties.name = name;
585
- }
586
- /**
587
- * Set the hub LED color
588
- */
589
- async setLEDColor(color) {
590
- const message = WeDo2Protocol.createWeDo2LEDColor(WeDo2Protocol.WEDO2_PORT_MAP.HUB_LED, color);
591
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.MOTOR_VALUE_WRITE, message);
592
- }
593
- /**
594
- * Set the hub LED to RGB color
595
- */
596
- async setLEDRGB(red, green, blue) {
597
- const message = WeDo2Protocol.createWeDo2LEDRGB(WeDo2Protocol.WEDO2_PORT_MAP.HUB_LED, red, green, blue);
598
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.MOTOR_VALUE_WRITE, message);
599
- }
600
- /**
601
- * Run a motor at a given power level (-100 to 100)
602
- */
603
- async motorPower(portId, power) {
604
- const message = WeDo2Protocol.createWeDo2MotorPower(portId, power);
605
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.MOTOR_VALUE_WRITE, message);
606
- }
607
- /**
608
- * Stop a motor
609
- */
610
- async motorStop(portId) {
611
- await this.motorPower(portId, 0);
612
- }
613
- /**
614
- * Play a tone
615
- */
616
- async playTone(frequency, duration) {
617
- const message = WeDo2Protocol.createWeDo2PiezoTone(WeDo2Protocol.WEDO2_PORT_MAP.PIEZO, frequency, duration);
618
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.MOTOR_VALUE_WRITE, message);
619
- }
620
- /**
621
- * Stop tone playback
622
- */
623
- async stopTone() {
624
- const message = WeDo2Protocol.createWeDo2PiezoStop(WeDo2Protocol.WEDO2_PORT_MAP.PIEZO);
625
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.MOTOR_VALUE_WRITE, message);
626
- }
627
- /**
628
- * Set sensor mode
629
- */
630
- async setSensorMode(portId, mode) {
631
- const deviceInfo = this._ports.get(portId);
632
- if (!deviceInfo) {
633
- throw new Error(`Port ${portId} not found`);
634
- }
635
- const message = WeDo2Protocol.createWeDo2Subscribe(portId, deviceInfo.deviceType, mode, true);
636
- await this._connection.send(WeDo2Protocol.WEDO2_CHARACTERISTICS.PORT_TYPE_WRITE, message);
637
- }
638
- /**
639
- * Send raw command
640
- */
641
- async sendRaw(characteristicUUID, data) {
642
- await this._connection.send(characteristicUUID, data);
643
- }
644
- // ========================================================================
645
- // Private methods
646
- // ========================================================================
647
- _handleMessage(message) {
648
- switch (message.kind) {
649
- case "port":
650
- this._handlePortInfo(message);
651
- break;
652
- case "sensor":
653
- this._handleSensorValue(message);
654
- break;
655
- case "button":
656
- this._handleButton(message);
657
- break;
658
- case "battery":
659
- this._handleBattery(message);
660
- break;
661
- }
662
- }
663
- _handlePortInfo(message) {
664
- const portId = message.portId;
665
- const deviceType = message.deviceType;
666
- if (deviceType !== types_1.DeviceType.UNKNOWN) {
667
- const deviceInfo = {
668
- portId,
669
- deviceType: deviceType,
670
- };
671
- this._ports.set(portId, deviceInfo);
672
- this.emit("attach", deviceInfo);
673
- }
674
- else {
675
- const deviceInfo = this._ports.get(portId);
676
- if (deviceInfo) {
677
- this._ports.delete(portId);
678
- this.emit("detach", portId);
679
- }
680
- }
681
- }
682
- _handleSensorValue(message) {
683
- // Sensor value events are handled by device classes
684
- }
685
- _handleButton(message) {
686
- const buttonState = message.pressed ? types_1.ButtonState.PRESSED : types_1.ButtonState.RELEASED;
687
- this.emit("button", buttonState);
688
- }
689
- _handleBattery(message) {
690
- this._properties.batteryLevel = message.level;
691
- this.emit("batteryLevel", message.level);
692
- }
693
- _handleDisconnect() {
694
- this._isConnected = false;
695
- this._ports.clear();
696
- this.emit("disconnect");
697
- }
698
- }
699
- exports.WeDo2Hub = WeDo2Hub;
700
- // ============================================================================
701
- // Hub Factory
702
- // ============================================================================
703
- /**
704
- * Create a hub instance based on the hub type
705
- */
706
- function createHub(peripheral, hubType) {
707
- switch (hubType) {
708
- case types_1.HubType.WEDO2_SMART_HUB:
709
- return new WeDo2Hub(peripheral);
710
- case types_1.HubType.MOVE_HUB:
711
- return new MoveHub(peripheral);
712
- case types_1.HubType.TECHNIC_MEDIUM_HUB:
713
- return new TechnicMediumHub(peripheral);
714
- case types_1.HubType.REMOTE_CONTROL:
715
- return new RemoteControl(peripheral);
716
- case types_1.HubType.DUPLO_TRAIN_BASE:
717
- return new DuploTrainBase(peripheral);
718
- default:
719
- return new LWP3Hub(peripheral, hubType);
720
- }
721
- }
722
- // ============================================================================
723
- // Specialized Hub Classes
724
- // ============================================================================
725
- /**
726
- * Move Hub (Boost) with built-in tilt sensor and motors
727
- */
728
- class MoveHub extends LWP3Hub {
729
- constructor(peripheral) {
730
- super(peripheral, types_1.HubType.MOVE_HUB);
731
- }
732
- get motorAPort() { return 0; }
733
- get motorBPort() { return 1; }
734
- get tiltSensorPort() { return 58; }
735
- get colorSensorPort() { return 59; }
736
- }
737
- exports.MoveHub = MoveHub;
738
- /**
739
- * Technic Medium Hub with gyro and accelerometer
740
- */
741
- class TechnicMediumHub extends LWP3Hub {
742
- constructor(peripheral) {
743
- super(peripheral, types_1.HubType.TECHNIC_MEDIUM_HUB);
744
- }
745
- get gyroPort() { return 99; }
746
- get accelerometerPort() { return 97; }
747
- get tiltSensorPort() { return 98; }
748
- }
749
- exports.TechnicMediumHub = TechnicMediumHub;
750
- /**
751
- * Remote Control
752
- */
753
- class RemoteControl extends LWP3Hub {
754
- constructor(peripheral) {
755
- super(peripheral, types_1.HubType.REMOTE_CONTROL);
756
- }
757
- get leftButtonPort() { return 0; }
758
- get rightButtonPort() { return 1; }
759
- }
760
- exports.RemoteControl = RemoteControl;
761
- /**
762
- * Duplo Train Base
763
- */
764
- class DuploTrainBase extends LWP3Hub {
765
- constructor(peripheral) {
766
- super(peripheral, types_1.HubType.DUPLO_TRAIN_BASE);
767
- }
768
- get motorPort() { return 0; }
769
- get colorSensorPort() { return 18; }
770
- get speedometerPort() { return 19; }
771
- get speakerPort() { return 1; }
772
- async playSound(sound) {
773
- const message = commands.duploTrainSound(this.speakerPort, sound);
774
- await this._connection.send(message);
775
- }
776
- }
777
- exports.DuploTrainBase = DuploTrainBase;
778
- //# sourceMappingURL=hub.js.map