boost-movehub
Version:
Connects with your Lego Boost Movehub vie Bluetooth Low Energy (BLE).
90 lines (85 loc) • 2.84 kB
JavaScript
const Peripheral = require("./Peripheral");
const { toHexString } = require("../helpers");
/**
* This handles the communication with the internal tilt sensor of Movehub.
* There seem to be different modes implemented in the device. We just made
* the one available that simply gets us the `roll` and `pitch` values.
*/
class TiltSensor extends Peripheral {
/**
* @param {Number} ioType Peripheral Device Type ID (Should be `Peripheral.DEV_TILT_SENSOR`)
* @param {Number} portId Port ID this peripheral is connected to
* @param {object} [options.ioMembers] If this has severeal members, it is a virtual device
* @param {object} [options.logger]
*/
constructor(ioType, portId, options = undefined) {
super(ioType, portId, options);
this.displayName = "TiltSensor";
this.emitAs = "tilt";
this.defaultMode = TiltSensor.MODE_2AXIS_ANGLE;
}
/**
* Receives nd processes message with value from sensor.
*
* @param {PortValueSingleMessage} msg
*/
receiveValue(msg) {
switch (this.mode) {
case TiltSensor.MODE_2AXIS_ANGLE: {
const roll = msg.payload[0];
const pitch = msg.payload[1];
this.setValue({
roll,
pitch
});
break;
}
case TiltSensor.MODE_2AXIS_SIMPLE: {
this._log("warn", "TiltSensor.MODE_2AXIS_SIMPLE is TODO");
break;
}
case TiltSensor.MODE_3AXIS_SIMPLE: {
this._log("warn", "TiltSensor.MODE_3AXIS_SIMPLE is TODO");
break;
}
case TiltSensor.MODE_IMPACT_COUNT: {
this._log("warn", "TiltSensor.MODE_IMPACT_COUNT is TODO");
break;
}
case TiltSensor.MODE_3AXIS_ACCEL: {
this._log("warn", "TiltSensor.MODE_3AXIS_ACCEL is TODO");
break;
}
case TiltSensor.MODE_ORIENT_CF: {
this._log("warn", "TiltSensor.MODE_ORIENT_CF is TODO");
break;
}
case TiltSensor.MODE_IMPACT_CF: {
this._log("warn", "TiltSensor.MODE_IMPACT_CF is TODO");
break;
}
case TiltSensor.MODE_CALIBRATION: {
this._log("warn", "TiltSensor.MODE_CALIBRATION is TODO");
break;
}
default:
this._log(
"warn",
`Received message while being in an unexpected mode=${toHexString(
this.mode
)}`
);
// TODO: add real logger and log a warning here of unexpected mode
}
}
}
// Greatly inspired by https://github.com/undera/pylgbst/blob/master/pylgbst/peripherals.py
TiltSensor.MODE_2AXIS_ANGLE = 0x00;
TiltSensor.MODE_2AXIS_SIMPLE = 0x01;
TiltSensor.MODE_3AXIS_SIMPLE = 0x02;
TiltSensor.MODE_IMPACT_COUNT = 0x03;
TiltSensor.MODE_3AXIS_ACCEL = 0x04;
TiltSensor.MODE_ORIENT_CF = 0x05;
TiltSensor.MODE_IMPACT_CF = 0x06;
TiltSensor.MODE_CALIBRATION = 0x07;
module.exports = TiltSensor;