Added functions to wait for port attachments
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
364089b703
commit
de4feb0b89
@ -21,7 +21,6 @@ export class ColorDistanceSensor extends Device {
|
|||||||
/**
|
/**
|
||||||
* Emits when a color sensor is activated.
|
* Emits when a color sensor is activated.
|
||||||
* @event ColorDistanceSensor#color
|
* @event ColorDistanceSensor#color
|
||||||
* @param {string} port
|
|
||||||
* @param {Color} color
|
* @param {Color} color
|
||||||
*/
|
*/
|
||||||
this.emit("color", color);
|
this.emit("color", color);
|
||||||
@ -38,7 +37,6 @@ export class ColorDistanceSensor extends Device {
|
|||||||
/**
|
/**
|
||||||
* Emits when a distance sensor is activated.
|
* Emits when a distance sensor is activated.
|
||||||
* @event ColorDistanceSensor#distance
|
* @event ColorDistanceSensor#distance
|
||||||
* @param {string} port
|
|
||||||
* @param {number} distance Distance, in millimeters.
|
* @param {number} distance Distance, in millimeters.
|
||||||
*/
|
*/
|
||||||
this.emit("distance", distance);
|
this.emit("distance", distance);
|
||||||
@ -62,7 +60,6 @@ export class ColorDistanceSensor extends Device {
|
|||||||
/**
|
/**
|
||||||
* A combined color and distance event, emits when the sensor is activated.
|
* A combined color and distance event, emits when the sensor is activated.
|
||||||
* @event ColorDistanceSensor#colorAndDistance
|
* @event ColorDistanceSensor#colorAndDistance
|
||||||
* @param {string} port
|
|
||||||
* @param {Color} color
|
* @param {Color} color
|
||||||
* @param {number} distance Distance, in millimeters.
|
* @param {number} distance Distance, in millimeters.
|
||||||
*/
|
*/
|
||||||
|
@ -61,7 +61,7 @@ export class Device extends EventEmitter {
|
|||||||
return this._portId;
|
return this._portId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public get port () {
|
public get portName () {
|
||||||
return this.hub.getPortNameForPortId(this.portId);
|
return this.hub.getPortNameForPortId(this.portId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ export class BoostMoveHub extends LPF2Hub {
|
|||||||
|
|
||||||
export namespace BoostMoveHub {
|
export namespace BoostMoveHub {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"A": 0,
|
"A": 0,
|
||||||
"B": 1,
|
"B": 1,
|
||||||
"C": 2,
|
"C": 2,
|
||||||
|
@ -116,7 +116,7 @@ export class ControlPlusHub extends LPF2Hub {
|
|||||||
|
|
||||||
export namespace ControlPlusHub {
|
export namespace ControlPlusHub {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"A": 0,
|
"A": 0,
|
||||||
"B": 1,
|
"B": 1,
|
||||||
"C": 2,
|
"C": 2,
|
||||||
|
@ -71,7 +71,7 @@ export class DuploTrainBase extends LPF2Hub {
|
|||||||
|
|
||||||
export namespace DuploTrainBase {
|
export namespace DuploTrainBase {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"MOTOR": 0,
|
"MOTOR": 0,
|
||||||
"COLOR": 18,
|
"COLOR": 18,
|
||||||
"SPEEDOMETER": 19
|
"SPEEDOMETER": 19
|
||||||
|
@ -27,7 +27,7 @@ const debug = Debug("hub");
|
|||||||
export class Hub extends EventEmitter {
|
export class Hub extends EventEmitter {
|
||||||
|
|
||||||
protected _attachedDevices: {[portId: number]: Device} = {};
|
protected _attachedDevices: {[portId: number]: Device} = {};
|
||||||
// protected _virtualPorts: {[port: string]: Port} = {};
|
// protected _virtualPorts: {[portName: string]: Port} = {};
|
||||||
|
|
||||||
protected _name: string = "";
|
protected _name: string = "";
|
||||||
protected _firmwareVersion: string = "0.0.00.0000";
|
protected _firmwareVersion: string = "0.0.00.0000";
|
||||||
@ -41,9 +41,10 @@ export class Hub extends EventEmitter {
|
|||||||
protected _bleDevice: IBLEAbstraction;
|
protected _bleDevice: IBLEAbstraction;
|
||||||
|
|
||||||
private _type: Consts.HubType;
|
private _type: Consts.HubType;
|
||||||
private _portMap: {[port: string]: number} = {};
|
private _portMap: {[portName: string]: number} = {};
|
||||||
|
private _attachCallbacks: ((device: Device) => void)[] = [];
|
||||||
|
|
||||||
constructor (device: IBLEAbstraction, portMap: {[port: string]: number} = {}, type: Consts.HubType = Consts.HubType.UNKNOWN) {
|
constructor (device: IBLEAbstraction, portMap: {[portName: string]: number} = {}, type: Consts.HubType = Consts.HubType.UNKNOWN) {
|
||||||
super();
|
super();
|
||||||
this._type = type;
|
this._type = type;
|
||||||
this._bleDevice = device;
|
this._bleDevice = device;
|
||||||
@ -196,6 +197,21 @@ export class Hub extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public waitForDeviceAtPort (portName: string) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const existingDevice = this.getDeviceAtPort(portName);
|
||||||
|
if (existingDevice) {
|
||||||
|
return resolve(existingDevice);
|
||||||
|
}
|
||||||
|
this._attachCallbacks.push((device) => {
|
||||||
|
if (device.portName === portName) {
|
||||||
|
return resolve(device);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public getDevices () {
|
public getDevices () {
|
||||||
return Object.values(this._attachedDevices);
|
return Object.values(this._attachedDevices);
|
||||||
}
|
}
|
||||||
@ -206,6 +222,21 @@ export class Hub extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public waitForDeviceByType (deviceType: number) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const existingDevices = this.getDevicesByType(deviceType);
|
||||||
|
if (existingDevices.length >= 1) {
|
||||||
|
return resolve(existingDevices[0]);
|
||||||
|
}
|
||||||
|
this._attachCallbacks.push((device) => {
|
||||||
|
if (device.type === deviceType) {
|
||||||
|
return resolve(device);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public getPortNameForPortId (portId: number) {
|
public getPortNameForPortId (portId: number) {
|
||||||
for (const port of Object.keys(this._portMap)) {
|
for (const port of Object.keys(this._portMap)) {
|
||||||
if (this._portMap[port] === portId) {
|
if (this._portMap[port] === portId) {
|
||||||
@ -264,6 +295,9 @@ export class Hub extends EventEmitter {
|
|||||||
* @param {Device} device
|
* @param {Device} device
|
||||||
*/
|
*/
|
||||||
this.emit("attach", device);
|
this.emit("attach", device);
|
||||||
|
this._attachCallbacks.forEach((callback) => {
|
||||||
|
callback(device);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -442,97 +442,6 @@ export class LPF2Hub extends Hub {
|
|||||||
|
|
||||||
// if (port && port.connected) {
|
// if (port && port.connected) {
|
||||||
// switch (port.type) {
|
// switch (port.type) {
|
||||||
// case Consts.DeviceType.WEDO2_DISTANCE: {
|
|
||||||
// let distance = data[4];
|
|
||||||
// if (data[5] === 1) {
|
|
||||||
// distance = data[4] + 255;
|
|
||||||
// }
|
|
||||||
// /**
|
|
||||||
// * Emits when a distance sensor is activated.
|
|
||||||
// * @event LPF2Hub#distance
|
|
||||||
// * @param {string} port
|
|
||||||
// * @param {number} distance Distance, in millimeters.
|
|
||||||
// */
|
|
||||||
// this.emit("distance", port.id, distance * 10);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.COLOR_DISTANCE_SENSOR: {
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Emits when a color sensor is activated.
|
|
||||||
// * @event LPF2Hub#color
|
|
||||||
// * @param {string} port
|
|
||||||
// * @param {Color} color
|
|
||||||
// */
|
|
||||||
// if (data[4] <= 10) {
|
|
||||||
// this.emit("color", port.id, data[4]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let distance = data[5];
|
|
||||||
// const partial = data[7];
|
|
||||||
|
|
||||||
// if (partial > 0) {
|
|
||||||
// distance += 1.0 / partial;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// distance = Math.floor(distance * 25.4) - 20;
|
|
||||||
|
|
||||||
// this.emit("distance", port.id, distance);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * A combined color and distance event, emits when the sensor is activated.
|
|
||||||
// * @event LPF2Hub#colorAndDistance
|
|
||||||
// * @param {string} port
|
|
||||||
// * @param {Color} color
|
|
||||||
// * @param {number} distance Distance, in millimeters.
|
|
||||||
// */
|
|
||||||
// if (data[4] <= 10) {
|
|
||||||
// this.emit("colorAndDistance", port.id, data[4], distance);
|
|
||||||
// }
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.WEDO2_TILT: {
|
|
||||||
// const tiltX = data.readInt8(4);
|
|
||||||
// const tiltY = data.readInt8(5);
|
|
||||||
// this._lastTiltX = tiltX;
|
|
||||||
// this._lastTiltY = tiltY;
|
|
||||||
// /**
|
|
||||||
// * Emits when a tilt sensor is activated.
|
|
||||||
// * @event LPF2Hub#tilt
|
|
||||||
// * @param {string} port If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port "TILT" is used.
|
|
||||||
// * @param {number} x
|
|
||||||
// * @param {number} y
|
|
||||||
// * @param {number} z (Only available when using a Control+ Hub)
|
|
||||||
// */
|
|
||||||
// this.emit("tilt", port.id, this._lastTiltX, this._lastTiltY, this._lastTiltZ);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.BOOST_TACHO_MOTOR: {
|
|
||||||
// const rotation = data.readInt32LE(4);
|
|
||||||
// /**
|
|
||||||
// * Emits when a rotation sensor is activated.
|
|
||||||
// * @event LPF2Hub#rotate
|
|
||||||
// * @param {string} port
|
|
||||||
// * @param {number} rotation
|
|
||||||
// */
|
|
||||||
// this.emit("rotate", port.id, rotation);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.BOOST_MOVE_HUB_MOTOR: {
|
|
||||||
// const rotation = data.readInt32LE(4);
|
|
||||||
// this.emit("rotate", port.id, rotation);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR: {
|
|
||||||
// const rotation = data.readInt32LE(4);
|
|
||||||
// this.emit("rotate", port.id, rotation);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR: {
|
|
||||||
// const rotation = data.readInt32LE(4);
|
|
||||||
// this.emit("rotate", port.id, rotation);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case Consts.DeviceType.CONTROL_PLUS_TILT: {
|
// case Consts.DeviceType.CONTROL_PLUS_TILT: {
|
||||||
// const tiltZ = data.readInt16LE(4);
|
// const tiltZ = data.readInt16LE(4);
|
||||||
// const tiltY = data.readInt16LE(6);
|
// const tiltY = data.readInt16LE(6);
|
||||||
|
@ -61,7 +61,7 @@ export class PUPHub extends LPF2Hub {
|
|||||||
|
|
||||||
export namespace PUPHub {
|
export namespace PUPHub {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"A": 0,
|
"A": 0,
|
||||||
"B": 1
|
"B": 1
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ export class PUPRemote extends LPF2Hub {
|
|||||||
|
|
||||||
export namespace PUPRemote {
|
export namespace PUPRemote {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"LEFT": 0,
|
"LEFT": 0,
|
||||||
"RIGHT": 1
|
"RIGHT": 1
|
||||||
}
|
}
|
||||||
|
@ -352,7 +352,7 @@ export class WeDo2SmartHub extends Hub {
|
|||||||
|
|
||||||
export namespace WeDo2SmartHub {
|
export namespace WeDo2SmartHub {
|
||||||
|
|
||||||
export const PortMap: {[port: string]: number} = {
|
export const PortMap: {[portName: string]: number} = {
|
||||||
"A": 1,
|
"A": 1,
|
||||||
"B": 2
|
"B": 2
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user