UNPKG

@openhps/sphero

Version:

Open Hybrid Positioning System - Sphero component

1,142 lines (1,051 loc) 101 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("@openhps/core")); else if(typeof define === 'function' && define.amd) define("OpenHPS", ["core"], factory); else if(typeof exports === 'object') exports["OpenHPS"] = factory(require("@openhps/core")); else root["OpenHPS"] = root["OpenHPS"] || {}, root["OpenHPS"]["sphero"] = factory(root["OpenHPS"]["core"]); })((typeof self !== 'undefined' ? self : this), (__WEBPACK_EXTERNAL_MODULE__openhps_core__) => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./dist/cjs/data/SpheroDataFrame.js": /*!******************************************!*\ !*** ./dist/cjs/data/SpheroDataFrame.js ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpheroDataFrame = void 0; const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); const core_1 = __webpack_require__(/*! @openhps/core */ "@openhps/core"); const object_1 = __webpack_require__(/*! ./object */ "./dist/cjs/data/object/index.js"); let SpheroDataFrame = class SpheroDataFrame extends core_1.DataFrame { constructor(spheroObject) { super(spheroObject); } }; tslib_1.__decorate([ (0, core_1.SerializableMember)(), tslib_1.__metadata("design:type", Number) ], SpheroDataFrame.prototype, "x", void 0); tslib_1.__decorate([ (0, core_1.SerializableMember)(), tslib_1.__metadata("design:type", Number) ], SpheroDataFrame.prototype, "y", void 0); SpheroDataFrame = tslib_1.__decorate([ (0, core_1.SerializableObject)(), tslib_1.__metadata("design:paramtypes", [object_1.SpheroDataObject]) ], SpheroDataFrame); exports.SpheroDataFrame = SpheroDataFrame; //# sourceMappingURL=SpheroDataFrame.js.map /***/ }), /***/ "./dist/cjs/data/index.js": /*!********************************!*\ !*** ./dist/cjs/data/index.js ***! \********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); tslib_1.__exportStar(__webpack_require__(/*! ./object */ "./dist/cjs/data/object/index.js"), exports); tslib_1.__exportStar(__webpack_require__(/*! ./SpheroDataFrame */ "./dist/cjs/data/SpheroDataFrame.js"), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ "./dist/cjs/data/object/SpheroDataObject.js": /*!**************************************************!*\ !*** ./dist/cjs/data/object/SpheroDataObject.js ***! \**************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var SpheroDataObject_1; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpheroDataObject = void 0; const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); const core_1 = __webpack_require__(/*! @openhps/core */ "@openhps/core"); const dist_1 = __webpack_require__(/*! ../../../lib/server/lib/dist */ "./lib/web/dist/index.js"); let SpheroDataObject = SpheroDataObject_1 = class SpheroDataObject extends core_1.DataObject { constructor(toy, uid, displayName) { super(uid, displayName); this.toy = toy; } static findSpheroMini() { return new Promise((resolve, reject) => { dist_1.Scanner.findSpheroMini() .then((toy) => { const object = new SpheroDataObject_1(toy); object.setPosition(new core_1.Absolute3DPosition(0, 0, 0)); resolve(object); }) .catch((ex) => { reject(ex); }); }); } }; SpheroDataObject = SpheroDataObject_1 = tslib_1.__decorate([ (0, core_1.SerializableObject)(), tslib_1.__metadata("design:paramtypes", [Object, String, String]) ], SpheroDataObject); exports.SpheroDataObject = SpheroDataObject; //# sourceMappingURL=SpheroDataObject.js.map /***/ }), /***/ "./dist/cjs/data/object/index.js": /*!***************************************!*\ !*** ./dist/cjs/data/object/index.js ***! \***************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); tslib_1.__exportStar(__webpack_require__(/*! ./SpheroDataObject */ "./dist/cjs/data/object/SpheroDataObject.js"), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ "./dist/cjs/index.js": /*!***************************!*\ !*** ./dist/cjs/index.js ***! \***************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); tslib_1.__exportStar(__webpack_require__(/*! ./nodes */ "./dist/cjs/nodes/index.js"), exports); tslib_1.__exportStar(__webpack_require__(/*! ./data */ "./dist/cjs/data/index.js"), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ "./dist/cjs/nodes/SpheroInputSource.js": /*!*********************************************!*\ !*** ./dist/cjs/nodes/SpheroInputSource.js ***! \*********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpheroInputSource = void 0; const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); const core_1 = __webpack_require__(/*! @openhps/core */ "@openhps/core"); const data_1 = __webpack_require__(/*! ../data */ "./dist/cjs/data/index.js"); class SpheroInputSource extends core_1.SourceNode { constructor(source) { super(source); } get toy() { const spheroObject = this.source; return spheroObject.toy; } onPull() { return new Promise((resolve) => { resolve(new data_1.SpheroDataFrame(this.source)); }); } roll(speed, heading, flags = []) { return new Promise((resolve, reject) => { const spheroObject = this.source; const position = spheroObject.getPosition() || new core_1.Absolute2DPosition(0, 0); position.unit = core_1.LengthUnit.CENTIMETER; position.timestamp = core_1.TimeService.now(); position.orientation = core_1.Orientation.fromEuler({ yaw: heading, pitch: 0, roll: 0, unit: core_1.AngleUnit.DEGREE }); position.velocity.linear = new core_1.LinearVelocity( // Sphero Mini top speed is 1m/s // https://support.sphero.com/article/6drb2qggx4-sphero-mini-faq#:~:text=How%20fast%20is%20Sphero%20Mini,of%201%20meter%20per%20second. (1.0 / 255) * speed, 0, 0, core_1.LinearVelocityUnit.METER_PER_SECOND); spheroObject.setPosition(position); const frame = new data_1.SpheroDataFrame(spheroObject); spheroObject.toy .roll(speed, heading, flags) .then(() => { return this.push(frame); }) .then(() => { setTimeout(() => { resolve(); }, 10); }) .catch(reject); }); } rollTime(speed, heading, time, timeUnit, flags = []) { // eslint-disable-next-line return new Promise((resolve, reject) => tslib_1.__awaiter(this, void 0, void 0, function* () { let driving = true; setTimeout(() => (driving = false), timeUnit.convert(time, core_1.TimeUnit.MILLISECOND)); while (driving) { yield this.roll(speed, heading, flags); } this.roll(0, heading, flags) .then(() => { resolve(); }) .catch((ex) => { reject(ex); }); })); } } exports.SpheroInputSource = SpheroInputSource; //# sourceMappingURL=SpheroInputSource.js.map /***/ }), /***/ "./dist/cjs/nodes/SpheroSensorSource.js": /*!**********************************************!*\ !*** ./dist/cjs/nodes/SpheroSensorSource.js ***! \**********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpheroSensor = exports.SpheroSensorSource = void 0; const core_1 = __webpack_require__(/*! @openhps/core */ "@openhps/core"); const data_1 = __webpack_require__(/*! ../data */ "./dist/cjs/data/index.js"); const dist_1 = __webpack_require__(/*! ../../lib/server/lib/dist */ "./lib/web/dist/index.js"); class SpheroSensorSource extends core_1.SourceNode { constructor(options) { super(options); this._calibrated = false; this._calibrated = this.options.skipCalibration; this.once('build', this._initSensors.bind(this)); } get toy() { const spheroObject = this.source; return spheroObject.toy; } _initSensors() { return new Promise((resolve, reject) => { this.referenceSpace = new core_1.ReferenceSpace(this.graph.referenceSpace); const spheroObject = this.source; spheroObject.toy.on(dist_1.Event.onSensor, this._onSensorEvent.bind(this)); if (!this.options.skipSensorConfiguration) { spheroObject.toy .configureSensorStream(this.options.interval) .then(() => { resolve(); }) .catch(reject); } else { resolve(); } }); } _onSensorEvent(event) { if (!this._calibrated) { // Start orientation this.referenceSpace.rotation(core_1.Quaternion.fromEuler({ yaw: -event.angles.yaw, pitch: -event.angles.pitch, roll: -event.angles.roll, unit: core_1.AngleUnit.DEGREE, })); // Start origin should be (0, 0) this.referenceSpace.translation(-event.locator.position.x, -event.locator.position.y); // Apply axis rotation to match OpenHPS this._calibrated = true; } const spheroObject = this.source; const position = spheroObject.getPosition() || new core_1.Absolute2DPosition(0, 0); position.timestamp = core_1.TimeService.now(); position.unit = core_1.LengthUnit.CENTIMETER; if (this.options.sensors.includes(SpheroSensor.VELOCITY)) { position.velocity.linear = new core_1.LinearVelocity(event.locator.velocity.x, event.locator.velocity.y, 0, core_1.LinearVelocityUnit.CENTIMETER_PER_SECOND); } if (this.options.sensors.includes(SpheroSensor.GYROSCOPE)) { position.velocity.angular = new core_1.AngularVelocity(event.gyro.filtered.x, event.gyro.filtered.y, event.gyro.filtered.z, core_1.AngularVelocityUnit.DEGREE_PER_SECOND); } if (this.options.sensors.includes(SpheroSensor.LOCATION)) { position.unit = core_1.LengthUnit.CENTIMETER; position.x = event.locator.position.x; position.y = event.locator.position.y; position.orientation = core_1.Orientation.fromEuler({ yaw: event.angles.yaw, pitch: event.angles.pitch, roll: event.angles.roll, unit: core_1.AngleUnit.DEGREE, }); } spheroObject.setPosition(position, this.referenceSpace); // Clone the information to the sphero data frame const frame = new data_1.SpheroDataFrame(spheroObject); const angularVelocity = new core_1.Gyroscope(this.uid + '_gyro'); angularVelocity.value = position.velocity.angular.clone(); const linearVelocity = new core_1.LinearVelocitySensor(this.uid + '_linearvel'); linearVelocity.value = position.velocity.linear.clone(); const relativeOrientation = new core_1.RelativeOrientationSensor(this.uid + '_relativeorientation'); relativeOrientation.value = position.orientation.clone(); const linearAcceleration = new core_1.LinearAccelerationSensor(this.uid + '_linearaccl'); linearAcceleration.value = new core_1.Acceleration(event.accelerometer.filtered.x, event.accelerometer.filtered.y, event.accelerometer.filtered.z); frame.x = position.x; frame.y = position.y; this.push(frame); } onPull() { return new Promise((resolve) => { resolve(new data_1.SpheroDataFrame(this.source)); }); } } exports.SpheroSensorSource = SpheroSensorSource; var SpheroSensor; (function (SpheroSensor) { SpheroSensor[SpheroSensor["LOCATION"] = 0] = "LOCATION"; SpheroSensor[SpheroSensor["GYROSCOPE"] = 1] = "GYROSCOPE"; SpheroSensor[SpheroSensor["ACCELEROMETER"] = 2] = "ACCELEROMETER"; SpheroSensor[SpheroSensor["VELOCITY"] = 3] = "VELOCITY"; })(SpheroSensor = exports.SpheroSensor || (exports.SpheroSensor = {})); //# sourceMappingURL=SpheroSensorSource.js.map /***/ }), /***/ "./dist/cjs/nodes/index.js": /*!*********************************!*\ !*** ./dist/cjs/nodes/index.js ***! \*********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); tslib_1.__exportStar(__webpack_require__(/*! ./SpheroSensorSource */ "./dist/cjs/nodes/SpheroSensorSource.js"), exports); tslib_1.__exportStar(__webpack_require__(/*! ./SpheroInputSource */ "./dist/cjs/nodes/SpheroInputSource.js"), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ "./lib/web/dist/commands/api.js": /*!**************************************!*\ !*** ./lib/web/dist/commands/api.js ***! \**************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.apiProcessor); return { echo: () => encode({ commandId: types_1.APIProcessCommandIds.echo }) }; }; //# sourceMappingURL=api.js.map /***/ }), /***/ "./lib/web/dist/commands/decoder.js": /*!******************************************!*\ !*** ./lib/web/dist/commands/decoder.js ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.factory = exports.number = void 0; const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); const MINIMUN_PACKET_LENGTH = 6; function number(buffer, offset) { return Buffer.from(buffer).readInt16BE(offset); } exports.number = number; const decodeFlags = (flags) => { const isResponse = !!(flags & types_1.Flags.isResponse); const requestsResponse = !!(flags & types_1.Flags.requestsResponse); const requestsOnlyErrorResponse = !!(flags & types_1.Flags.requestsOnlyErrorResponse); const resetsInactivityTimeout = !!(flags & types_1.Flags.resetsInactivityTimeout); const commandHasTargetId = !!(flags & types_1.Flags.commandHasTargetId); const commandHasSourceId = !!(flags & types_1.Flags.commandHasSourceId); return { isResponse, requestsResponse, requestsOnlyErrorResponse, resetsInactivityTimeout, commandHasTargetId, commandHasSourceId }; }; const classifyPacket = (packet) => { const [_startPacket, flags, ...rest] = packet; const { commandHasTargetId, commandHasSourceId } = decodeFlags(flags); let sourceId; let targetId; if (commandHasTargetId) { targetId = rest.shift(); } if (commandHasSourceId) { sourceId = rest.shift(); } const deviceId = rest.shift(); const commandId = rest.shift(); const sequenceNumber = rest.shift(); const payload = rest.slice(0, rest.length - 2); const [_checksum, _endPacket] = rest.slice(rest.length - 2, rest.length - 1); return { sourceId, targetId, commandId, deviceId, payload, raw: packet, sequenceNumber }; }; function factory(callback) { let msg = []; let checksum = 0; let isEscaping = false; const init = () => { msg = []; checksum = 0; isEscaping = false; }; const error = (errorMessage) => { init(); callback(errorMessage); }; return { add(byte) { switch (byte) { case types_1.APIConstants.startOfPacket: if (msg.length !== 0) { init(); return callback('Invalid first byte'); } return msg.push(byte); case types_1.APIConstants.endOfPacket: if (msg.length === 0 || msg.length < MINIMUN_PACKET_LENGTH) { return error('Invalid last byte ' + msg.length); } if (checksum !== 0xff) { return error('Invalid checksum'); } msg.push(byte); callback(undefined, classifyPacket(new Uint8Array(msg))); return init(); case types_1.APIConstants.escape: if (isEscaping) { return error('Invalid escape char position'); } isEscaping = true; return; case types_1.APIConstants.escapedStartOfPacket: case types_1.APIConstants.escapedEndOfPacket: case types_1.APIConstants.escapedEscape: if (isEscaping) { byte = byte | types_1.APIConstants.escapeMask; isEscaping = false; } } if (isEscaping) { return error('Invalid no escape char end found'); } msg.push(byte); checksum = (checksum & byte) | 0xff; } }; } exports.factory = factory; //# sourceMappingURL=decoder.js.map /***/ }), /***/ "./lib/web/dist/commands/driving.js": /*!******************************************!*\ !*** ./lib/web/dist/commands/driving.js ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const utils_1 = __webpack_require__(/*! ../utils */ "./lib/web/dist/utils.js"); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); const encodeNumberLM = (n) => { const absN = Math.abs(n * 3968); const nFirstHalfByte1 = n === 0 ? 0 : n > 0 ? 0x30 : 0xb0; const nSecondHalfByte1 = (absN >> 8) & 0x0f; return [ nFirstHalfByte1 | nSecondHalfByte1, absN & 0xff, (0 >> 8) & 0xff, 0 & 0xff ]; }; exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.driving); return { drive: (speed, heading, flags) => encode({ commandId: types_1.DrivingCommandIds.driveWithHeading, targetId: 0x12, payload: [ speed, (heading >> 8) & 0xff, heading & 0xff, (0, utils_1.combineFlags)(flags) ] }), driveAsRc: (heading, speed) => encode({ commandId: types_1.DrivingCommandIds.driveAsRc, payload: [...encodeNumberLM(heading), ...encodeNumberLM(speed)] }) }; }; //# sourceMappingURL=driving.js.map /***/ }), /***/ "./lib/web/dist/commands/encoder.js": /*!******************************************!*\ !*** ./lib/web/dist/commands/encoder.js ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.encode = void 0; const utils_1 = __webpack_require__(/*! ../utils */ "./lib/web/dist/utils.js"); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); function encodeBytes(out, byte, appendChecksum = false) { const unsignedInt = new Uint8Array([byte])[0]; switch (unsignedInt) { case types_1.APIConstants.startOfPacket: out.bytes.push(types_1.APIConstants.escape, types_1.APIConstants.escapedStartOfPacket); break; case types_1.APIConstants.endOfPacket: out.bytes.push(types_1.APIConstants.escape, types_1.APIConstants.escapedEndOfPacket); break; case types_1.APIConstants.escape: out.bytes.push(types_1.APIConstants.escape, types_1.APIConstants.escapedEscape); break; default: out.bytes.push(byte); } out.checksum = (out.checksum + byte) & 0xff; } function encode(command) { const { commandFlags = [types_1.Flags.requestsResponse, types_1.Flags.resetsInactivityTimeout], deviceId, commandId, sequenceNumber, payload = [] } = command; const out = { bytes: [], checksum: 0x00 }; out.bytes.push(types_1.APIConstants.startOfPacket); encodeBytes(out, (0, utils_1.combineFlags)([ ...commandFlags, command.targetId ? types_1.Flags.commandHasTargetId : 0 ]), true); if (command.targetId) { encodeBytes(out, command.targetId, true); } encodeBytes(out, deviceId, true); encodeBytes(out, commandId, true); encodeBytes(out, sequenceNumber, true); if (payload) { payload.forEach(byte => { encodeBytes(out, byte, true); }); } out.checksum = ~out.checksum; encodeBytes(out, out.checksum); out.bytes.push(types_1.APIConstants.endOfPacket); return Object.assign(Object.assign({}, command), { raw: new Uint8Array(out.bytes) }); } exports.encode = encode; //# sourceMappingURL=encoder.js.map /***/ }), /***/ "./lib/web/dist/commands/index.js": /*!****************************************!*\ !*** ./lib/web/dist/commands/index.js ***! \****************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.factory = void 0; const api_1 = __webpack_require__(/*! ./api */ "./lib/web/dist/commands/api.js"); const driving_1 = __webpack_require__(/*! ./driving */ "./lib/web/dist/commands/driving.js"); const encoder_1 = __webpack_require__(/*! ./encoder */ "./lib/web/dist/commands/encoder.js"); const power_1 = __webpack_require__(/*! ./power */ "./lib/web/dist/commands/power.js"); const something_api_1 = __webpack_require__(/*! ./something-api */ "./lib/web/dist/commands/something-api.js"); const system_info_1 = __webpack_require__(/*! ./system-info */ "./lib/web/dist/commands/system-info.js"); const sensor_1 = __webpack_require__(/*! ./sensor */ "./lib/web/dist/commands/sensor.js"); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); const user_io_1 = __webpack_require__(/*! ./user-io */ "./lib/web/dist/commands/user-io.js"); const sequencer = () => { let s = 0; return () => { const temp = s; s += 1; if (s >= 255) { s = 0; } return temp; }; }; const factory = (seq) => { const getSequence = seq || sequencer(); const gen = (deviceId) => (part) => (0, encoder_1.encode)(Object.assign(Object.assign({}, part), { commandFlags: [types_1.Flags.requestsResponse, types_1.Flags.resetsInactivityTimeout], deviceId, sequenceNumber: getSequence() })); return { api: (0, api_1.default)(gen), driving: (0, driving_1.default)(gen), power: (0, power_1.default)(gen), somethingApi: (0, something_api_1.default)(gen), systemInfo: (0, system_info_1.default)(gen), userIo: (0, user_io_1.default)(gen), sensor: (0, sensor_1.default)(gen) }; }; exports.factory = factory; //# sourceMappingURL=index.js.map /***/ }), /***/ "./lib/web/dist/commands/power.js": /*!****************************************!*\ !*** ./lib/web/dist/commands/power.js ***! \****************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.powerInfo); return { batteryVoltage: () => encode({ targetId: 0x11, commandId: types_1.PowerCommandIds.batteryVoltage }), sleep: () => encode({ targetId: 0x11, commandId: types_1.PowerCommandIds.sleep }), something2: () => encode({ commandId: types_1.PowerCommandIds.something2 }), something3: () => encode({ commandId: types_1.PowerCommandIds.something3 }), something4: () => encode({ commandId: types_1.PowerCommandIds.something4 }), wake: () => encode({ targetId: 0x11, commandId: types_1.PowerCommandIds.wake }) }; }; //# sourceMappingURL=power.js.map /***/ }), /***/ "./lib/web/dist/commands/sensor.js": /*!*****************************************!*\ !*** ./lib/web/dist/commands/sensor.js ***! \*****************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.sensor); return { enableCollisionAsync: () => encode({ commandId: types_1.SensorCommandIds.enableCollisionAsync }), configureCollision: (xThreshold, yThreshold, xSpeed, ySpeed, deadTime, method = 0x01) => encode({ commandId: types_1.SensorCommandIds.configureCollision, targetId: 0x12, payload: [method, xThreshold, xSpeed, yThreshold, ySpeed, deadTime] }), sensorMask: (sensorRawValue, streamingRate) => { const bytes = [ (streamingRate >> 8) & 0xff, streamingRate & 0xff, 0, (sensorRawValue >> 24) & 0xff, (sensorRawValue >> 16) & 0xff, (sensorRawValue >> 8) & 0xff, sensorRawValue & 0xff ]; return encode({ commandId: types_1.SensorCommandIds.sensorMask, targetId: 0x12, payload: bytes }); }, sensorMaskExtended: (mask) => { const bytes = [ (mask >> 24) & 0xff, (mask >> 16) & 0xff, (mask >> 8) & 0xff, mask & 0xff ]; return encode({ commandId: types_1.SensorCommandIds.sensorMaskExtended, targetId: 0x12, payload: bytes }); } }; }; //# sourceMappingURL=sensor.js.map /***/ }), /***/ "./lib/web/dist/commands/something-api.js": /*!************************************************!*\ !*** ./lib/web/dist/commands/something-api.js ***! \************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.somethingAPI); return { something5: () => encode({ commandId: types_1.SomethingApi.something5 }) }; }; //# sourceMappingURL=something-api.js.map /***/ }), /***/ "./lib/web/dist/commands/system-info.js": /*!**********************************************!*\ !*** ./lib/web/dist/commands/system-info.js ***! \**********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.systemInfo); return { appVersion: () => encode({ commandId: types_1.SystemInfoCommandIds.mainApplicationVersion }), something: () => encode({ commandId: types_1.SystemInfoCommandIds.something }), something6: () => encode({ commandId: types_1.SystemInfoCommandIds.something6 }), something7: () => encode({ commandId: types_1.SystemInfoCommandIds.something7 }) }; }; //# sourceMappingURL=system-info.js.map /***/ }), /***/ "./lib/web/dist/commands/types.js": /*!****************************************!*\ !*** ./lib/web/dist/commands/types.js ***! \****************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DriveFlag = exports.APIConstants = exports.Flags = exports.UserIOCommandIds = exports.SensorCommandIds = exports.AnimatronicsCommandIds = exports.DrivingCommandIds = exports.PowerCommandIds = exports.SystemInfoCommandIds = exports.APIProcessCommandIds = exports.SomethingApi = exports.DeviceId = void 0; var DeviceId; (function (DeviceId) { DeviceId[DeviceId["apiProcessor"] = 16] = "apiProcessor"; DeviceId[DeviceId["systemInfo"] = 17] = "systemInfo"; DeviceId[DeviceId["powerInfo"] = 19] = "powerInfo"; DeviceId[DeviceId["driving"] = 22] = "driving"; DeviceId[DeviceId["animatronics"] = 23] = "animatronics"; DeviceId[DeviceId["sensor"] = 24] = "sensor"; DeviceId[DeviceId["userIO"] = 26] = "userIO"; DeviceId[DeviceId["somethingAPI"] = 31] = "somethingAPI"; })(DeviceId = exports.DeviceId || (exports.DeviceId = {})); var SomethingApi; (function (SomethingApi) { SomethingApi[SomethingApi["something5"] = 39] = "something5"; })(SomethingApi = exports.SomethingApi || (exports.SomethingApi = {})); var APIProcessCommandIds; (function (APIProcessCommandIds) { APIProcessCommandIds[APIProcessCommandIds["echo"] = 0] = "echo"; })(APIProcessCommandIds = exports.APIProcessCommandIds || (exports.APIProcessCommandIds = {})); var SystemInfoCommandIds; (function (SystemInfoCommandIds) { SystemInfoCommandIds[SystemInfoCommandIds["mainApplicationVersion"] = 0] = "mainApplicationVersion"; SystemInfoCommandIds[SystemInfoCommandIds["bootloaderVersion"] = 1] = "bootloaderVersion"; SystemInfoCommandIds[SystemInfoCommandIds["something"] = 6] = "something"; SystemInfoCommandIds[SystemInfoCommandIds["something6"] = 18] = "something6"; SystemInfoCommandIds[SystemInfoCommandIds["something7"] = 40] = "something7"; })(SystemInfoCommandIds = exports.SystemInfoCommandIds || (exports.SystemInfoCommandIds = {})); var PowerCommandIds; (function (PowerCommandIds) { PowerCommandIds[PowerCommandIds["deepSleep"] = 0] = "deepSleep"; PowerCommandIds[PowerCommandIds["sleep"] = 1] = "sleep"; PowerCommandIds[PowerCommandIds["batteryVoltage"] = 3] = "batteryVoltage"; PowerCommandIds[PowerCommandIds["wake"] = 13] = "wake"; PowerCommandIds[PowerCommandIds["something2"] = 16] = "something2"; PowerCommandIds[PowerCommandIds["something3"] = 4] = "something3"; PowerCommandIds[PowerCommandIds["something4"] = 30] = "something4"; })(PowerCommandIds = exports.PowerCommandIds || (exports.PowerCommandIds = {})); var DrivingCommandIds; (function (DrivingCommandIds) { DrivingCommandIds[DrivingCommandIds["rawMotor"] = 1] = "rawMotor"; DrivingCommandIds[DrivingCommandIds["resetYaw"] = 6] = "resetYaw"; DrivingCommandIds[DrivingCommandIds["driveAsSphero"] = 4] = "driveAsSphero"; DrivingCommandIds[DrivingCommandIds["driveAsRc"] = 2] = "driveAsRc"; DrivingCommandIds[DrivingCommandIds["driveWithHeading"] = 7] = "driveWithHeading"; DrivingCommandIds[DrivingCommandIds["stabilization"] = 12] = "stabilization"; })(DrivingCommandIds = exports.DrivingCommandIds || (exports.DrivingCommandIds = {})); var AnimatronicsCommandIds; (function (AnimatronicsCommandIds) { AnimatronicsCommandIds[AnimatronicsCommandIds["animationBundle"] = 5] = "animationBundle"; AnimatronicsCommandIds[AnimatronicsCommandIds["shoulderAction"] = 13] = "shoulderAction"; AnimatronicsCommandIds[AnimatronicsCommandIds["domePosition"] = 15] = "domePosition"; AnimatronicsCommandIds[AnimatronicsCommandIds["shoulderActionComplete"] = 38] = "shoulderActionComplete"; AnimatronicsCommandIds[AnimatronicsCommandIds["enableShoulderActionCompleteAsync"] = 42] = "enableShoulderActionCompleteAsync"; })(AnimatronicsCommandIds = exports.AnimatronicsCommandIds || (exports.AnimatronicsCommandIds = {})); var SensorCommandIds; (function (SensorCommandIds) { SensorCommandIds[SensorCommandIds["sensorMask"] = 0] = "sensorMask"; SensorCommandIds[SensorCommandIds["sensorResponse"] = 2] = "sensorResponse"; SensorCommandIds[SensorCommandIds["configureCollision"] = 17] = "configureCollision"; SensorCommandIds[SensorCommandIds["collisionDetectedAsync"] = 18] = "collisionDetectedAsync"; SensorCommandIds[SensorCommandIds["resetLocator"] = 19] = "resetLocator"; SensorCommandIds[SensorCommandIds["enableCollisionAsync"] = 20] = "enableCollisionAsync"; SensorCommandIds[SensorCommandIds["sensor1"] = 15] = "sensor1"; SensorCommandIds[SensorCommandIds["sensor2"] = 23] = "sensor2"; SensorCommandIds[SensorCommandIds["sensorMaskExtended"] = 12] = "sensorMaskExtended"; })(SensorCommandIds = exports.SensorCommandIds || (exports.SensorCommandIds = {})); var UserIOCommandIds; (function (UserIOCommandIds) { UserIOCommandIds[UserIOCommandIds["allLEDs"] = 14] = "allLEDs"; UserIOCommandIds[UserIOCommandIds["allLEDsV21"] = 28] = "allLEDsV21"; UserIOCommandIds[UserIOCommandIds["playAudioFile"] = 7] = "playAudioFile"; UserIOCommandIds[UserIOCommandIds["audioVolume"] = 8] = "audioVolume"; UserIOCommandIds[UserIOCommandIds["stopAudio"] = 10] = "stopAudio"; UserIOCommandIds[UserIOCommandIds["testSound"] = 24] = "testSound"; UserIOCommandIds[UserIOCommandIds["matrixPixel"] = 45] = "matrixPixel"; UserIOCommandIds[UserIOCommandIds["matrixColor"] = 47] = "matrixColor"; UserIOCommandIds[UserIOCommandIds["clearMatrix"] = 56] = "clearMatrix"; UserIOCommandIds[UserIOCommandIds["matrixRotation"] = 58] = "matrixRotation"; UserIOCommandIds[UserIOCommandIds["matrixScrollText"] = 59] = "matrixScrollText"; UserIOCommandIds[UserIOCommandIds["matrixLine"] = 61] = "matrixLine"; UserIOCommandIds[UserIOCommandIds["matrixFill"] = 62] = "matrixFill"; })(UserIOCommandIds = exports.UserIOCommandIds || (exports.UserIOCommandIds = {})); var Flags; (function (Flags) { Flags[Flags["isResponse"] = 1] = "isResponse"; Flags[Flags["requestsResponse"] = 2] = "requestsResponse"; Flags[Flags["requestsOnlyErrorResponse"] = 4] = "requestsOnlyErrorResponse"; Flags[Flags["resetsInactivityTimeout"] = 8] = "resetsInactivityTimeout"; Flags[Flags["commandHasTargetId"] = 16] = "commandHasTargetId"; Flags[Flags["commandHasSourceId"] = 32] = "commandHasSourceId"; })(Flags = exports.Flags || (exports.Flags = {})); var APIConstants; (function (APIConstants) { APIConstants[APIConstants["escape"] = 171] = "escape"; APIConstants[APIConstants["startOfPacket"] = 141] = "startOfPacket"; APIConstants[APIConstants["endOfPacket"] = 216] = "endOfPacket"; APIConstants[APIConstants["escapeMask"] = 136] = "escapeMask"; APIConstants[APIConstants["escapedEscape"] = 35] = "escapedEscape"; APIConstants[APIConstants["escapedStartOfPacket"] = 5] = "escapedStartOfPacket"; APIConstants[APIConstants["escapedEndOfPacket"] = 80] = "escapedEndOfPacket"; })(APIConstants = exports.APIConstants || (exports.APIConstants = {})); var DriveFlag; (function (DriveFlag) { DriveFlag[DriveFlag["reverse"] = 1] = "reverse"; DriveFlag[DriveFlag["boost"] = 2] = "boost"; DriveFlag[DriveFlag["fastTurnMode"] = 4] = "fastTurnMode"; DriveFlag[DriveFlag["tankDriveLeftMotorReverse"] = 8] = "tankDriveLeftMotorReverse"; DriveFlag[DriveFlag["tankDriveRightMotorReverse"] = 16] = "tankDriveRightMotorReverse"; })(DriveFlag = exports.DriveFlag || (exports.DriveFlag = {})); //# sourceMappingURL=types.js.map /***/ }), /***/ "./lib/web/dist/commands/user-io.js": /*!******************************************!*\ !*** ./lib/web/dist/commands/user-io.js ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); const types_1 = __webpack_require__(/*! ./types */ "./lib/web/dist/commands/types.js"); exports["default"] = (generator) => { const encode = generator(types_1.DeviceId.userIO); const encodeAnimatronics = generator(types_1.DeviceId.animatronics); return { allLEDsRaw: (payload) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload }), setBackLedIntensity: (i) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload: [0x00, 0x01, i] }), setMainLedBlueIntensity: (b) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload: [0x00, 0x08, b] }), setMainLedColor: (r, g, b) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload: [0x00, 0x70, r, g, b] }), setMainLedGreenIntensity: (g) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload: [0x00, 0x04, g] }), setMainLedRedIntensity: (r) => encode({ commandId: types_1.UserIOCommandIds.allLEDs, payload: [0x00, 0x02, r] }), playAudioFile: (idx) => encode({ commandId: types_1.UserIOCommandIds.playAudioFile, payload: [idx, 0x00, 0x00] }), turnDome: (angle) => encodeAnimatronics({ commandId: types_1.AnimatronicsCommandIds.domePosition, payload: [angle[1], angle[0], 0x00, 0x00] }), setStance: (stance) => encodeAnimatronics({ commandId: types_1.AnimatronicsCommandIds.shoulderAction, payload: [stance] }), playAnimation: (animation) => encodeAnimatronics({ commandId: types_1.AnimatronicsCommandIds.animationBundle, payload: [0x00, animation] }) }; }; //# sourceMappingURL=user-io.js.map /***/ }), /***/ "./lib/web/dist/index.js": /*!*******************************!*\ !*** ./lib/web/dist/index.js ***! \*******************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Utils = exports.Scanner = exports.Toys = exports.DriveFlag = exports.Stance = exports.Event = exports.Core = exports.RollableToy = exports.SpheroBolt = exports.SpheroMini = exports.R2Q5 = exports.R2D2 = exports.LightningMcQueen = exports.BB9E = void 0; const toys_1 = __webpack_require__(/*! ./toys */ "./lib/web/dist/toys/index.js"); Object.defineProperty(exports, "Toys", ({ enumerable: true, get: function () { return toys_1.toys; } })); const Scanner = __webpack_require__(/*! ./scanner */ "./lib/web/dist/scanner.js"); exports.Scanner = Scanner; const Utils = __webpack_require__(/*! ./utils */ "./lib/web/dist/utils.js"); exports.Utils = Utils; var bb9e_1 = __webpack_require__(/*! ./toys/bb9e */ "./lib/web/dist/toys/bb9e.js"); Object.defineProperty(exports, "BB9E", ({ enumerable: true, get: function () { return bb9e_1.BB9E; } })); var lightning_mcqueen_1 = __webpack_require__(/*! ./toys/lightning-mcqueen */ "./lib/web/dist/toys/lightning-mcqueen.js"); Object.defineProperty(exports, "LightningMcQueen", ({ enumerable: true, get: function () { return lightning_mcqueen_1.LightningMcQueen; } })); var r2d2_1 = __webpack_require__(/*! ./toys/r2d2 */ "./lib/web/dist/toys/r2d2.js"); Object.defineProperty(exports, "R2D2", ({ enumerable: true, get: function () { return r2d2_1.R2D2; } })); var r2q5_1 = __webpack_require__(/*! ./toys/r2q5 */ "./lib/web/dist/toys/r2q5.js"); Object.defineProperty(exports, "R2Q5", ({ enumerable: true, get: function () { return r2q5_1.R2Q5; } })); var sphero_mini_1 = __webpack_require__(/*! ./toys/sphero-mini */ "./lib/web/dist/toys/sphero-mini.js"); Object.defineProperty(exports, "SpheroMini", ({ enumerable: true, get: function () { return sphero_mini_1.SpheroMini; } })); var sphero_bolt_1 = __webpack_require__(/*! ./toys/sphero-bolt */ "./lib/web/dist/toys/sphero-bolt.js"); Object.defineProperty(exports, "SpheroBolt", ({ enumerable: true, get: function () { return sphero_bolt_1.SpheroBolt; } })); var rollable_toy_1 = __webpack_require__(/*! ./toys/rollable-toy */ "./lib/web/dist/toys/rollable-toy.js"); Object.defineProperty(exports, "RollableToy", ({ enumerable: true, get: function () { return rollable_toy_1.RollableToy; } })); var core_1 = __webpack_require__(/*! ./toys/core */ "./lib/web/dist/toys/core.js"); Object.defineProperty(exports, "Core", ({ enumerable: true, get: function () { return core_1.Core; } })); var core_2 = __webpack_require__(/*! ./toys/core */ "./lib/web/dist/toys/core.js"); Object.defineProperty(exports, "Event", ({ enumerable: true, get: function () { return core_2.Event; } })); var types_1 = __webpack_require__(/*! ./toys/types */ "./lib/web/dist/toys/types.js"); Object.defineProperty(exports, "Stance", ({ enumerable: true, get: function () { return types_1.Stance; } })); var types_2 = __webpack_require__(/*! ./commands/types */ "./lib/web/dist/commands/types.js"); Object.defineProperty(exports, "DriveFlag", ({ enumerable: true, get: function () { return types_2.DriveFlag; } })); //# sourceMappingURL=index.js.map /***/ }), /***/ "./lib/web/dist/scanner.js": /*!*********************************!*\ !*** ./lib/web/dist/scanner.js ***! \*********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.findLightningMcQueen = exports.findSpheroMiniByName = exports.findSpheroMini = exports.findR2Q5 = exports.findR2D2 = exports.findBB9E = exports.find = exports.findToy = void 0; const bb9e_1 = __webpack_require__(/*! ./toys/bb9e */ "./lib/web/dist/toys/bb9e.js"); const lightning_mcqueen_1 = __webpack_require__(/*! ./toys/lightning-mcqueen */ "./lib/web/dist/toys/lightning-mcqueen.js"); const r2d2_1 = __webpack_require__(/*! ./toys/r2d2 */ "./lib/web/dist/toys/r2d2.js"); const r2q5_1 = __webpack_require__(/*! ./toys/r2q5 */ "./lib/web/dist/toys/r2q5.js"); const sphero_mini_1 = __webpack_require__(/*! ./toys/sphero-mini */ "./lib/web/dist/toys/sphero-mini.js"); const types_1 = __webpack_require__(/*! ./toys/types */ "./lib/web/dist/toys/types.js"); function findToy(type) { return new Promise((resolve, reject) => { navigator.bluetooth.requestDevice({ filters: [{ services: [types_1.ServicesUUID.apiV2ControlService] }], optionalServices: [types_1.ServicesUUID.nordicDfuService] }).then((device) => { resolve(device); }).catch(ex => { reject(ex); }); }); } exports.findToy = findToy; const startToy = (toy) => __awaiter(void 0, void 0, void 0, function* () { yield toy.start(); }); const find = (toyType, name) => __awaiter(void 0, void 0, void 0, function* () { const device = yield findToy(toyType); const toy = new toyType.class(device); yield startToy(toy); return toy; }); exports.find = find; const findBB9E = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(bb9e_1.BB9E.advertisement)); }); exports.findBB9E = findBB9E; const findR2D2 = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(r2d2_1.R2D2.advertisement)); }); exports.findR2D2 = findR2D2; const findR2Q5 = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(r2q5_1.R2Q5.advertisement)); }); exports.findR2Q5 = findR2Q5; const findSpheroMini = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(sphero_mini_1.SpheroMini.advertisement)); }); exports.findSpheroMini = findSpheroMini; const findSpheroMiniByName = (name) => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(sphero_mini_1.SpheroMini.advertisement, name)); }); exports.findSpheroMiniByName = findSpheroMiniByName; const findLightningMcQueen = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.find)(lightning_mcqueen_1.LightningMcQueen.advertisement)); }); exports.findLightningMcQueen = findLightningMcQueen; //# sourceMappingURL=scanner.js.map /***/ }), /***/ "./lib/web/dist/toys/bb9e.js": /*!***********************************!*\ !*** ./lib/web/dist/toys/bb9e.js ***! \***********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BB9E = void 0; const rollable_toy_1 = __webpack_require__(/*! ./rollable-toy */ "./lib/web/dist/toys/rollable-toy.js"); class BB9E extends rollable_toy_1.RollableToy { constructor() { super(...arguments); this.maxVoltage = 7.8; this.minVoltage = 6.5; } } exports.BB9E = BB9E; BB9E.advertisement = { name: 'BB-9E', prefix: 'GB-', class: BB9E }; //# sourceMappingURL=bb9e.js.map /***/ }), /***/ "./lib/web/dist/toys/core.js": /*!***********************************!*\ !*** ./lib/web/dist/toys/core.js ***! \***********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Core = exports.Event = exports.decodeType = exports.commandsType = void 0; const commands_1 = __webpack_require__(/*! ../commands */ "./lib/web/dist/commands/index.js"); const decoder_1 = __webpack_require__(/*! ../commands/decoder */ "./lib/web/dist/commands/decoder.js"); const types_1 = __webpack_require__(/*! ../commands/types */ "./lib/web/dist/commands/types.js"); const queue_1 = __webpack_require__(/*! ./queue */ "./lib/web/dist/toys/queue.js"); const types_2 = __webpack_require__(/*! ./types */ "./lib/web/dist/toys/types.js"); const utils_1 = __webpack_require__(/*! ./utils */ "./lib/web/dist/toys/utils.js"); exports.commandsType = false && 0; exports.decodeType = false && 0; var Event; (function (Event) { Event["onCollision"] = "onCollision"; Event["onSensor"] = "onSensor"; })(Event = exports.Event || (exports.Event = {})); class Core { constructor(p) { this.maxVoltage = 0; this.minVoltage = 1; this.apiVersion = types_2.APIVersion.V2; this.sensorMask = { v2: [], v21: [] }; this.peripheral = p; } batteryVoltage() { return __awaiter(this, void 0, void 0, function* () { const response = yield this.queueCommand(this.commands.power.batteryVoltage()); return (0, decoder_1.number)(response.command.payload, 1) / 100; }); } batteryLevel() { return __awaiter(this, void 0, void 0, function* () { const voltage = yield this.batteryVoltage(); const