@iotize/cli
Version:
IoTize command line interface
123 lines • 5.92 kB
JavaScript
;
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