From f15351562b10d29b4f6a843e9545ad285e2a2f05 Mon Sep 17 00:00:00 2001 From: Hugo Montero Date: Thu, 9 May 2024 12:49:33 -0600 Subject: [PATCH] use fwVersion to choose which command use --- src/cmd/serial.js | 25 ++++++++++++++----------- src/cmd/serial.test.js | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/cmd/serial.js b/src/cmd/serial.js index df289eaae..86d6315b8 100644 --- a/src/cmd/serial.js +++ b/src/cmd/serial.js @@ -20,6 +20,7 @@ const FlashCommand = require('./flash'); const usbUtils = require('./usb-util'); const { platformForId } = require('../lib/platform'); const { FirmwareModuleDisplayNames } = require('particle-usb'); +const semver = require('semver'); const IDENTIFY_COMMAND_TIMEOUT = 20000; @@ -266,18 +267,20 @@ module.exports = class SerialCommand extends CLICommandBase { const features = platformForId(device.platformId).features; if (features.includes('cellular')) { - let isControlRequestSupported = true; - try { - const cellularMetrics = await device.getCellularInfo(); - cellularImei = cellularMetrics.imei; - cellularIccid = cellularMetrics.iccid; - } catch (err) { - // ignore and move on to get other fields - if (err.message === 'Not supported') { - isControlRequestSupported = false; + // since from 6.x onwards we can't use serial to get imei, we use control request + if (semver.gte(fwVer, '6.0.0')) { + try { + const cellularInfo = await device.getCellularInfo({ timeout: 2000 }); + if (!cellularInfo) { + throw new VError('No data returned from control request for device info'); + } + cellularImei = cellularInfo.imei; + cellularIccid = cellularInfo.iccid; + } catch (err) { + // ignore and move on to get other fields + throw new VError(ensureError(err), 'Could not get device info'); } - } - if (!isControlRequestSupported) { + } else { try { const cellularInfo = await this.getDeviceInfoFromSerial(deviceFromSerialPort); if (!cellularInfo) { diff --git a/src/cmd/serial.test.js b/src/cmd/serial.test.js index 2904efa7d..da7c9e56b 100644 --- a/src/cmd/serial.test.js +++ b/src/cmd/serial.test.js @@ -25,7 +25,7 @@ describe('Serial Command', () => { describe('identifyDevice', () => { it('identifies a cellular device with dvos over serial', async () => { const deviceId = '1234456789abcdef'; - const fwVer = '5.4.0'; + const fwVer = '6.1.0'; const imei = '1234'; const iccid = '5678'; const wifiDeviceFromSerialPort = {