UNPKG

particle-cli

Version:

Simple Node commandline application for working with your Particle devices and using the Particle Cloud

64 lines (56 loc) 2.47 kB
const ParticleApi = require('./api'); const { platformForId } = require('../lib/platform'); const settings = require('../../settings'); const semver = require('semver'); const usbUtils = require('./usb-util'); const deviceOsUtils = require('../lib/device-os-version-util'); const CLICommandBase = require('./base'); const { parseModulesToFlash, filterModulesToFlash, maintainDeviceProtection, createFlashSteps, flashFiles } = require('../lib/flash-helper'); const createApiCache = require('../lib/api-cache'); const { validateDFUSupport } = require('./device-util'); module.exports = class UpdateCommand extends CLICommandBase { constructor(...args) { super(...args); } async updateDevice(deviceIdOrName, { target } = {}) { const { api, auth } = this._particleApi(); if (target && !semver.valid(target)) { this.ui.write(`Invalid version: ${target}`); return; } // get device info await usbUtils.executeWithUsbDevice({ args: { idOrName: deviceIdOrName, api, auth, ui: this.ui }, func: (dev) => this._updateDevice(dev, deviceIdOrName, target) }); } async _updateDevice(device, deviceIdOrName, target) { const { api } = this._particleApi(); const version = target || 'latest'; validateDFUSupport({ device, ui: this.ui }); // get platform info const platformName = platformForId(device.platformId).name; const versionText = version === 'latest' ? 'latest Device OS version' : `Device OS version ${version}`; this.ui.write(`Updating ${platformName} ${deviceIdOrName || device.id} to ${versionText}`); // get Device OS version const deviceOsBinaries = await deviceOsUtils.downloadDeviceOsVersionBinaries({ api, platformId: device.platformId, version, ui: this.ui, omitUserPart: true }); const deviceOsModules = await parseModulesToFlash({ files: deviceOsBinaries }); const modulesToFlash = filterModulesToFlash({ modules: deviceOsModules, platformId: device.platformId, allowAll: true }); await maintainDeviceProtection({ modules: modulesToFlash, device }); const flashSteps = await createFlashSteps({ modules: modulesToFlash, isInDfuMode: device.isInDfuMode , platformId: device.platformId }); await flashFiles({ device, flashSteps, ui: this.ui }); this.ui.write('Update success!'); } _particleApi() { const auth = settings.access_token; const api = new ParticleApi(settings.apiUrl, { accessToken: auth }); const apiCache = createApiCache(api); return { api: apiCache, auth }; } };