node-poweredup 9.0.0 → 10.0.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.
- package/README.md +6 -11
- package/dist/color.d.ts +7 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +15 -0
- package/dist/color.js.map +1 -0
- package/dist/consts.d.ts +645 -0
- package/dist/consts.d.ts.map +1 -0
- package/{docs/consts.js.html → dist/consts.js} +74 -127
- package/dist/consts.js.map +1 -0
- package/dist/devices/absolutemotor.d.ts +41 -0
- package/dist/devices/absolutemotor.d.ts.map +1 -0
- package/dist/devices/absolutemotor.js +115 -0
- package/dist/devices/absolutemotor.js.map +1 -0
- package/dist/devices/basicmotor.d.ts +37 -0
- package/dist/devices/basicmotor.d.ts.map +1 -0
- package/dist/devices/basicmotor.js +57 -0
- package/dist/devices/basicmotor.js.map +1 -0
- package/dist/devices/colordistancesensor.d.ts +74 -0
- package/dist/devices/colordistancesensor.d.ts.map +1 -0
- package/dist/devices/colordistancesensor.js +278 -0
- package/dist/devices/colordistancesensor.js.map +1 -0
- package/dist/devices/currentsensor.d.ts +17 -0
- package/dist/devices/currentsensor.d.ts.map +1 -0
- package/dist/devices/currentsensor.js +55 -0
- package/dist/devices/currentsensor.js.map +1 -0
- package/dist/devices/device.d.ts +72 -0
- package/dist/devices/device.d.ts.map +1 -0
- package/dist/devices/device.js +162 -0
- package/dist/devices/device.js.map +1 -0
- package/dist/devices/duplotrainbasecolorsensor.d.ts +20 -0
- package/dist/devices/duplotrainbasecolorsensor.d.ts.map +1 -0
- package/dist/devices/duplotrainbasecolorsensor.js +77 -0
- package/dist/devices/duplotrainbasecolorsensor.js.map +1 -0
- package/dist/devices/duplotrainbasemotor.d.ts +10 -0
- package/dist/devices/duplotrainbasemotor.d.ts.map +1 -0
- package/dist/devices/duplotrainbasemotor.js +12 -0
- package/dist/devices/duplotrainbasemotor.js.map +1 -0
- package/dist/devices/duplotrainbasespeaker.d.ts +27 -0
- package/dist/devices/duplotrainbasespeaker.d.ts.map +1 -0
- package/dist/devices/duplotrainbasespeaker.js +38 -0
- package/dist/devices/duplotrainbasespeaker.js.map +1 -0
- package/dist/devices/duplotrainbasespeedometer.d.ts +17 -0
- package/dist/devices/duplotrainbasespeedometer.d.ts.map +1 -0
- package/dist/devices/duplotrainbasespeedometer.js +34 -0
- package/dist/devices/duplotrainbasespeedometer.js.map +1 -0
- package/dist/devices/hubled.d.ts +28 -0
- package/dist/devices/hubled.d.ts.map +1 -0
- package/dist/devices/hubled.js +58 -0
- package/dist/devices/hubled.js.map +1 -0
- package/dist/devices/light.d.ts +24 -0
- package/dist/devices/light.d.ts.map +1 -0
- package/dist/devices/light.js +44 -0
- package/dist/devices/light.js.map +1 -0
- package/dist/devices/marioaccelerometer.d.ts +18 -0
- package/dist/devices/marioaccelerometer.d.ts.map +1 -0
- package/dist/devices/marioaccelerometer.js +50 -0
- package/dist/devices/marioaccelerometer.js.map +1 -0
- package/dist/devices/mariobarcodesensor.d.ts +18 -0
- package/dist/devices/mariobarcodesensor.d.ts.map +1 -0
- package/dist/devices/mariobarcodesensor.js +58 -0
- package/dist/devices/mariobarcodesensor.js.map +1 -0
- package/dist/devices/mariopantssensor.d.ts +17 -0
- package/dist/devices/mariopantssensor.d.ts.map +1 -0
- package/dist/devices/mariopantssensor.js +34 -0
- package/dist/devices/mariopantssensor.js.map +1 -0
- package/dist/devices/mediumlinearmotor.d.ts +10 -0
- package/dist/devices/mediumlinearmotor.d.ts.map +1 -0
- package/dist/devices/mediumlinearmotor.js +12 -0
- package/dist/devices/mediumlinearmotor.js.map +1 -0
- package/dist/devices/motionsensor.d.ts +17 -0
- package/dist/devices/motionsensor.d.ts.map +1 -0
- package/dist/devices/motionsensor.js +38 -0
- package/dist/devices/motionsensor.js.map +1 -0
- package/dist/devices/movehubmediumlinearmotor.d.ts +10 -0
- package/dist/devices/movehubmediumlinearmotor.d.ts.map +1 -0
- package/dist/devices/movehubmediumlinearmotor.js +12 -0
- package/dist/devices/movehubmediumlinearmotor.js.map +1 -0
- package/dist/devices/movehubtiltsensor.d.ts +17 -0
- package/dist/devices/movehubtiltsensor.d.ts.map +1 -0
- package/dist/devices/movehubtiltsensor.js +36 -0
- package/dist/devices/movehubtiltsensor.js.map +1 -0
- package/dist/devices/piezobuzzer.d.ts +17 -0
- package/dist/devices/piezobuzzer.d.ts.map +1 -0
- package/dist/devices/piezobuzzer.js +27 -0
- package/dist/devices/piezobuzzer.js.map +1 -0
- package/dist/devices/remotecontrolbutton.d.ts +20 -0
- package/dist/devices/remotecontrolbutton.d.ts.map +1 -0
- package/dist/devices/remotecontrolbutton.js +40 -0
- package/dist/devices/remotecontrolbutton.js.map +1 -0
- package/dist/devices/simplemediumlinearmotor.d.ts +10 -0
- package/dist/devices/simplemediumlinearmotor.d.ts.map +1 -0
- package/dist/devices/simplemediumlinearmotor.js +12 -0
- package/dist/devices/simplemediumlinearmotor.js.map +1 -0
- package/dist/devices/tachomotor.d.ts +65 -0
- package/dist/devices/tachomotor.d.ts.map +1 -0
- package/dist/devices/tachomotor.js +161 -0
- package/dist/devices/tachomotor.js.map +1 -0
- package/dist/devices/technic3x3colorlightmatrix.d.ts +22 -0
- package/dist/devices/technic3x3colorlightmatrix.d.ts.map +1 -0
- package/dist/devices/technic3x3colorlightmatrix.js +53 -0
- package/dist/devices/technic3x3colorlightmatrix.js.map +1 -0
- package/dist/devices/techniccolorsensor.d.ts +27 -0
- package/dist/devices/techniccolorsensor.d.ts.map +1 -0
- package/dist/devices/techniccolorsensor.js +71 -0
- package/dist/devices/techniccolorsensor.js.map +1 -0
- package/dist/devices/technicdistancesensor.d.ts +27 -0
- package/dist/devices/technicdistancesensor.d.ts.map +1 -0
- package/dist/devices/technicdistancesensor.js +57 -0
- package/dist/devices/technicdistancesensor.js.map +1 -0
- package/dist/devices/technicforcesensor.d.ts +19 -0
- package/dist/devices/technicforcesensor.d.ts.map +1 -0
- package/dist/devices/technicforcesensor.js +58 -0
- package/dist/devices/technicforcesensor.js.map +1 -0
- package/dist/devices/techniclargeangularmotor.d.ts +13 -0
- package/dist/devices/techniclargeangularmotor.d.ts.map +1 -0
- package/dist/devices/techniclargeangularmotor.js +12 -0
- package/dist/devices/techniclargeangularmotor.js.map +1 -0
- package/dist/devices/techniclargelinearmotor.d.ts +10 -0
- package/dist/devices/techniclargelinearmotor.d.ts.map +1 -0
- package/dist/devices/techniclargelinearmotor.js +12 -0
- package/dist/devices/techniclargelinearmotor.js.map +1 -0
- package/dist/devices/technicmediumangularmotor.d.ts +13 -0
- package/dist/devices/technicmediumangularmotor.d.ts.map +1 -0
- package/dist/devices/technicmediumangularmotor.js +12 -0
- package/dist/devices/technicmediumangularmotor.js.map +1 -0
- package/dist/devices/technicmediumhubaccelerometersensor.d.ts +17 -0
- package/dist/devices/technicmediumhubaccelerometersensor.d.ts.map +1 -0
- package/dist/devices/technicmediumhubaccelerometersensor.js +38 -0
- package/dist/devices/technicmediumhubaccelerometersensor.js.map +1 -0
- package/dist/devices/technicmediumhubgyrosensor.d.ts +17 -0
- package/dist/devices/technicmediumhubgyrosensor.d.ts.map +1 -0
- package/dist/devices/technicmediumhubgyrosensor.js +38 -0
- package/dist/devices/technicmediumhubgyrosensor.js.map +1 -0
- package/dist/devices/technicmediumhubtiltsensor.d.ts +38 -0
- package/dist/devices/technicmediumhubtiltsensor.d.ts.map +1 -0
- package/dist/devices/technicmediumhubtiltsensor.js +103 -0
- package/dist/devices/technicmediumhubtiltsensor.js.map +1 -0
- package/dist/devices/technicsmallangularmotor.d.ts +13 -0
- package/dist/devices/technicsmallangularmotor.d.ts.map +1 -0
- package/dist/devices/technicsmallangularmotor.js +12 -0
- package/dist/devices/technicsmallangularmotor.js.map +1 -0
- package/dist/devices/technicxlargelinearmotor.d.ts +10 -0
- package/dist/devices/technicxlargelinearmotor.d.ts.map +1 -0
- package/dist/devices/technicxlargelinearmotor.js +12 -0
- package/dist/devices/technicxlargelinearmotor.js.map +1 -0
- package/dist/devices/tiltsensor.d.ts +17 -0
- package/dist/devices/tiltsensor.d.ts.map +1 -0
- package/dist/devices/tiltsensor.js +36 -0
- package/dist/devices/tiltsensor.js.map +1 -0
- package/dist/devices/trainmotor.d.ts +10 -0
- package/dist/devices/trainmotor.d.ts.map +1 -0
- package/dist/devices/trainmotor.js +12 -0
- package/dist/devices/trainmotor.js.map +1 -0
- package/dist/devices/voltagesensor.d.ts +17 -0
- package/dist/devices/voltagesensor.d.ts.map +1 -0
- package/dist/devices/voltagesensor.js +59 -0
- package/dist/devices/voltagesensor.js.map +1 -0
- package/dist/hubs/basehub.d.ts +154 -0
- package/dist/hubs/basehub.d.ts.map +1 -0
- package/dist/hubs/basehub.js +383 -0
- package/dist/hubs/basehub.js.map +1 -0
- package/dist/hubs/duplotrainbase.d.ts +18 -0
- package/dist/hubs/duplotrainbase.d.ts.map +1 -0
- package/dist/hubs/duplotrainbase.js +35 -0
- package/dist/hubs/duplotrainbase.js.map +1 -0
- package/dist/hubs/hub.d.ts +20 -0
- package/dist/hubs/hub.d.ts.map +1 -0
- package/dist/hubs/hub.js +44 -0
- package/dist/hubs/hub.js.map +1 -0
- package/dist/hubs/lpf2hub.d.ts +46 -0
- package/dist/hubs/lpf2hub.d.ts.map +1 -0
- package/{docs/hubs_lpf2hub.js.html → dist/hubs/lpf2hub.js} +23 -103
- package/dist/hubs/lpf2hub.js.map +1 -0
- package/dist/hubs/mario.d.ts +18 -0
- package/dist/hubs/mario.d.ts.map +1 -0
- package/dist/hubs/mario.js +31 -0
- package/dist/hubs/mario.js.map +1 -0
- package/dist/hubs/movehub.d.ts +19 -0
- package/dist/hubs/movehub.d.ts.map +1 -0
- package/dist/hubs/movehub.js +46 -0
- package/dist/hubs/movehub.js.map +1 -0
- package/dist/hubs/remotecontrol.d.ts +18 -0
- package/dist/hubs/remotecontrol.d.ts.map +1 -0
- package/dist/hubs/remotecontrol.js +37 -0
- package/dist/hubs/remotecontrol.js.map +1 -0
- package/dist/hubs/technicmediumhub.d.ts +18 -0
- package/dist/hubs/technicmediumhub.d.ts.map +1 -0
- package/dist/hubs/technicmediumhub.js +42 -0
- package/dist/hubs/technicmediumhub.js.map +1 -0
- package/dist/hubs/technicsmallhub.d.ts +19 -0
- package/dist/hubs/technicsmallhub.d.ts.map +1 -0
- package/dist/hubs/technicsmallhub.js +41 -0
- package/dist/hubs/technicsmallhub.js.map +1 -0
- package/dist/hubs/wedo2smarthub.d.ts +39 -0
- package/dist/hubs/wedo2smarthub.d.ts.map +1 -0
- package/dist/hubs/wedo2smarthub.js +186 -0
- package/dist/hubs/wedo2smarthub.js.map +1 -0
- package/dist/index-browser.d.ts +2 -0
- package/dist/index-browser.d.ts.map +1 -0
- package/dist/index-browser.js +96 -0
- package/dist/index-browser.js.map +1 -0
- package/dist/index-node.d.ts +50 -0
- package/dist/index-node.d.ts.map +1 -0
- package/dist/index-node.js +50 -0
- package/dist/index-node.js.map +1 -0
- package/dist/interfaces.d.ts +24 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +2 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/nobleabstraction.d.ts +27 -0
- package/dist/nobleabstraction.d.ts.map +1 -0
- package/dist/nobleabstraction.js +121 -0
- package/dist/nobleabstraction.js.map +1 -0
- package/dist/node/color.js +2 -29
- package/dist/node/color.js.map +1 -1
- package/dist/node/commands.d.ts +299 -0
- package/dist/node/commands.js +672 -0
- package/dist/node/commands.js.map +1 -0
- package/dist/node/connection.d.ts +187 -0
- package/dist/node/connection.js +478 -0
- package/dist/node/connection.js.map +1 -0
- package/dist/node/consts.js +57 -60
- package/dist/node/consts.js.map +1 -1
- package/dist/node/devices/absolutemotor.d.ts +0 -1
- package/dist/node/devices/absolutemotor.js +14 -41
- package/dist/node/devices/absolutemotor.js.map +1 -1
- package/dist/node/devices/basicmotor.d.ts +3 -3
- package/dist/node/devices/basicmotor.js +6 -33
- package/dist/node/devices/basicmotor.js.map +1 -1
- package/dist/node/devices/colordistancesensor.d.ts +4 -5
- package/dist/node/devices/colordistancesensor.js +11 -38
- package/dist/node/devices/colordistancesensor.js.map +1 -1
- package/dist/node/devices/currentsensor.d.ts +0 -1
- package/dist/node/devices/currentsensor.js +7 -34
- package/dist/node/devices/currentsensor.js.map +1 -1
- package/dist/node/devices/device.d.ts +4 -7
- package/dist/node/devices/device.js +3 -30
- package/dist/node/devices/device.js.map +1 -1
- package/dist/node/devices/duplotrainbasecolorsensor.d.ts +0 -1
- package/dist/node/devices/duplotrainbasecolorsensor.js +9 -36
- package/dist/node/devices/duplotrainbasecolorsensor.js.map +1 -1
- package/dist/node/devices/duplotrainbasemotor.js +3 -30
- package/dist/node/devices/duplotrainbasemotor.js.map +1 -1
- package/dist/node/devices/duplotrainbasespeaker.js +5 -32
- package/dist/node/devices/duplotrainbasespeaker.js.map +1 -1
- package/dist/node/devices/duplotrainbasespeedometer.d.ts +0 -1
- package/dist/node/devices/duplotrainbasespeedometer.js +7 -34
- package/dist/node/devices/duplotrainbasespeedometer.js.map +1 -1
- package/dist/node/devices/hubled.js +5 -32
- package/dist/node/devices/hubled.js.map +1 -1
- package/dist/node/devices/index.d.ts +14 -0
- package/dist/node/devices/index.js +154 -0
- package/dist/node/devices/index.js.map +1 -0
- package/dist/node/devices/led.d.ts +140 -0
- package/dist/node/devices/led.js +295 -0
- package/dist/node/devices/led.js.map +1 -0
- package/dist/node/devices/light.js +5 -32
- package/dist/node/devices/light.js.map +1 -1
- package/dist/node/devices/marioaccelerometer.d.ts +0 -1
- package/dist/node/devices/marioaccelerometer.js +7 -34
- package/dist/node/devices/marioaccelerometer.js.map +1 -1
- package/dist/node/devices/mariobarcodesensor.d.ts +0 -1
- package/dist/node/devices/mariobarcodesensor.js +7 -34
- package/dist/node/devices/mariobarcodesensor.js.map +1 -1
- package/dist/node/devices/mariopantssensor.d.ts +0 -1
- package/dist/node/devices/mariopantssensor.js +7 -34
- package/dist/node/devices/mariopantssensor.js.map +1 -1
- package/dist/node/devices/mediumlinearmotor.js +3 -30
- package/dist/node/devices/mediumlinearmotor.js.map +1 -1
- package/dist/node/devices/motionsensor.d.ts +0 -1
- package/dist/node/devices/motionsensor.js +7 -34
- package/dist/node/devices/motionsensor.js.map +1 -1
- package/dist/node/devices/motor.d.ts +182 -0
- package/dist/node/devices/motor.js +367 -0
- package/dist/node/devices/motor.js.map +1 -0
- package/dist/node/devices/movehubmediumlinearmotor.js +3 -30
- package/dist/node/devices/movehubmediumlinearmotor.js.map +1 -1
- package/dist/node/devices/movehubtiltsensor.d.ts +0 -1
- package/dist/node/devices/movehubtiltsensor.js +7 -34
- package/dist/node/devices/movehubtiltsensor.js.map +1 -1
- package/dist/node/devices/piezobuzzer.js +3 -30
- package/dist/node/devices/piezobuzzer.js.map +1 -1
- package/dist/node/devices/remotecontrolbutton.d.ts +0 -1
- package/dist/node/devices/remotecontrolbutton.js +8 -35
- package/dist/node/devices/remotecontrolbutton.js.map +1 -1
- package/dist/node/devices/sensor.d.ts +305 -0
- package/dist/node/devices/sensor.js +662 -0
- package/dist/node/devices/sensor.js.map +1 -0
- package/dist/node/devices/simplemediumlinearmotor.js +3 -30
- package/dist/node/devices/simplemediumlinearmotor.js.map +1 -1
- package/dist/node/devices/tachomotor.d.ts +0 -1
- package/dist/node/devices/tachomotor.js +14 -41
- package/dist/node/devices/tachomotor.js.map +1 -1
- package/dist/node/devices/technic3x3colorlightmatrix.js +7 -34
- package/dist/node/devices/technic3x3colorlightmatrix.js.map +1 -1
- package/dist/node/devices/techniccolorsensor.d.ts +0 -1
- package/dist/node/devices/techniccolorsensor.js +9 -36
- package/dist/node/devices/techniccolorsensor.js.map +1 -1
- package/dist/node/devices/technicdistancesensor.d.ts +0 -1
- package/dist/node/devices/technicdistancesensor.js +7 -34
- package/dist/node/devices/technicdistancesensor.js.map +1 -1
- package/dist/node/devices/technicforcesensor.d.ts +0 -1
- package/dist/node/devices/technicforcesensor.js +7 -34
- package/dist/node/devices/technicforcesensor.js.map +1 -1
- package/dist/node/devices/techniclargeangularmotor.js +3 -30
- package/dist/node/devices/techniclargeangularmotor.js.map +1 -1
- package/dist/node/devices/techniclargelinearmotor.js +3 -30
- package/dist/node/devices/techniclargelinearmotor.js.map +1 -1
- package/dist/node/devices/technicmediumangularmotor.js +3 -30
- package/dist/node/devices/technicmediumangularmotor.js.map +1 -1
- package/dist/node/devices/technicmediumhubaccelerometersensor.d.ts +0 -1
- package/dist/node/devices/technicmediumhubaccelerometersensor.js +7 -34
- package/dist/node/devices/technicmediumhubaccelerometersensor.js.map +1 -1
- package/dist/node/devices/technicmediumhubgyrosensor.d.ts +0 -1
- package/dist/node/devices/technicmediumhubgyrosensor.js +7 -34
- package/dist/node/devices/technicmediumhubgyrosensor.js.map +1 -1
- package/dist/node/devices/technicmediumhubtiltsensor.d.ts +0 -1
- package/dist/node/devices/technicmediumhubtiltsensor.js +7 -34
- package/dist/node/devices/technicmediumhubtiltsensor.js.map +1 -1
- package/dist/node/devices/technicsmallangularmotor.js +3 -30
- package/dist/node/devices/technicsmallangularmotor.js.map +1 -1
- package/dist/node/devices/technicxlargelinearmotor.js +3 -30
- package/dist/node/devices/technicxlargelinearmotor.js.map +1 -1
- package/dist/node/devices/tiltsensor.d.ts +0 -1
- package/dist/node/devices/tiltsensor.js +7 -34
- package/dist/node/devices/tiltsensor.js.map +1 -1
- package/dist/node/devices/trainmotor.js +3 -30
- package/dist/node/devices/trainmotor.js.map +1 -1
- package/dist/node/devices/voltagesensor.d.ts +0 -1
- package/dist/node/devices/voltagesensor.js +7 -34
- package/dist/node/devices/voltagesensor.js.map +1 -1
- package/dist/node/hub.d.ts +291 -0
- package/dist/node/hub.js +778 -0
- package/dist/node/hub.js.map +1 -0
- package/dist/node/hubs/basehub.d.ts +9 -11
- package/dist/node/hubs/basehub.js +74 -101
- package/dist/node/hubs/basehub.js.map +1 -1
- package/dist/node/hubs/duplotrainbase.d.ts +1 -2
- package/dist/node/hubs/duplotrainbase.js +6 -33
- package/dist/node/hubs/duplotrainbase.js.map +1 -1
- package/dist/node/hubs/hub.d.ts +1 -2
- package/dist/node/hubs/hub.js +8 -35
- package/dist/node/hubs/hub.js.map +1 -1
- package/dist/node/hubs/lpf2hub.d.ts +5 -6
- package/dist/node/hubs/lpf2hub.js +17 -44
- package/dist/node/hubs/lpf2hub.js.map +1 -1
- package/dist/node/hubs/mario.d.ts +1 -2
- package/dist/node/hubs/mario.js +6 -33
- package/dist/node/hubs/mario.js.map +1 -1
- package/dist/node/hubs/movehub.d.ts +1 -2
- package/dist/node/hubs/movehub.js +8 -35
- package/dist/node/hubs/movehub.js.map +1 -1
- package/dist/node/hubs/remotecontrol.d.ts +1 -2
- package/dist/node/hubs/remotecontrol.js +6 -33
- package/dist/node/hubs/remotecontrol.js.map +1 -1
- package/dist/node/hubs/technicmediumhub.d.ts +1 -2
- package/dist/node/hubs/technicmediumhub.js +6 -33
- package/dist/node/hubs/technicmediumhub.js.map +1 -1
- package/dist/node/hubs/technicsmallhub.d.ts +1 -2
- package/dist/node/hubs/technicsmallhub.js +6 -33
- package/dist/node/hubs/technicsmallhub.js.map +1 -1
- package/dist/node/hubs/wedo2smarthub.d.ts +3 -5
- package/dist/node/hubs/wedo2smarthub.js +10 -37
- package/dist/node/hubs/wedo2smarthub.js.map +1 -1
- package/dist/node/index-browser.js +91 -116
- package/dist/node/index-browser.js.map +1 -1
- package/dist/node/index-node.d.ts +1 -0
- package/dist/node/index-node.js +49 -119
- package/dist/node/index-node.js.map +1 -1
- package/dist/node/index.d.ts +31 -0
- package/dist/node/index.js +93 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/index.mjs +0 -0
- package/dist/node/interfaces.d.ts +1 -3
- package/dist/node/interfaces.js +1 -2
- package/dist/node/nobleabstraction.d.ts +0 -2
- package/dist/node/nobleabstraction.js +5 -7
- package/dist/node/nobleabstraction.js.map +1 -1
- package/dist/node/poweredup-browser.d.ts +0 -2
- package/dist/node/poweredup-browser.js +23 -49
- package/dist/node/poweredup-browser.js.map +1 -1
- package/dist/node/poweredup-node.d.ts +0 -2
- package/dist/node/poweredup-node.js +31 -58
- package/dist/node/poweredup-node.js.map +1 -1
- package/dist/node/poweredup.d.ts +83 -0
- package/dist/node/poweredup.js +542 -0
- package/dist/node/poweredup.js.map +1 -0
- package/dist/node/protocol-wedo.d.ts +158 -0
- package/dist/node/protocol-wedo.js +342 -0
- package/dist/node/protocol-wedo.js.map +1 -0
- package/dist/node/protocol.d.ts +340 -0
- package/dist/node/protocol.js +730 -0
- package/dist/node/protocol.js.map +1 -0
- package/dist/node/types.d.ts +408 -0
- package/dist/node/types.js +291 -0
- package/dist/node/types.js.map +1 -0
- package/dist/node/utils.d.ts +1 -2
- package/dist/node/utils.js +14 -26
- package/dist/node/utils.js.map +1 -1
- package/dist/node/webbleabstraction.d.ts +1 -3
- package/dist/node/webbleabstraction.js +3 -7
- package/dist/node/webbleabstraction.js.map +1 -1
- package/dist/poweredup-browser.d.ts +46 -0
- package/dist/poweredup-browser.d.ts.map +1 -0
- package/dist/poweredup-browser.js +210 -0
- package/dist/poweredup-browser.js.map +1 -0
- package/dist/poweredup-node.d.ts +49 -0
- package/dist/poweredup-node.d.ts.map +1 -0
- package/dist/poweredup-node.js +166 -0
- package/dist/poweredup-node.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +90 -0
- package/dist/utils.js.map +1 -0
- package/dist/webbleabstraction.d.ts +27 -0
- package/dist/webbleabstraction.d.ts.map +1 -0
- package/dist/webbleabstraction.js +104 -0
- package/dist/webbleabstraction.js.map +1 -0
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +99 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1633 -0
- package/docs/classes/AbsoluteMotor.html +242 -0
- package/docs/classes/BaseHub.html +220 -0
- package/docs/classes/BasicMotor.html +201 -0
- package/docs/classes/Color.html +3 -0
- package/docs/classes/ColorDistanceSensor.html +214 -0
- package/docs/classes/CurrentSensor.html +185 -0
- package/docs/classes/Device.html +185 -0
- package/docs/classes/DuploTrainBase.html +233 -0
- package/docs/classes/DuploTrainBaseColorSensor.html +185 -0
- package/docs/classes/DuploTrainBaseMotor.html +201 -0
- package/docs/classes/DuploTrainBaseSpeaker.html +191 -0
- package/docs/classes/DuploTrainBaseSpeedometer.html +185 -0
- package/docs/classes/Hub.html +233 -0
- package/docs/classes/HubLED.html +191 -0
- package/docs/classes/Light.html +195 -0
- package/docs/classes/Mario.html +233 -0
- package/docs/classes/MediumLinearMotor.html +229 -0
- package/docs/classes/MotionSensor.html +185 -0
- package/docs/classes/MoveHub.html +233 -0
- package/docs/classes/MoveHubMediumLinearMotor.html +229 -0
- package/docs/classes/MoveHubTiltSensor.html +185 -0
- package/docs/classes/PiezoBuzzer.html +189 -0
- package/docs/classes/PoweredUP.html +180 -0
- package/docs/classes/RemoteControl.html +233 -0
- package/docs/classes/RemoteControlButton.html +185 -0
- package/docs/classes/SimpleMediumLinearMotor.html +201 -0
- package/docs/classes/TachoMotor.html +229 -0
- package/docs/classes/Technic3x3ColorLightMatrix.html +189 -0
- package/docs/classes/TechnicColorSensor.html +191 -0
- package/docs/classes/TechnicDistanceSensor.html +192 -0
- package/docs/classes/TechnicForceSensor.html +185 -0
- package/docs/classes/TechnicLargeAngularMotor.html +242 -0
- package/docs/classes/TechnicLargeLinearMotor.html +242 -0
- package/docs/classes/TechnicMediumAngularMotor.html +242 -0
- package/docs/classes/TechnicMediumHub.html +233 -0
- package/docs/classes/TechnicMediumHubAccelerometerSensor.html +185 -0
- package/docs/classes/TechnicMediumHubGyroSensor.html +185 -0
- package/docs/classes/TechnicMediumHubTiltSensor.html +197 -0
- package/docs/classes/TechnicSmallAngularMotor.html +242 -0
- package/docs/classes/TechnicXLargeLinearMotor.html +242 -0
- package/docs/classes/TiltSensor.html +185 -0
- package/docs/classes/TrainMotor.html +201 -0
- package/docs/classes/VoltageSensor.html +185 -0
- package/docs/classes/WeDo2SmartHub.html +229 -0
- package/docs/enums/ActionType.html +22 -0
- package/docs/enums/AlertOperation.html +10 -0
- package/docs/enums/AlertPayload.html +6 -0
- package/docs/enums/AlertType.html +10 -0
- package/docs/enums/BLECharacteristic.html +15 -0
- package/docs/enums/BLEManufacturerData.html +8 -0
- package/docs/enums/BLEService.html +7 -0
- package/docs/enums/BrakingStyle.html +7 -0
- package/docs/enums/ButtonState.html +11 -0
- package/docs/enums/Consts.Color.html +25 -0
- package/docs/enums/DeviceType.html +79 -0
- package/docs/enums/DuploTrainBaseSound.html +11 -0
- package/docs/enums/ErrorCode.html +18 -0
- package/docs/enums/Event.html +8 -0
- package/docs/enums/HWNetWorkCommandType.html +28 -0
- package/docs/enums/HWNetworkFamily.html +20 -0
- package/docs/enums/HWNetworkSubFamily.html +16 -0
- package/docs/enums/HubPropertyOperation.html +14 -0
- package/docs/enums/HubPropertyPayload.html +32 -0
- package/docs/enums/HubPropertyReference.html +32 -0
- package/docs/enums/HubType.html +19 -0
- package/docs/enums/IOTypeID.html +30 -0
- package/docs/enums/MarioColor.html +17 -0
- package/docs/enums/MarioPantsType.html +13 -0
- package/docs/enums/MessageType.html +48 -0
- package/docs/enums/ModeInformationType.html +22 -0
- package/docs/enums/PortInputFormatSetupSubCommand.html +14 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +18 -120
- package/docs/modules/Consts.html +1 -0
- package/docs/modules.html +1 -0
- package/docs/variables/ColorNames.html +1 -0
- package/docs/variables/DeviceTypeNames.html +1 -0
- package/docs/variables/HubTypeNames.html +1 -0
- package/docs/variables/isWebBluetooth.html +1 -0
- package/package.json +19 -25
- package/src/color.ts +1 -1
- package/src/consts.ts +16 -16
- package/src/devices/absolutemotor.ts +4 -7
- package/src/devices/basicmotor.ts +4 -8
- package/src/devices/colordistancesensor.ts +8 -14
- package/src/devices/currentsensor.ts +3 -3
- package/src/devices/device.ts +2 -2
- package/src/devices/duplotrainbasecolorsensor.ts +4 -4
- package/src/devices/duplotrainbasemotor.ts +3 -3
- package/src/devices/duplotrainbasespeaker.ts +3 -5
- package/src/devices/duplotrainbasespeedometer.ts +3 -3
- package/src/devices/hubled.ts +3 -5
- package/src/devices/light.ts +4 -6
- package/src/devices/marioaccelerometer.ts +3 -3
- package/src/devices/mariobarcodesensor.ts +3 -3
- package/src/devices/mariopantssensor.ts +3 -3
- package/src/devices/mediumlinearmotor.ts +3 -3
- package/src/devices/motionsensor.ts +3 -3
- package/src/devices/movehubmediumlinearmotor.ts +3 -3
- package/src/devices/movehubtiltsensor.ts +3 -3
- package/src/devices/piezobuzzer.ts +3 -4
- package/src/devices/remotecontrolbutton.ts +3 -3
- package/src/devices/simplemediumlinearmotor.ts +3 -3
- package/src/devices/tachomotor.ts +5 -11
- package/src/devices/technic3x3colorlightmatrix.ts +4 -5
- package/src/devices/techniccolorsensor.ts +4 -5
- package/src/devices/technicdistancesensor.ts +3 -4
- package/src/devices/technicforcesensor.ts +3 -3
- package/src/devices/techniclargeangularmotor.ts +3 -3
- package/src/devices/techniclargelinearmotor.ts +3 -3
- package/src/devices/technicmediumangularmotor.ts +3 -3
- package/src/devices/technicmediumhubaccelerometersensor.ts +3 -3
- package/src/devices/technicmediumhubgyrosensor.ts +3 -3
- package/src/devices/technicmediumhubtiltsensor.ts +6 -9
- package/src/devices/technicsmallangularmotor.ts +3 -3
- package/src/devices/technicxlargelinearmotor.ts +3 -3
- package/src/devices/tiltsensor.ts +3 -3
- package/src/devices/trainmotor.ts +3 -3
- package/src/devices/voltagesensor.ts +3 -3
- package/src/hubs/basehub.ts +42 -51
- package/src/hubs/duplotrainbase.ts +5 -5
- package/src/hubs/hub.ts +5 -5
- package/src/hubs/lpf2hub.ts +4 -7
- package/src/hubs/mario.ts +5 -5
- package/src/hubs/movehub.ts +5 -5
- package/src/hubs/remotecontrol.ts +5 -5
- package/src/hubs/technicmediumhub.ts +5 -5
- package/src/hubs/technicsmallhub.ts +5 -5
- package/src/hubs/wedo2smarthub.ts +7 -9
- package/src/index-browser.ts +46 -46
- package/src/index-node.ts +47 -46
- package/src/interfaces.ts +2 -2
- package/src/nobleabstraction.ts +10 -10
- package/src/poweredup-browser.ts +15 -19
- package/src/poweredup-node.ts +15 -22
- package/src/utils.ts +1 -1
- package/src/webbleabstraction.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -0
- package/typedoc.json +14 -0
- package/.jsdoc.json +0 -40
- package/abandonware-noble.d.ts +0 -129
- package/dist/browser/poweredup.js +0 -3
- package/dist/browser/poweredup.js.LICENSE.txt +0 -8
- package/dist/browser/poweredup.js.map +0 -1
- package/docs/AbsoluteMotor.html +0 -2008
- package/docs/BaseHub.html +0 -1391
- package/docs/BasicMotor.html +0 -1459
- package/docs/ColorDistanceSensor.html +0 -3025
- package/docs/CurrentSensor.html +0 -1022
- package/docs/Device.html +0 -841
- package/docs/DuploTrainBase.html +0 -2092
- package/docs/DuploTrainBaseColorSensor.html +0 -1509
- package/docs/DuploTrainBaseMotor.html +0 -1479
- package/docs/DuploTrainBaseSpeaker.html +0 -1193
- package/docs/DuploTraniBaseSpeedometer.html +0 -871
- package/docs/Hub.html +0 -7451
- package/docs/HubLED.html +0 -1239
- package/docs/LPF2Hub.html +0 -2066
- package/docs/Light.html +0 -1239
- package/docs/Mario.html +0 -2092
- package/docs/MarioAccelerometer.html +0 -1215
- package/docs/MarioBarcodeSensor.html +0 -1215
- package/docs/MarioPantsSensor.html +0 -1022
- package/docs/MediumLinearMotor.html +0 -1357
- package/docs/MotionSensor.html +0 -1022
- package/docs/MoveHub.html +0 -2092
- package/docs/MoveHubMediumLinearMotor.html +0 -1357
- package/docs/MoveHubTiltSensor.html +0 -1045
- package/docs/PiezoBuzzer.html +0 -1057
- package/docs/PoweredUP.html +0 -4371
- package/docs/RemoteControl.html +0 -2092
- package/docs/RemoteControlButton.html +0 -1022
- package/docs/SimpleMediumLinearMotor.html +0 -871
- package/docs/TachoMotor.html +0 -2620
- package/docs/Technic3x3ColorLightMatrix.html +0 -1037
- package/docs/TechnicColorSensor.html +0 -1525
- package/docs/TechnicDistanceSensor.html +0 -1401
- package/docs/TechnicForceSensor.html +0 -1316
- package/docs/TechnicLargeAngularMotor.html +0 -2028
- package/docs/TechnicLargeLinearMotor.html +0 -2028
- package/docs/TechnicMediumAngularMotor.html +0 -2028
- package/docs/TechnicMediumHub.html +0 -2092
- package/docs/TechnicMediumHubAccelerometerSensor.html +0 -1068
- package/docs/TechnicMediumHubGyroSensor.html +0 -1068
- package/docs/TechnicMediumHubTiltSensor.html +0 -1696
- package/docs/TechnicSmallAngularMotor.html +0 -2028
- package/docs/TechnicXLargeLinearMotor.html +0 -2028
- package/docs/TiltSensor.html +0 -1045
- package/docs/TrainMotor.html +0 -1479
- package/docs/VoltageSensor.html +0 -1022
- package/docs/WeDo2SmartHub.html +0 -1887
- package/docs/devices_absolutemotor.js.html +0 -195
- package/docs/devices_basicmotor.js.html +0 -138
- package/docs/devices_colordistancesensor.js.html +0 -361
- package/docs/devices_currentsensor.js.html +0 -132
- package/docs/devices_device.js.html +0 -239
- package/docs/devices_duplotrainbasecolorsensor.js.html +0 -154
- package/docs/devices_duplotrainbasemotor.js.html +0 -89
- package/docs/devices_duplotrainbasespeaker.js.html +0 -117
- package/docs/devices_duplotrainbasespeedometer.js.html +0 -111
- package/docs/devices_hubled.js.html +0 -137
- package/docs/devices_light.js.html +0 -123
- package/docs/devices_marioaccelerometer.js.html +0 -127
- package/docs/devices_mariobarcodesensor.js.html +0 -135
- package/docs/devices_mariopantssensor.js.html +0 -111
- package/docs/devices_mediumlinearmotor.js.html +0 -89
- package/docs/devices_motionsensor.js.html +0 -115
- package/docs/devices_movehubmediumlinearmotor.js.html +0 -89
- package/docs/devices_movehubtiltsensor.js.html +0 -113
- package/docs/devices_piezobuzzer.js.html +0 -105
- package/docs/devices_remotecontrolbutton.js.html +0 -117
- package/docs/devices_simplemediumlinearmotor.js.html +0 -89
- package/docs/devices_tachomotor.js.html +0 -244
- package/docs/devices_technic3x3colorlightmatrix.js.html +0 -131
- package/docs/devices_techniccolorsensor.js.html +0 -149
- package/docs/devices_technicdistancesensor.js.html +0 -135
- package/docs/devices_technicforcesensor.js.html +0 -135
- package/docs/devices_techniclargeangularmotor.js.html +0 -89
- package/docs/devices_techniclargelinearmotor.js.html +0 -89
- package/docs/devices_technicmediumangularmotor.js.html +0 -89
- package/docs/devices_technicmediumhubaccelerometersensor.js.html +0 -115
- package/docs/devices_technicmediumhubgyrosensor.js.html +0 -115
- package/docs/devices_technicmediumhubtiltsensor.js.html +0 -183
- package/docs/devices_technicsmallangularmotor.js.html +0 -89
- package/docs/devices_technicxlargelinearmotor.js.html +0 -89
- package/docs/devices_tiltsensor.js.html +0 -113
- package/docs/devices_trainmotor.js.html +0 -89
- package/docs/devices_voltagesensor.js.html +0 -136
- package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
- package/docs/global.html +0 -3996
- package/docs/hubs_basehub.js.html +0 -469
- package/docs/hubs_duplotrainbase.js.html +0 -112
- package/docs/hubs_hub.js.html +0 -121
- package/docs/hubs_mario.js.html +0 -108
- package/docs/hubs_movehub.js.html +0 -123
- package/docs/hubs_remotecontrol.js.html +0 -114
- package/docs/hubs_technicmediumhub.js.html +0 -119
- package/docs/hubs_technicsmallhub.js.html +0 -118
- package/docs/hubs_wedo2smarthub.js.html +0 -265
- package/docs/icons/home.svg +0 -4
- package/docs/icons/search.svg +0 -4
- package/docs/poweredup-browser.js.html +0 -292
- package/docs/poweredup-node.js.html +0 -250
- package/docs/scripts/linenumber.js +0 -25
- package/docs/scripts/pagelocation.js +0 -89
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/docs/scripts/prettify/lang-css.js +0 -2
- package/docs/scripts/prettify/prettify.js +0 -28
- package/docs/styles/collapse.css +0 -27
- package/docs/styles/jsdoc-default.css +0 -358
- package/docs/styles/prettify-jsdoc.css +0 -111
- package/docs/styles/prettify-tomorrow.css +0 -132
- package/noble-mac.d.ts +0 -3
package/dist/node/hub.js
ADDED
|
@@ -0,0 +1,778 @@
|
|
|
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
|