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
@@ -1,730 +0,0 @@
1
- "use strict";
2
- /**
3
- * PoweredUp Protocol
4
- * LEGO Wireless Protocol 3.0 (LWP3) message encoding/decoding
5
- * https://lego.github.io/lego-ble-wireless-protocol-docs/
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ErrorCode = exports.ModeInformationType = exports.PortInformationType = exports.MotorSubCommand = exports.AlertOperation = exports.HubAction = exports.HubPropertyOperation = exports.HubProperty = exports.MessageType = exports.BLE_BOOTLOADER_CHARACTERISTIC_UUID = exports.BLE_BOOTLOADER_SERVICE_UUID = exports.BLE_CHARACTERISTIC_UUID = exports.BLE_SERVICE_UUID = void 0;
9
- exports.decodeMessageLength = decodeMessageLength;
10
- exports.encodeMessageLength = encodeMessageLength;
11
- exports.decodeVersion = decodeVersion;
12
- exports.decodeMACAddress = decodeMACAddress;
13
- exports.decodeMessage = decodeMessage;
14
- exports.encodeMessage = encodeMessage;
15
- exports.createHubPropertyRequest = createHubPropertyRequest;
16
- exports.createHubPropertySet = createHubPropertySet;
17
- exports.createHubAction = createHubAction;
18
- exports.createAlertSubscription = createAlertSubscription;
19
- exports.createPortInformationRequest = createPortInformationRequest;
20
- exports.createPortModeInformationRequest = createPortModeInformationRequest;
21
- exports.createPortInputFormatSetup = createPortInputFormatSetup;
22
- exports.createVirtualPortSetup = createVirtualPortSetup;
23
- exports.createStartPower = createStartPower;
24
- exports.createStartPowerDual = createStartPowerDual;
25
- exports.createStartSpeed = createStartSpeed;
26
- exports.createStartSpeedDual = createStartSpeedDual;
27
- exports.createStartSpeedForTime = createStartSpeedForTime;
28
- exports.createStartSpeedForDegrees = createStartSpeedForDegrees;
29
- exports.createGotoAbsolutePosition = createGotoAbsolutePosition;
30
- exports.createPresetEncoder = createPresetEncoder;
31
- exports.createSetAccTime = createSetAccTime;
32
- exports.createSetDecTime = createSetDecTime;
33
- exports.createSetLEDColor = createSetLEDColor;
34
- exports.createSetLEDRGB = createSetLEDRGB;
35
- exports.parseMotorFeedback = parseMotorFeedback;
36
- exports.parseHubPropertyValue = parseHubPropertyValue;
37
- const types_1 = require("./types");
38
- // ============================================================================
39
- // BLE Service and Characteristic UUIDs
40
- // ============================================================================
41
- exports.BLE_SERVICE_UUID = "00001623-1212-efde-1623-785feabcd123";
42
- exports.BLE_CHARACTERISTIC_UUID = "00001624-1212-efde-1623-785feabcd123";
43
- exports.BLE_BOOTLOADER_SERVICE_UUID = "00001625-1212-efde-1623-785feabcd123";
44
- exports.BLE_BOOTLOADER_CHARACTERISTIC_UUID = "00001626-1212-efde-1623-785feabcd123";
45
- // ============================================================================
46
- // Message Types
47
- // https://lego.github.io/lego-ble-wireless-protocol-docs/index.html#message-types
48
- // ============================================================================
49
- var MessageType;
50
- (function (MessageType) {
51
- MessageType[MessageType["HUB_PROPERTIES"] = 1] = "HUB_PROPERTIES";
52
- MessageType[MessageType["HUB_ACTIONS"] = 2] = "HUB_ACTIONS";
53
- MessageType[MessageType["HUB_ALERTS"] = 3] = "HUB_ALERTS";
54
- MessageType[MessageType["HUB_ATTACHED_IO"] = 4] = "HUB_ATTACHED_IO";
55
- MessageType[MessageType["GENERIC_ERROR_MESSAGES"] = 5] = "GENERIC_ERROR_MESSAGES";
56
- MessageType[MessageType["HW_NETWORK_COMMANDS"] = 8] = "HW_NETWORK_COMMANDS";
57
- MessageType[MessageType["FW_UPDATE_GO_INTO_BOOT_MODE"] = 16] = "FW_UPDATE_GO_INTO_BOOT_MODE";
58
- MessageType[MessageType["FW_UPDATE_LOCK_MEMORY"] = 17] = "FW_UPDATE_LOCK_MEMORY";
59
- MessageType[MessageType["FW_UPDATE_LOCK_STATUS_REQUEST"] = 18] = "FW_UPDATE_LOCK_STATUS_REQUEST";
60
- MessageType[MessageType["FW_LOCK_STATUS"] = 19] = "FW_LOCK_STATUS";
61
- MessageType[MessageType["PORT_INFORMATION_REQUEST"] = 33] = "PORT_INFORMATION_REQUEST";
62
- MessageType[MessageType["PORT_MODE_INFORMATION_REQUEST"] = 34] = "PORT_MODE_INFORMATION_REQUEST";
63
- MessageType[MessageType["PORT_INPUT_FORMAT_SETUP_SINGLE"] = 65] = "PORT_INPUT_FORMAT_SETUP_SINGLE";
64
- MessageType[MessageType["PORT_INPUT_FORMAT_SETUP_COMBINEDMODE"] = 66] = "PORT_INPUT_FORMAT_SETUP_COMBINEDMODE";
65
- MessageType[MessageType["PORT_INFORMATION"] = 67] = "PORT_INFORMATION";
66
- MessageType[MessageType["PORT_MODE_INFORMATION"] = 68] = "PORT_MODE_INFORMATION";
67
- MessageType[MessageType["PORT_VALUE_SINGLE"] = 69] = "PORT_VALUE_SINGLE";
68
- MessageType[MessageType["PORT_VALUE_COMBINEDMODE"] = 70] = "PORT_VALUE_COMBINEDMODE";
69
- MessageType[MessageType["PORT_INPUT_FORMAT_SINGLE"] = 71] = "PORT_INPUT_FORMAT_SINGLE";
70
- MessageType[MessageType["PORT_INPUT_FORMAT_COMBINEDMODE"] = 72] = "PORT_INPUT_FORMAT_COMBINEDMODE";
71
- MessageType[MessageType["VIRTUAL_PORT_SETUP"] = 97] = "VIRTUAL_PORT_SETUP";
72
- MessageType[MessageType["PORT_OUTPUT_COMMAND"] = 129] = "PORT_OUTPUT_COMMAND";
73
- MessageType[MessageType["PORT_OUTPUT_COMMAND_FEEDBACK"] = 130] = "PORT_OUTPUT_COMMAND_FEEDBACK";
74
- })(MessageType || (exports.MessageType = MessageType = {}));
75
- // ============================================================================
76
- // Hub Property References
77
- // ============================================================================
78
- var HubProperty;
79
- (function (HubProperty) {
80
- HubProperty[HubProperty["ADVERTISING_NAME"] = 1] = "ADVERTISING_NAME";
81
- HubProperty[HubProperty["BUTTON"] = 2] = "BUTTON";
82
- HubProperty[HubProperty["FW_VERSION"] = 3] = "FW_VERSION";
83
- HubProperty[HubProperty["HW_VERSION"] = 4] = "HW_VERSION";
84
- HubProperty[HubProperty["RSSI"] = 5] = "RSSI";
85
- HubProperty[HubProperty["BATTERY_VOLTAGE"] = 6] = "BATTERY_VOLTAGE";
86
- HubProperty[HubProperty["BATTERY_TYPE"] = 7] = "BATTERY_TYPE";
87
- HubProperty[HubProperty["MANUFACTURER_NAME"] = 8] = "MANUFACTURER_NAME";
88
- HubProperty[HubProperty["RADIO_FIRMWARE_VERSION"] = 9] = "RADIO_FIRMWARE_VERSION";
89
- HubProperty[HubProperty["LWP_PROTOCOL_VERSION"] = 10] = "LWP_PROTOCOL_VERSION";
90
- HubProperty[HubProperty["SYSTEM_TYPE_ID"] = 11] = "SYSTEM_TYPE_ID";
91
- HubProperty[HubProperty["HW_NETWORK_ID"] = 12] = "HW_NETWORK_ID";
92
- HubProperty[HubProperty["PRIMARY_MAC_ADDRESS"] = 13] = "PRIMARY_MAC_ADDRESS";
93
- HubProperty[HubProperty["SECONDARY_MAC_ADDRESS"] = 14] = "SECONDARY_MAC_ADDRESS";
94
- HubProperty[HubProperty["HW_NETWORK_FAMILY"] = 15] = "HW_NETWORK_FAMILY";
95
- })(HubProperty || (exports.HubProperty = HubProperty = {}));
96
- var HubPropertyOperation;
97
- (function (HubPropertyOperation) {
98
- HubPropertyOperation[HubPropertyOperation["SET"] = 1] = "SET";
99
- HubPropertyOperation[HubPropertyOperation["ENABLE_UPDATES"] = 2] = "ENABLE_UPDATES";
100
- HubPropertyOperation[HubPropertyOperation["DISABLE_UPDATES"] = 3] = "DISABLE_UPDATES";
101
- HubPropertyOperation[HubPropertyOperation["RESET"] = 4] = "RESET";
102
- HubPropertyOperation[HubPropertyOperation["REQUEST_UPDATE"] = 5] = "REQUEST_UPDATE";
103
- HubPropertyOperation[HubPropertyOperation["UPDATE"] = 6] = "UPDATE";
104
- })(HubPropertyOperation || (exports.HubPropertyOperation = HubPropertyOperation = {}));
105
- // ============================================================================
106
- // Hub Actions
107
- // ============================================================================
108
- var HubAction;
109
- (function (HubAction) {
110
- HubAction[HubAction["SWITCH_OFF_HUB"] = 1] = "SWITCH_OFF_HUB";
111
- HubAction[HubAction["DISCONNECT"] = 2] = "DISCONNECT";
112
- HubAction[HubAction["VCC_PORT_CONTROL_ON"] = 3] = "VCC_PORT_CONTROL_ON";
113
- HubAction[HubAction["VCC_PORT_CONTROL_OFF"] = 4] = "VCC_PORT_CONTROL_OFF";
114
- HubAction[HubAction["ACTIVATE_BUSY_INDICATION"] = 5] = "ACTIVATE_BUSY_INDICATION";
115
- HubAction[HubAction["RESET_BUSY_INDICATION"] = 6] = "RESET_BUSY_INDICATION";
116
- HubAction[HubAction["SHUTDOWN"] = 47] = "SHUTDOWN";
117
- HubAction[HubAction["HUB_WILL_SWITCH_OFF"] = 48] = "HUB_WILL_SWITCH_OFF";
118
- HubAction[HubAction["HUB_WILL_DISCONNECT"] = 49] = "HUB_WILL_DISCONNECT";
119
- HubAction[HubAction["HUB_WILL_GO_INTO_BOOT_MODE"] = 50] = "HUB_WILL_GO_INTO_BOOT_MODE";
120
- })(HubAction || (exports.HubAction = HubAction = {}));
121
- // ============================================================================
122
- // Alert Operations
123
- // ============================================================================
124
- var AlertOperation;
125
- (function (AlertOperation) {
126
- AlertOperation[AlertOperation["ENABLE_UPDATE"] = 1] = "ENABLE_UPDATE";
127
- AlertOperation[AlertOperation["DISABLE_UPDATE"] = 2] = "DISABLE_UPDATE";
128
- AlertOperation[AlertOperation["REQUEST_UPDATE"] = 3] = "REQUEST_UPDATE";
129
- AlertOperation[AlertOperation["UPDATE"] = 4] = "UPDATE";
130
- })(AlertOperation || (exports.AlertOperation = AlertOperation = {}));
131
- // ============================================================================
132
- // Port Output Sub-Commands
133
- // ============================================================================
134
- var MotorSubCommand;
135
- (function (MotorSubCommand) {
136
- MotorSubCommand[MotorSubCommand["START_POWER"] = 1] = "START_POWER";
137
- MotorSubCommand[MotorSubCommand["START_POWER_DUAL"] = 2] = "START_POWER_DUAL";
138
- MotorSubCommand[MotorSubCommand["SET_ACC_TIME"] = 5] = "SET_ACC_TIME";
139
- MotorSubCommand[MotorSubCommand["SET_DEC_TIME"] = 6] = "SET_DEC_TIME";
140
- MotorSubCommand[MotorSubCommand["START_SPEED"] = 7] = "START_SPEED";
141
- MotorSubCommand[MotorSubCommand["START_SPEED_DUAL"] = 8] = "START_SPEED_DUAL";
142
- MotorSubCommand[MotorSubCommand["START_SPEED_FOR_TIME"] = 9] = "START_SPEED_FOR_TIME";
143
- MotorSubCommand[MotorSubCommand["START_SPEED_FOR_TIME_DUAL"] = 10] = "START_SPEED_FOR_TIME_DUAL";
144
- MotorSubCommand[MotorSubCommand["START_SPEED_FOR_DEGREES"] = 11] = "START_SPEED_FOR_DEGREES";
145
- MotorSubCommand[MotorSubCommand["START_SPEED_FOR_DEGREES_DUAL"] = 12] = "START_SPEED_FOR_DEGREES_DUAL";
146
- MotorSubCommand[MotorSubCommand["GOTO_ABSOLUTE_POSITION"] = 13] = "GOTO_ABSOLUTE_POSITION";
147
- MotorSubCommand[MotorSubCommand["GOTO_ABSOLUTE_POSITION_DUAL"] = 14] = "GOTO_ABSOLUTE_POSITION_DUAL";
148
- MotorSubCommand[MotorSubCommand["PRESET_ENCODER"] = 19] = "PRESET_ENCODER";
149
- MotorSubCommand[MotorSubCommand["PRESET_ENCODER_DUAL"] = 20] = "PRESET_ENCODER_DUAL";
150
- MotorSubCommand[MotorSubCommand["WRITE_DIRECT"] = 80] = "WRITE_DIRECT";
151
- MotorSubCommand[MotorSubCommand["WRITE_DIRECT_MODE_DATA"] = 81] = "WRITE_DIRECT_MODE_DATA";
152
- })(MotorSubCommand || (exports.MotorSubCommand = MotorSubCommand = {}));
153
- // ============================================================================
154
- // Port Information Types
155
- // ============================================================================
156
- var PortInformationType;
157
- (function (PortInformationType) {
158
- PortInformationType[PortInformationType["PORT_VALUE"] = 0] = "PORT_VALUE";
159
- PortInformationType[PortInformationType["MODE_INFO"] = 1] = "MODE_INFO";
160
- PortInformationType[PortInformationType["POSSIBLE_MODE_COMBINATIONS"] = 2] = "POSSIBLE_MODE_COMBINATIONS";
161
- })(PortInformationType || (exports.PortInformationType = PortInformationType = {}));
162
- var ModeInformationType;
163
- (function (ModeInformationType) {
164
- ModeInformationType[ModeInformationType["NAME"] = 0] = "NAME";
165
- ModeInformationType[ModeInformationType["RAW"] = 1] = "RAW";
166
- ModeInformationType[ModeInformationType["PCT"] = 2] = "PCT";
167
- ModeInformationType[ModeInformationType["SI"] = 3] = "SI";
168
- ModeInformationType[ModeInformationType["SYMBOL"] = 4] = "SYMBOL";
169
- ModeInformationType[ModeInformationType["MAPPING"] = 5] = "MAPPING";
170
- ModeInformationType[ModeInformationType["MOTOR_BIAS"] = 7] = "MOTOR_BIAS";
171
- ModeInformationType[ModeInformationType["CAPABILITY_BITS"] = 8] = "CAPABILITY_BITS";
172
- ModeInformationType[ModeInformationType["VALUE_FORMAT"] = 128] = "VALUE_FORMAT";
173
- })(ModeInformationType || (exports.ModeInformationType = ModeInformationType = {}));
174
- // ============================================================================
175
- // Error Codes
176
- // ============================================================================
177
- var ErrorCode;
178
- (function (ErrorCode) {
179
- ErrorCode[ErrorCode["ACK"] = 1] = "ACK";
180
- ErrorCode[ErrorCode["MACK"] = 2] = "MACK";
181
- ErrorCode[ErrorCode["BUFFER_OVERFLOW"] = 3] = "BUFFER_OVERFLOW";
182
- ErrorCode[ErrorCode["TIMEOUT"] = 4] = "TIMEOUT";
183
- ErrorCode[ErrorCode["COMMAND_NOT_RECOGNIZED"] = 5] = "COMMAND_NOT_RECOGNIZED";
184
- ErrorCode[ErrorCode["INVALID_USE"] = 6] = "INVALID_USE";
185
- ErrorCode[ErrorCode["OVERCURRENT"] = 7] = "OVERCURRENT";
186
- ErrorCode[ErrorCode["INTERNAL_ERROR"] = 8] = "INTERNAL_ERROR";
187
- })(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
188
- // ============================================================================
189
- // Message Decoding
190
- // ============================================================================
191
- /**
192
- * Decode the message length from raw bytes
193
- * Messages longer than 127 bytes use two-byte length encoding
194
- */
195
- function decodeMessageLength(data) {
196
- if (data.length === 0) {
197
- return { length: 0, headerSize: 0 };
198
- }
199
- const firstByte = data[0];
200
- if ((firstByte & 0x80) === 0) {
201
- // Single byte length
202
- return { length: firstByte, headerSize: 1 };
203
- }
204
- else {
205
- // Two byte length
206
- if (data.length < 2) {
207
- return { length: 0, headerSize: 0 };
208
- }
209
- const length = (firstByte & 0x7f) | (data[1] << 7);
210
- return { length, headerSize: 2 };
211
- }
212
- }
213
- /**
214
- * Encode message length as header bytes
215
- */
216
- function encodeMessageLength(length) {
217
- if (length < 128) {
218
- return Buffer.from([length]);
219
- }
220
- else {
221
- return Buffer.from([(length & 0x7f) | 0x80, (length >> 7) & 0xff]);
222
- }
223
- }
224
- /**
225
- * Decode a version number from 4 bytes (BCD encoded)
226
- */
227
- function decodeVersion(data, offset = 0) {
228
- if (data.length < offset + 4) {
229
- return "0.0.00.0000";
230
- }
231
- const byte3 = data[offset + 3];
232
- const byte2 = data[offset + 2];
233
- const byte1 = data[offset + 1];
234
- const byte0 = data[offset];
235
- const major = (byte3 >> 4) & 0x07;
236
- const minor = byte3 & 0x0f;
237
- const bugfix = ((byte2 >> 4) * 10) + (byte2 & 0x0f);
238
- const build = ((byte1 >> 4) * 1000) + ((byte1 & 0x0f) * 100) + ((byte0 >> 4) * 10) + (byte0 & 0x0f);
239
- return `${major}.${minor}.${bugfix.toString().padStart(2, "0")}.${build.toString().padStart(4, "0")}`;
240
- }
241
- /**
242
- * Decode a MAC address from 6 bytes
243
- */
244
- function decodeMACAddress(data, offset = 0) {
245
- if (data.length < offset + 6) {
246
- return "00:00:00:00:00:00";
247
- }
248
- const bytes = [];
249
- for (let i = 0; i < 6; i++) {
250
- bytes.push(data[offset + i].toString(16).padStart(2, "0").toUpperCase());
251
- }
252
- return bytes.join(":");
253
- }
254
- /**
255
- * Decode a complete LWP3 message
256
- */
257
- function decodeMessage(data) {
258
- const { length, headerSize } = decodeMessageLength(data);
259
- if (length === 0 || data.length < length) {
260
- return null;
261
- }
262
- // Hub ID is at headerSize (always 0x00 for now), message type is at headerSize + 1
263
- const messageType = data[headerSize + 1];
264
- switch (messageType) {
265
- case MessageType.HUB_PROPERTIES:
266
- return decodeHubPropertyMessage(data, headerSize);
267
- case MessageType.HUB_ACTIONS:
268
- return decodeHubActionMessage(data, headerSize);
269
- case MessageType.HUB_ALERTS:
270
- return decodeHubAlertMessage(data, headerSize);
271
- case MessageType.HUB_ATTACHED_IO:
272
- return decodeAttachedIOMessage(data, headerSize);
273
- case MessageType.GENERIC_ERROR_MESSAGES:
274
- return decodeGenericErrorMessage(data, headerSize);
275
- case MessageType.PORT_INFORMATION:
276
- return decodePortInformationMessage(data, headerSize);
277
- case MessageType.PORT_MODE_INFORMATION:
278
- return decodePortModeInformationMessage(data, headerSize);
279
- case MessageType.PORT_VALUE_SINGLE:
280
- return decodePortValueSingleMessage(data, headerSize);
281
- case MessageType.PORT_VALUE_COMBINEDMODE:
282
- return decodePortValueCombinedMessage(data, headerSize);
283
- case MessageType.PORT_INPUT_FORMAT_SINGLE:
284
- return decodePortInputFormatSingleMessage(data, headerSize);
285
- case MessageType.PORT_INPUT_FORMAT_COMBINEDMODE:
286
- return decodePortInputFormatCombinedMessage(data, headerSize);
287
- case MessageType.PORT_OUTPUT_COMMAND_FEEDBACK:
288
- return decodePortOutputFeedbackMessage(data, headerSize);
289
- default:
290
- return null;
291
- }
292
- }
293
- function decodeHubPropertyMessage(data, headerSize) {
294
- return {
295
- type: MessageType.HUB_PROPERTIES,
296
- property: data[headerSize + 2],
297
- operation: data[headerSize + 3],
298
- payload: data.subarray(headerSize + 4),
299
- };
300
- }
301
- function decodeHubActionMessage(data, headerSize) {
302
- return {
303
- type: MessageType.HUB_ACTIONS,
304
- action: data[headerSize + 2],
305
- };
306
- }
307
- function decodeHubAlertMessage(data, headerSize) {
308
- return {
309
- type: MessageType.HUB_ALERTS,
310
- alertType: data[headerSize + 2],
311
- operation: data[headerSize + 3],
312
- payload: data.length > headerSize + 4 ? data[headerSize + 4] : 0,
313
- };
314
- }
315
- function decodeAttachedIOMessage(data, headerSize) {
316
- const portId = data[headerSize + 2];
317
- const event = data[headerSize + 3];
318
- const message = {
319
- type: MessageType.HUB_ATTACHED_IO,
320
- portId,
321
- event,
322
- deviceType: types_1.DeviceType.UNKNOWN,
323
- };
324
- if (event === types_1.PortEvent.ATTACHED) {
325
- message.deviceType = data.readUInt16LE(headerSize + 4);
326
- if (data.length >= headerSize + 12) {
327
- message.hardwareRevision = decodeVersion(data, headerSize + 6);
328
- message.softwareRevision = decodeVersion(data, headerSize + 10);
329
- }
330
- }
331
- else if (event === types_1.PortEvent.ATTACHED_VIRTUAL) {
332
- message.deviceType = data.readUInt16LE(headerSize + 4);
333
- message.portIdA = data[headerSize + 6];
334
- message.portIdB = data[headerSize + 7];
335
- }
336
- return message;
337
- }
338
- function decodeGenericErrorMessage(data, headerSize) {
339
- return {
340
- type: MessageType.GENERIC_ERROR_MESSAGES,
341
- commandType: data[headerSize + 2],
342
- errorCode: data[headerSize + 3],
343
- };
344
- }
345
- function decodePortInformationMessage(data, headerSize) {
346
- const portId = data[headerSize + 2];
347
- const informationType = data[headerSize + 3];
348
- const message = {
349
- type: MessageType.PORT_INFORMATION,
350
- portId,
351
- informationType,
352
- };
353
- if (informationType === PortInformationType.MODE_INFO) {
354
- message.capabilities = data[headerSize + 4];
355
- message.modeCount = data[headerSize + 5];
356
- message.inputModes = data.readUInt16LE(headerSize + 6);
357
- message.outputModes = data.readUInt16LE(headerSize + 8);
358
- }
359
- else if (informationType === PortInformationType.POSSIBLE_MODE_COMBINATIONS) {
360
- const combinations = [];
361
- for (let i = headerSize + 4; i < data.length; i += 2) {
362
- if (i + 1 < data.length) {
363
- combinations.push(data.readUInt16LE(i));
364
- }
365
- }
366
- message.modeCombinations = combinations;
367
- }
368
- return message;
369
- }
370
- function decodePortModeInformationMessage(data, headerSize) {
371
- const portId = data[headerSize + 2];
372
- const mode = data[headerSize + 3];
373
- const informationType = data[headerSize + 4];
374
- const message = {
375
- type: MessageType.PORT_MODE_INFORMATION,
376
- portId,
377
- mode,
378
- informationType,
379
- };
380
- const payload = data.subarray(headerSize + 5);
381
- switch (informationType) {
382
- case ModeInformationType.NAME:
383
- message.name = payload.toString("ascii").replace(/\0+$/, "");
384
- break;
385
- case ModeInformationType.RAW:
386
- message.rawRange = {
387
- min: payload.readFloatLE(0),
388
- max: payload.readFloatLE(4),
389
- };
390
- break;
391
- case ModeInformationType.PCT:
392
- message.pctRange = {
393
- min: payload.readFloatLE(0),
394
- max: payload.readFloatLE(4),
395
- };
396
- break;
397
- case ModeInformationType.SI:
398
- message.siRange = {
399
- min: payload.readFloatLE(0),
400
- max: payload.readFloatLE(4),
401
- };
402
- break;
403
- case ModeInformationType.SYMBOL:
404
- message.symbol = payload.toString("ascii").replace(/\0+$/, "");
405
- break;
406
- case ModeInformationType.MAPPING:
407
- message.mapping = payload.readUInt16LE(0);
408
- break;
409
- case ModeInformationType.MOTOR_BIAS:
410
- message.motorBias = payload[0];
411
- break;
412
- case ModeInformationType.CAPABILITY_BITS:
413
- message.capabilityBits = payload.subarray(0, 6);
414
- break;
415
- case ModeInformationType.VALUE_FORMAT:
416
- message.valueFormat = {
417
- datasetCount: payload[0],
418
- datasetType: payload[1],
419
- figures: payload[2],
420
- decimals: payload[3],
421
- };
422
- break;
423
- }
424
- return message;
425
- }
426
- function decodePortValueSingleMessage(data, headerSize) {
427
- return {
428
- type: MessageType.PORT_VALUE_SINGLE,
429
- portId: data[headerSize + 2],
430
- value: data.subarray(headerSize + 3),
431
- };
432
- }
433
- function decodePortValueCombinedMessage(data, headerSize) {
434
- return {
435
- type: MessageType.PORT_VALUE_COMBINEDMODE,
436
- portId: data[headerSize + 2],
437
- modeDatasets: data.readUInt16LE(headerSize + 3),
438
- values: data.subarray(headerSize + 5),
439
- };
440
- }
441
- function decodePortInputFormatSingleMessage(data, headerSize) {
442
- return {
443
- type: MessageType.PORT_INPUT_FORMAT_SINGLE,
444
- portId: data[headerSize + 2],
445
- mode: data[headerSize + 3],
446
- deltaInterval: data.readUInt32LE(headerSize + 4),
447
- notificationEnabled: data[headerSize + 8] === 1,
448
- };
449
- }
450
- function decodePortInputFormatCombinedMessage(data, headerSize) {
451
- return {
452
- type: MessageType.PORT_INPUT_FORMAT_COMBINEDMODE,
453
- portId: data[headerSize + 2],
454
- combinedControl: data[headerSize + 3],
455
- modeDatasetPointer: data.readUInt16LE(headerSize + 4),
456
- };
457
- }
458
- function decodePortOutputFeedbackMessage(data, headerSize) {
459
- return {
460
- type: MessageType.PORT_OUTPUT_COMMAND_FEEDBACK,
461
- portId: data[headerSize + 2],
462
- feedback: data[headerSize + 3],
463
- };
464
- }
465
- // ============================================================================
466
- // Message Encoding
467
- // ============================================================================
468
- /**
469
- * Wrap payload with LWP3 message header
470
- */
471
- function encodeMessage(messageType, payload) {
472
- const length = 3 + payload.length; // length byte(s) + hub ID (0x00) + message type + payload
473
- const header = encodeMessageLength(length);
474
- return Buffer.concat([
475
- header,
476
- Buffer.from([0x00, messageType]),
477
- payload,
478
- ]);
479
- }
480
- /**
481
- * Create hub property request message
482
- */
483
- function createHubPropertyRequest(property, operation) {
484
- return encodeMessage(MessageType.HUB_PROPERTIES, Buffer.from([property, operation]));
485
- }
486
- /**
487
- * Create hub property set message (for writable properties)
488
- */
489
- function createHubPropertySet(property, value) {
490
- return encodeMessage(MessageType.HUB_PROPERTIES, Buffer.concat([Buffer.from([property, HubPropertyOperation.SET]), value]));
491
- }
492
- /**
493
- * Create hub action message
494
- */
495
- function createHubAction(action) {
496
- return encodeMessage(MessageType.HUB_ACTIONS, Buffer.from([action]));
497
- }
498
- /**
499
- * Create alert subscription message
500
- */
501
- function createAlertSubscription(alertType, enable) {
502
- return encodeMessage(MessageType.HUB_ALERTS, Buffer.from([alertType, enable ? AlertOperation.ENABLE_UPDATE : AlertOperation.DISABLE_UPDATE]));
503
- }
504
- /**
505
- * Create port information request message
506
- */
507
- function createPortInformationRequest(portId, informationType) {
508
- return encodeMessage(MessageType.PORT_INFORMATION_REQUEST, Buffer.from([portId, informationType]));
509
- }
510
- /**
511
- * Create port mode information request message
512
- */
513
- function createPortModeInformationRequest(portId, mode, infoType) {
514
- return encodeMessage(MessageType.PORT_MODE_INFORMATION_REQUEST, Buffer.from([portId, mode, infoType]));
515
- }
516
- /**
517
- * Create port input format setup (subscribe/unsubscribe to notifications)
518
- */
519
- function createPortInputFormatSetup(portId, mode, deltaInterval, notificationEnabled) {
520
- const payload = Buffer.alloc(8);
521
- payload[0] = portId;
522
- payload[1] = mode;
523
- payload.writeUInt32LE(deltaInterval, 2);
524
- payload[6] = notificationEnabled ? 1 : 0;
525
- return encodeMessage(MessageType.PORT_INPUT_FORMAT_SETUP_SINGLE, payload);
526
- }
527
- /**
528
- * Create virtual port setup message (connect/disconnect)
529
- */
530
- function createVirtualPortSetup(connect, portIdA, portIdB, virtualPortId) {
531
- if (connect && portIdB !== undefined) {
532
- return encodeMessage(MessageType.VIRTUAL_PORT_SETUP, Buffer.from([0x01, portIdA, portIdB]));
533
- }
534
- else if (!connect && virtualPortId !== undefined) {
535
- return encodeMessage(MessageType.VIRTUAL_PORT_SETUP, Buffer.from([0x00, virtualPortId]));
536
- }
537
- throw new Error("Invalid virtual port setup parameters");
538
- }
539
- // ============================================================================
540
- // Port Output Commands
541
- // ============================================================================
542
- /**
543
- * Create port output command wrapper
544
- */
545
- function createPortOutputCommand(portId, startupCompletion, subCommand, payload) {
546
- return encodeMessage(MessageType.PORT_OUTPUT_COMMAND, Buffer.concat([Buffer.from([portId, startupCompletion, subCommand]), payload]));
547
- }
548
- /**
549
- * Set motor power (unregulated)
550
- */
551
- function createStartPower(portId, power) {
552
- // Clamp power to -100..100
553
- power = Math.max(-100, Math.min(100, power));
554
- const signedPower = power < 0 ? 256 + power : power;
555
- return createPortOutputCommand(portId, 0x11, // Execute immediately, command feedback
556
- MotorSubCommand.WRITE_DIRECT_MODE_DATA, Buffer.from([0x00, signedPower]) // Mode 0 = power
557
- );
558
- }
559
- /**
560
- * Set motor power for dual motors (virtual port)
561
- */
562
- function createStartPowerDual(portId, power1, power2) {
563
- power1 = Math.max(-100, Math.min(100, power1));
564
- power2 = Math.max(-100, Math.min(100, power2));
565
- const signedPower1 = power1 < 0 ? 256 + power1 : power1;
566
- const signedPower2 = power2 < 0 ? 256 + power2 : power2;
567
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.START_POWER_DUAL, Buffer.from([signedPower1, signedPower2]));
568
- }
569
- /**
570
- * Set motor speed (regulated)
571
- */
572
- function createStartSpeed(portId, speed, maxPower = 100, useProfile = types_1.Profile.DO_NOT_USE) {
573
- speed = Math.max(-100, Math.min(100, speed));
574
- maxPower = Math.max(0, Math.min(100, maxPower));
575
- const signedSpeed = speed < 0 ? 256 + speed : speed;
576
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.START_SPEED, Buffer.from([signedSpeed, maxPower, useProfile]));
577
- }
578
- /**
579
- * Set motor speed for dual motors (virtual port)
580
- */
581
- function createStartSpeedDual(portId, speed1, speed2, maxPower = 100, useProfile = types_1.Profile.DO_NOT_USE) {
582
- speed1 = Math.max(-100, Math.min(100, speed1));
583
- speed2 = Math.max(-100, Math.min(100, speed2));
584
- maxPower = Math.max(0, Math.min(100, maxPower));
585
- const signedSpeed1 = speed1 < 0 ? 256 + speed1 : speed1;
586
- const signedSpeed2 = speed2 < 0 ? 256 + speed2 : speed2;
587
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.START_SPEED_DUAL, Buffer.from([signedSpeed1, signedSpeed2, maxPower, useProfile]));
588
- }
589
- /**
590
- * Run motor for a specified time
591
- */
592
- function createStartSpeedForTime(portId, time, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE, useProfile = types_1.Profile.DO_NOT_USE) {
593
- speed = Math.max(-100, Math.min(100, speed));
594
- maxPower = Math.max(0, Math.min(100, maxPower));
595
- const signedSpeed = speed < 0 ? 256 + speed : speed;
596
- const payload = Buffer.alloc(6);
597
- payload.writeUInt16LE(time, 0);
598
- payload[2] = signedSpeed;
599
- payload[3] = maxPower;
600
- payload[4] = endState;
601
- payload[5] = useProfile;
602
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.START_SPEED_FOR_TIME, payload);
603
- }
604
- /**
605
- * Run motor for a specified number of degrees
606
- */
607
- function createStartSpeedForDegrees(portId, degrees, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE, useProfile = types_1.Profile.DO_NOT_USE) {
608
- speed = Math.max(-100, Math.min(100, speed));
609
- maxPower = Math.max(0, Math.min(100, maxPower));
610
- const signedSpeed = speed < 0 ? 256 + speed : speed;
611
- const payload = Buffer.alloc(8);
612
- payload.writeInt32LE(Math.abs(degrees), 0);
613
- payload[4] = signedSpeed;
614
- payload[5] = maxPower;
615
- payload[6] = endState;
616
- payload[7] = useProfile;
617
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.START_SPEED_FOR_DEGREES, payload);
618
- }
619
- /**
620
- * Go to absolute position
621
- */
622
- function createGotoAbsolutePosition(portId, position, speed, maxPower = 100, endState = types_1.BrakingStyle.BRAKE, useProfile = types_1.Profile.DO_NOT_USE) {
623
- speed = Math.max(0, Math.min(100, Math.abs(speed)));
624
- maxPower = Math.max(0, Math.min(100, maxPower));
625
- const payload = Buffer.alloc(8);
626
- payload.writeInt32LE(position, 0);
627
- payload[4] = speed;
628
- payload[5] = maxPower;
629
- payload[6] = endState;
630
- payload[7] = useProfile;
631
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.GOTO_ABSOLUTE_POSITION, payload);
632
- }
633
- /**
634
- * Preset (reset) encoder position
635
- */
636
- function createPresetEncoder(portId, position = 0) {
637
- const payload = Buffer.alloc(4);
638
- payload.writeInt32LE(position, 0);
639
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.WRITE_DIRECT_MODE_DATA, Buffer.concat([Buffer.from([0x02]), payload]) // Mode 2 = position preset
640
- );
641
- }
642
- /**
643
- * Set acceleration time
644
- */
645
- function createSetAccTime(portId, time, profileNumber = 0) {
646
- const payload = Buffer.alloc(3);
647
- payload.writeUInt16LE(time, 0);
648
- payload[2] = profileNumber;
649
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.SET_ACC_TIME, payload);
650
- }
651
- /**
652
- * Set deceleration time
653
- */
654
- function createSetDecTime(portId, time, profileNumber = 0) {
655
- const payload = Buffer.alloc(3);
656
- payload.writeUInt16LE(time, 0);
657
- payload[2] = profileNumber;
658
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.SET_DEC_TIME, payload);
659
- }
660
- // ============================================================================
661
- // LED Commands
662
- // ============================================================================
663
- /**
664
- * Set LED color by color number
665
- */
666
- function createSetLEDColor(portId, color) {
667
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.WRITE_DIRECT_MODE_DATA, Buffer.from([0x00, color]) // Mode 0 = color number
668
- );
669
- }
670
- /**
671
- * Set LED color by RGB values
672
- */
673
- function createSetLEDRGB(portId, red, green, blue) {
674
- red = Math.max(0, Math.min(255, red));
675
- green = Math.max(0, Math.min(255, green));
676
- blue = Math.max(0, Math.min(255, blue));
677
- return createPortOutputCommand(portId, 0x11, MotorSubCommand.WRITE_DIRECT_MODE_DATA, Buffer.from([0x01, red, green, blue]) // Mode 1 = RGB
678
- );
679
- }
680
- // ============================================================================
681
- // Utility Functions
682
- // ============================================================================
683
- /**
684
- * Parse motor feedback flags
685
- */
686
- function parseMotorFeedback(feedback) {
687
- return {
688
- portId: 0, // To be set by caller
689
- busy: (feedback & 0x01) !== 0,
690
- completed: (feedback & 0x02) !== 0,
691
- discarded: (feedback & 0x04) !== 0,
692
- };
693
- }
694
- /**
695
- * Convert hub property payload to typed value
696
- */
697
- function parseHubPropertyValue(property, payload) {
698
- switch (property) {
699
- case HubProperty.ADVERTISING_NAME:
700
- return payload.toString("ascii").replace(/\0+$/, "");
701
- case HubProperty.BUTTON:
702
- return payload[0] === 1 ? types_1.ButtonState.PRESSED : types_1.ButtonState.RELEASED;
703
- case HubProperty.FW_VERSION:
704
- case HubProperty.HW_VERSION:
705
- return decodeVersion(payload);
706
- case HubProperty.RSSI:
707
- return payload.readInt8(0);
708
- case HubProperty.BATTERY_VOLTAGE:
709
- return payload[0];
710
- case HubProperty.BATTERY_TYPE:
711
- return payload[0];
712
- case HubProperty.MANUFACTURER_NAME:
713
- case HubProperty.RADIO_FIRMWARE_VERSION:
714
- return payload.toString("ascii").replace(/\0+$/, "");
715
- case HubProperty.LWP_PROTOCOL_VERSION:
716
- return `${(payload[1] >> 4) & 0x0f}${payload[1] & 0x0f}.${(payload[0] >> 4) & 0x0f}${payload[0] & 0x0f}`;
717
- case HubProperty.SYSTEM_TYPE_ID:
718
- return payload[0];
719
- case HubProperty.HW_NETWORK_ID:
720
- return payload[0];
721
- case HubProperty.PRIMARY_MAC_ADDRESS:
722
- case HubProperty.SECONDARY_MAC_ADDRESS:
723
- return decodeMACAddress(payload);
724
- case HubProperty.HW_NETWORK_FAMILY:
725
- return payload[0];
726
- default:
727
- return payload;
728
- }
729
- }
730
- //# sourceMappingURL=protocol.js.map