@openhps/core
Version:
Open Hybrid Positioning System - Core component
75 lines • 2.5 kB
JavaScript
import { ObjectProcessingNode } from '../ObjectProcessingNode';
/**
* Calibration node for sensors. This node allows intercepts data frames when
* performing user-aided calibration.
* @rdf {@link http://purl.org/poso/CalibrationProcedure}
*/
export class CalibrationNode extends ObjectProcessingNode {
constructor(calibrationOptions) {
super(calibrationOptions);
this.state = CalibrationState.IDLE;
this.once('build', this._onBuild.bind(this));
}
_onBuild() {
this.service = this.model.findService(this.options.service);
if (!this.service) {
throw new Error(`Calibration node requires a calibration service of type '${this.options.service.name}'!`);
} else {
this.service.node = this;
}
}
processObject(dataObject) {
return new Promise((resolve, reject) => {
if (this.state !== CalibrationState.RUNNING) {
resolve(dataObject);
} else if (this.objectCallback) {
// Forward to service
Promise.resolve(this.objectCallback(dataObject)).then(object => {
resolve(object);
}).catch(reject);
} else {
resolve(dataObject);
}
});
}
process(dataFrame) {
return new Promise((resolve, reject) => {
if (this.state === CalibrationState.SUSPENDED) {
// Do not invoke callback but do not forward either
resolve(undefined);
} else if (this.state === CalibrationState.RUNNING) {
if (this.frameCallback) {
Promise.resolve(this.frameCallback(dataFrame)).then(frame => {
var _a;
return super.process((_a = frame) !== null && _a !== void 0 ? _a : dataFrame);
}).then(() => {
resolve(undefined);
}).catch(reject);
} else {
super.process(dataFrame).then(() => {
resolve(undefined);
});
}
} else {
resolve(dataFrame);
}
});
}
start(objectCallback, frameCallback) {
this.objectCallback = objectCallback;
this.frameCallback = frameCallback;
this.state = CalibrationState.RUNNING;
}
suspend() {
this.state = CalibrationState.SUSPENDED;
}
stop() {
this.state = CalibrationState.IDLE;
}
}
var CalibrationState;
(function (CalibrationState) {
CalibrationState[CalibrationState["IDLE"] = 0] = "IDLE";
CalibrationState[CalibrationState["SUSPENDED"] = 1] = "SUSPENDED";
CalibrationState[CalibrationState["RUNNING"] = 2] = "RUNNING";
})(CalibrationState || (CalibrationState = {}));