UNPKG

@iotize/cli

Version:
123 lines 5.92 kB
"use strict"; 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 }); require("@iotize/device-client.js/ext/factory-reset"); require("@iotize/device-client.js/ext/firmware-update"); const progress_bar_1 = require("@iotize/cli-core/progress-bar"); const device_client_js_1 = require("@iotize/device-client.js"); const impl_1 = require("@iotize/device-client.js/client/impl"); const core_1 = require("@iotize/device-client.js/protocol/core"); const operators_1 = require("rxjs/operators"); const ui_1 = require("../../ui"); const adp_update_service_1 = require("../tapnpass/adp-update.service"); // const MAX_NOBLE_SIZE = 144 /** */ class TapNLinkUpdaterService { constructor() { } update(tap, firmwareUpdateInfo, options) { return __awaiter(this, void 0, void 0, function* () { if (tap.protocol instanceof core_1.AbstractComProtocol) { tap.protocol.options.send.timeout = Math.max(10000, tap.protocol.options.send.timeout); } if (options.factoryReset) { ui_1.display.infonl(`Clearing configuration...`); yield tap.factoryReset(); } // display.infonl(`Requesting firmware update to version ${options.version} for ${sn}...`) const firmwareUpdateData = firmwareUpdateInfo.tapnlink; try { const expectedCrc = impl_1.CRC.fromBytes(firmwareUpdateData); } catch (err) { throw err; } ui_1.display.infonl(`Firmware update size: ${firmwareUpdateData.length} bytes`); if (firmwareUpdateInfo.adp) { const adpUpdater = new adp_update_service_1.AdpUpdateService(); yield adpUpdater.update(tap, firmwareUpdateInfo.adp); } // console.info(`Using packet size of ${maxSinglePacketSize} bytes`) // let packetBuilder = new SinglePacketSplitter(maxSinglePacketSize); // let packets = packetBuilder.chunk(firmwareUpdateData); // if (!tap.encryption) { // await tap.enableEncryption(true) // } const observable = this.tapnlinkFirmwareUpdate(tap, firmwareUpdateData, options); yield observable.toPromise(); const newFirmwareVersion = (yield tap.service.device.getFirmwareVersion()).body(); ui_1.display.infonl(`New firmware version: ${newFirmwareVersion}`); }); } tapnlinkFirmwareUpdate(tap, firmwareUpdateData, options) { let bar; let maxSinglePacketSize = 0; if (!options.chunkSize) { // TODO fix // if (tap.protocol instanceof NobleBLEAdapter) { // maxSinglePacketSize = MAX_NOBLE_SIZE // } } else { maxSinglePacketSize = options.chunkSize; } if (!maxSinglePacketSize) { maxSinglePacketSize = device_client_js_1.SinglePacketBuilder.MAX_PART_SIZE; } // TODO FIX // if (tap.protocol instanceof NobleBLEAdapter) { // // Due to error LIBUSB_TRANSFER_STALL with noble when giving more that 177 + 12 bytes // if (maxSinglePacketSize > MAX_NOBLE_SIZE) { // global.input.confirm(`Using packet size too big for BLE ${maxSinglePacketSize}. Max size: ${MAX_NOBLE_SIZE}. Are you sure to continue ?`) // } // // maxSinglePacketSize = 160 // } tap.singlePacket.singlePacketSplitter.options.chunkSize = maxSinglePacketSize; const fwUpdated = tap.firmwareUpdater(); return fwUpdated.start(firmwareUpdateData) .pipe(operators_1.tap({ next: event => { if (!event) { return; } switch (event.step) { case 'setup': ui_1.display.infonl(`Prepare for update...`); break; case 'load': const progress = event.payload; if (progress) { if (!bar) { bar = progress_bar_1.ProgressBarBuilder.withTotal(progress.total, 'Uploading to device'); } bar.curr = progress.current; bar.total = progress.total; bar.render(); } break; case 'apply': ui_1.display.infonl(`Applying update...`); break; case 'restart': ui_1.display.infonl(`Restarting Tap...`); break; case 'finish': ui_1.display.infonl(`Done!`); break; default: ui_1.display.info('.'); } } })); } } exports.TapNLinkUpdaterService = TapNLinkUpdaterService; //# sourceMappingURL=tapnlink-update.service.js.map