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.
- package/README.md +0 -1
- package/dist/browser/poweredup.js +6193 -0
- package/dist/browser/poweredup.js.map +7 -0
- package/dist/consts.d.ts +40 -0
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +42 -0
- package/dist/consts.js.map +1 -1
- package/dist/devices/absolutemotor.d.ts +8 -6
- package/dist/devices/absolutemotor.d.ts.map +1 -1
- package/dist/devices/absolutemotor.js +24 -31
- package/dist/devices/absolutemotor.js.map +1 -1
- package/dist/devices/basicmotor.d.ts +11 -10
- package/dist/devices/basicmotor.d.ts.map +1 -1
- package/dist/devices/basicmotor.js +16 -22
- package/dist/devices/basicmotor.js.map +1 -1
- package/dist/devices/colordistancesensor.d.ts +13 -12
- package/dist/devices/colordistancesensor.d.ts.map +1 -1
- package/dist/devices/colordistancesensor.js +25 -31
- package/dist/devices/colordistancesensor.js.map +1 -1
- package/dist/devices/device.d.ts +15 -6
- package/dist/devices/device.d.ts.map +1 -1
- package/dist/devices/device.js +209 -21
- package/dist/devices/device.js.map +1 -1
- package/dist/devices/duplotrainbasespeaker.d.ts +4 -4
- package/dist/devices/duplotrainbasespeaker.d.ts.map +1 -1
- package/dist/devices/duplotrainbasespeaker.js +5 -8
- package/dist/devices/duplotrainbasespeaker.js.map +1 -1
- package/dist/devices/hubled.d.ts +5 -4
- package/dist/devices/hubled.d.ts.map +1 -1
- package/dist/devices/hubled.js +24 -24
- package/dist/devices/hubled.js.map +1 -1
- package/dist/devices/light.d.ts +7 -4
- package/dist/devices/light.d.ts.map +1 -1
- package/dist/devices/light.js +11 -17
- package/dist/devices/light.js.map +1 -1
- package/dist/devices/piezobuzzer.d.ts +3 -2
- package/dist/devices/piezobuzzer.d.ts.map +1 -1
- package/dist/devices/piezobuzzer.js +2 -2
- package/dist/devices/piezobuzzer.js.map +1 -1
- package/dist/devices/tachomotor.d.ts +14 -8
- package/dist/devices/tachomotor.d.ts.map +1 -1
- package/dist/devices/tachomotor.js +50 -56
- package/dist/devices/tachomotor.js.map +1 -1
- package/dist/devices/technic3x3colorlightmatrix.d.ts +3 -2
- package/dist/devices/technic3x3colorlightmatrix.d.ts.map +1 -1
- package/dist/devices/technic3x3colorlightmatrix.js +20 -23
- package/dist/devices/technic3x3colorlightmatrix.js.map +1 -1
- package/dist/devices/techniccolorsensor.d.ts +9 -4
- package/dist/devices/techniccolorsensor.d.ts.map +1 -1
- package/dist/devices/techniccolorsensor.js +99 -8
- package/dist/devices/techniccolorsensor.js.map +1 -1
- package/dist/devices/technicdistancesensor.d.ts +1 -1
- package/dist/devices/technicdistancesensor.js +1 -1
- package/dist/devices/technicmediumhubtiltsensor.d.ts +7 -6
- package/dist/devices/technicmediumhubtiltsensor.d.ts.map +1 -1
- package/dist/devices/technicmediumhubtiltsensor.js +9 -18
- package/dist/devices/technicmediumhubtiltsensor.js.map +1 -1
- package/dist/devices/tiltsensor.d.ts +4 -1
- package/dist/devices/tiltsensor.d.ts.map +1 -1
- package/dist/devices/tiltsensor.js +84 -3
- package/dist/devices/tiltsensor.js.map +1 -1
- package/dist/hubs/basehub.d.ts +1 -0
- package/dist/hubs/basehub.d.ts.map +1 -1
- package/dist/hubs/basehub.js +17 -0
- package/dist/hubs/basehub.js.map +1 -1
- package/dist/hubs/lpf2hub.d.ts +1 -0
- package/dist/hubs/lpf2hub.d.ts.map +1 -1
- package/dist/hubs/lpf2hub.js +11 -0
- package/dist/hubs/lpf2hub.js.map +1 -1
- package/dist/portoutputcommand.d.ts +13 -0
- package/dist/portoutputcommand.d.ts.map +1 -0
- package/dist/portoutputcommand.js +30 -0
- package/dist/portoutputcommand.js.map +1 -0
- package/dist/portoutputsleep.d.ts +6 -0
- package/dist/portoutputsleep.d.ts.map +1 -0
- package/dist/portoutputsleep.js +10 -0
- package/dist/portoutputsleep.js.map +1 -0
- package/dist/utils.d.ts +1 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +13 -19
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/consts.ts +44 -0
- package/src/devices/absolutemotor.ts +24 -31
- package/src/devices/basicmotor.ts +16 -22
- package/src/devices/colordistancesensor.ts +23 -29
- package/src/devices/device.ts +198 -20
- package/src/devices/duplotrainbasespeaker.ts +5 -8
- package/src/devices/hubled.ts +22 -22
- package/src/devices/light.ts +11 -18
- package/src/devices/piezobuzzer.ts +3 -3
- package/src/devices/tachomotor.ts +47 -53
- package/src/devices/technic3x3colorlightmatrix.ts +20 -23
- package/src/devices/techniccolorsensor.ts +102 -10
- package/src/devices/technicdistancesensor.ts +1 -1
- package/src/devices/technicmediumhubtiltsensor.ts +9 -18
- package/src/devices/tiltsensor.ts +85 -5
- package/src/hubs/basehub.ts +18 -0
- package/src/hubs/lpf2hub.ts +12 -5
- package/src/portoutputcommand.ts +37 -0
- package/src/portoutputsleep.ts +11 -0
- package/src/utils.ts +14 -19
- package/tsconfig.tsbuildinfo +1 -1
- package/webpack.config.cjs +35 -0
- package/dist/node/color.d.ts +0 -6
- package/dist/node/color.js +0 -15
- package/dist/node/color.js.map +0 -1
- package/dist/node/commands.d.ts +0 -299
- package/dist/node/commands.js +0 -672
- package/dist/node/commands.js.map +0 -1
- package/dist/node/connection.d.ts +0 -187
- package/dist/node/connection.js +0 -478
- package/dist/node/connection.js.map +0 -1
- package/dist/node/consts.d.ts +0 -644
- package/dist/node/consts.js +0 -675
- package/dist/node/consts.js.map +0 -1
- package/dist/node/devices/absolutemotor.d.ts +0 -43
- package/dist/node/devices/absolutemotor.js +0 -118
- package/dist/node/devices/absolutemotor.js.map +0 -1
- package/dist/node/devices/basicmotor.d.ts +0 -40
- package/dist/node/devices/basicmotor.js +0 -61
- package/dist/node/devices/basicmotor.js.map +0 -1
- package/dist/node/devices/colordistancesensor.d.ts +0 -79
- package/dist/node/devices/colordistancesensor.js +0 -284
- package/dist/node/devices/colordistancesensor.js.map +0 -1
- package/dist/node/devices/currentsensor.d.ts +0 -16
- package/dist/node/devices/currentsensor.js +0 -55
- package/dist/node/devices/currentsensor.js.map +0 -1
- package/dist/node/devices/device.d.ts +0 -71
- package/dist/node/devices/device.js +0 -162
- package/dist/node/devices/device.js.map +0 -1
- package/dist/node/devices/duplotrainbasecolorsensor.d.ts +0 -19
- package/dist/node/devices/duplotrainbasecolorsensor.js +0 -77
- package/dist/node/devices/duplotrainbasecolorsensor.js.map +0 -1
- package/dist/node/devices/duplotrainbasemotor.d.ts +0 -9
- package/dist/node/devices/duplotrainbasemotor.js +0 -12
- package/dist/node/devices/duplotrainbasemotor.js.map +0 -1
- package/dist/node/devices/duplotrainbasespeaker.d.ts +0 -28
- package/dist/node/devices/duplotrainbasespeaker.js +0 -40
- package/dist/node/devices/duplotrainbasespeaker.js.map +0 -1
- package/dist/node/devices/duplotrainbasespeedometer.d.ts +0 -16
- package/dist/node/devices/duplotrainbasespeedometer.js +0 -34
- package/dist/node/devices/duplotrainbasespeedometer.js.map +0 -1
- package/dist/node/devices/hubled.d.ts +0 -29
- package/dist/node/devices/hubled.js +0 -60
- package/dist/node/devices/hubled.js.map +0 -1
- package/dist/node/devices/index.d.ts +0 -14
- package/dist/node/devices/index.js +0 -154
- package/dist/node/devices/index.js.map +0 -1
- package/dist/node/devices/led.d.ts +0 -140
- package/dist/node/devices/led.js +0 -295
- package/dist/node/devices/led.js.map +0 -1
- package/dist/node/devices/light.d.ts +0 -25
- package/dist/node/devices/light.js +0 -46
- package/dist/node/devices/light.js.map +0 -1
- package/dist/node/devices/marioaccelerometer.d.ts +0 -17
- package/dist/node/devices/marioaccelerometer.js +0 -50
- package/dist/node/devices/marioaccelerometer.js.map +0 -1
- package/dist/node/devices/mariobarcodesensor.d.ts +0 -17
- package/dist/node/devices/mariobarcodesensor.js +0 -58
- package/dist/node/devices/mariobarcodesensor.js.map +0 -1
- package/dist/node/devices/mariopantssensor.d.ts +0 -16
- package/dist/node/devices/mariopantssensor.js +0 -34
- package/dist/node/devices/mariopantssensor.js.map +0 -1
- package/dist/node/devices/mediumlinearmotor.d.ts +0 -9
- package/dist/node/devices/mediumlinearmotor.js +0 -12
- package/dist/node/devices/mediumlinearmotor.js.map +0 -1
- package/dist/node/devices/motionsensor.d.ts +0 -16
- package/dist/node/devices/motionsensor.js +0 -38
- package/dist/node/devices/motionsensor.js.map +0 -1
- package/dist/node/devices/motor.d.ts +0 -182
- package/dist/node/devices/motor.js +0 -367
- package/dist/node/devices/motor.js.map +0 -1
- package/dist/node/devices/movehubmediumlinearmotor.d.ts +0 -9
- package/dist/node/devices/movehubmediumlinearmotor.js +0 -12
- package/dist/node/devices/movehubmediumlinearmotor.js.map +0 -1
- package/dist/node/devices/movehubtiltsensor.d.ts +0 -16
- package/dist/node/devices/movehubtiltsensor.js +0 -36
- package/dist/node/devices/movehubtiltsensor.js.map +0 -1
- package/dist/node/devices/piezobuzzer.d.ts +0 -17
- package/dist/node/devices/piezobuzzer.js +0 -28
- package/dist/node/devices/piezobuzzer.js.map +0 -1
- package/dist/node/devices/remotecontrolbutton.d.ts +0 -19
- package/dist/node/devices/remotecontrolbutton.js +0 -40
- package/dist/node/devices/remotecontrolbutton.js.map +0 -1
- package/dist/node/devices/sensor.d.ts +0 -305
- package/dist/node/devices/sensor.js +0 -662
- package/dist/node/devices/sensor.js.map +0 -1
- package/dist/node/devices/simplemediumlinearmotor.d.ts +0 -9
- package/dist/node/devices/simplemediumlinearmotor.js +0 -12
- package/dist/node/devices/simplemediumlinearmotor.js.map +0 -1
- package/dist/node/devices/tachomotor.d.ts +0 -70
- package/dist/node/devices/tachomotor.js +0 -167
- package/dist/node/devices/tachomotor.js.map +0 -1
- package/dist/node/devices/technic3x3colorlightmatrix.d.ts +0 -22
- package/dist/node/devices/technic3x3colorlightmatrix.js +0 -54
- package/dist/node/devices/technic3x3colorlightmatrix.js.map +0 -1
- package/dist/node/devices/techniccolorsensor.d.ts +0 -27
- package/dist/node/devices/techniccolorsensor.js +0 -72
- package/dist/node/devices/techniccolorsensor.js.map +0 -1
- package/dist/node/devices/technicdistancesensor.d.ts +0 -27
- package/dist/node/devices/technicdistancesensor.js +0 -58
- package/dist/node/devices/technicdistancesensor.js.map +0 -1
- package/dist/node/devices/technicforcesensor.d.ts +0 -18
- package/dist/node/devices/technicforcesensor.js +0 -58
- package/dist/node/devices/technicforcesensor.js.map +0 -1
- package/dist/node/devices/techniclargeangularmotor.d.ts +0 -12
- package/dist/node/devices/techniclargeangularmotor.js +0 -12
- package/dist/node/devices/techniclargeangularmotor.js.map +0 -1
- package/dist/node/devices/techniclargelinearmotor.d.ts +0 -9
- package/dist/node/devices/techniclargelinearmotor.js +0 -12
- package/dist/node/devices/techniclargelinearmotor.js.map +0 -1
- package/dist/node/devices/technicmediumangularmotor.d.ts +0 -12
- package/dist/node/devices/technicmediumangularmotor.js +0 -12
- package/dist/node/devices/technicmediumangularmotor.js.map +0 -1
- package/dist/node/devices/technicmediumhubaccelerometersensor.d.ts +0 -16
- package/dist/node/devices/technicmediumhubaccelerometersensor.js +0 -38
- package/dist/node/devices/technicmediumhubaccelerometersensor.js.map +0 -1
- package/dist/node/devices/technicmediumhubgyrosensor.d.ts +0 -16
- package/dist/node/devices/technicmediumhubgyrosensor.js +0 -38
- package/dist/node/devices/technicmediumhubgyrosensor.js.map +0 -1
- package/dist/node/devices/technicmediumhubtiltsensor.d.ts +0 -40
- package/dist/node/devices/technicmediumhubtiltsensor.js +0 -106
- package/dist/node/devices/technicmediumhubtiltsensor.js.map +0 -1
- package/dist/node/devices/technicsmallangularmotor.d.ts +0 -12
- package/dist/node/devices/technicsmallangularmotor.js +0 -12
- package/dist/node/devices/technicsmallangularmotor.js.map +0 -1
- package/dist/node/devices/technicxlargelinearmotor.d.ts +0 -9
- package/dist/node/devices/technicxlargelinearmotor.js +0 -12
- package/dist/node/devices/technicxlargelinearmotor.js.map +0 -1
- package/dist/node/devices/tiltsensor.d.ts +0 -16
- package/dist/node/devices/tiltsensor.js +0 -36
- package/dist/node/devices/tiltsensor.js.map +0 -1
- package/dist/node/devices/trainmotor.d.ts +0 -9
- package/dist/node/devices/trainmotor.js +0 -12
- package/dist/node/devices/trainmotor.js.map +0 -1
- package/dist/node/devices/voltagesensor.d.ts +0 -16
- package/dist/node/devices/voltagesensor.js +0 -59
- package/dist/node/devices/voltagesensor.js.map +0 -1
- package/dist/node/hub.d.ts +0 -291
- package/dist/node/hub.js +0 -778
- package/dist/node/hub.js.map +0 -1
- package/dist/node/hubs/basehub.d.ts +0 -162
- package/dist/node/hubs/basehub.js +0 -392
- package/dist/node/hubs/basehub.js.map +0 -1
- package/dist/node/hubs/duplotrainbase.d.ts +0 -17
- package/dist/node/hubs/duplotrainbase.js +0 -35
- package/dist/node/hubs/duplotrainbase.js.map +0 -1
- package/dist/node/hubs/hub.d.ts +0 -19
- package/dist/node/hubs/hub.js +0 -44
- package/dist/node/hubs/hub.js.map +0 -1
- package/dist/node/hubs/lpf2hub.d.ts +0 -48
- package/dist/node/hubs/lpf2hub.js +0 -314
- package/dist/node/hubs/lpf2hub.js.map +0 -1
- package/dist/node/hubs/mario.d.ts +0 -17
- package/dist/node/hubs/mario.js +0 -31
- package/dist/node/hubs/mario.js.map +0 -1
- package/dist/node/hubs/movehub.d.ts +0 -18
- package/dist/node/hubs/movehub.js +0 -46
- package/dist/node/hubs/movehub.js.map +0 -1
- package/dist/node/hubs/remotecontrol.d.ts +0 -17
- package/dist/node/hubs/remotecontrol.js +0 -37
- package/dist/node/hubs/remotecontrol.js.map +0 -1
- package/dist/node/hubs/technicmediumhub.d.ts +0 -17
- package/dist/node/hubs/technicmediumhub.js +0 -42
- package/dist/node/hubs/technicmediumhub.js.map +0 -1
- package/dist/node/hubs/technicsmallhub.d.ts +0 -18
- package/dist/node/hubs/technicsmallhub.js +0 -41
- package/dist/node/hubs/technicsmallhub.js.map +0 -1
- package/dist/node/hubs/wedo2smarthub.d.ts +0 -40
- package/dist/node/hubs/wedo2smarthub.js +0 -188
- package/dist/node/hubs/wedo2smarthub.js.map +0 -1
- package/dist/node/index-browser.d.ts +0 -1
- package/dist/node/index-browser.js +0 -96
- package/dist/node/index-browser.js.map +0 -1
- package/dist/node/index-node.d.ts +0 -49
- package/dist/node/index-node.js +0 -50
- package/dist/node/index-node.js.map +0 -1
- package/dist/node/index.d.ts +0 -31
- package/dist/node/index.js +0 -93
- package/dist/node/index.js.map +0 -1
- package/dist/node/index.mjs +0 -0
- package/dist/node/interfaces.d.ts +0 -23
- package/dist/node/interfaces.js +0 -2
- package/dist/node/interfaces.js.map +0 -1
- package/dist/node/nobleabstraction.d.ts +0 -26
- package/dist/node/nobleabstraction.js +0 -123
- package/dist/node/nobleabstraction.js.map +0 -1
- package/dist/node/poweredup-browser.d.ts +0 -50
- package/dist/node/poweredup-browser.js +0 -216
- package/dist/node/poweredup-browser.js.map +0 -1
- package/dist/node/poweredup-node.d.ts +0 -54
- package/dist/node/poweredup-node.js +0 -173
- package/dist/node/poweredup-node.js.map +0 -1
- package/dist/node/poweredup.d.ts +0 -83
- package/dist/node/poweredup.js +0 -542
- package/dist/node/poweredup.js.map +0 -1
- package/dist/node/protocol-wedo.d.ts +0 -158
- package/dist/node/protocol-wedo.js +0 -342
- package/dist/node/protocol-wedo.js.map +0 -1
- package/dist/node/protocol.d.ts +0 -340
- package/dist/node/protocol.js +0 -730
- package/dist/node/protocol.js.map +0 -1
- package/dist/node/types.d.ts +0 -408
- package/dist/node/types.js +0 -291
- package/dist/node/types.js.map +0 -1
- package/dist/node/utils.d.ts +0 -12
- package/dist/node/utils.js +0 -90
- package/dist/node/utils.js.map +0 -1
- package/dist/node/webbleabstraction.d.ts +0 -26
- package/dist/node/webbleabstraction.js +0 -104
- package/dist/node/webbleabstraction.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/node/protocol.js
DELETED
|
@@ -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
|