From 712f81e39d4cf56587852be840b1e77a94fbeefb Mon Sep 17 00:00:00 2001 From: keeramis Date: Tue, 14 May 2024 04:04:02 -0700 Subject: [PATCH 1/4] Fix wifi behavior using control requests / serial commands --- src/cmd/serial.js | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/cmd/serial.js b/src/cmd/serial.js index 86d6315b8..b33a29c9f 100644 --- a/src/cmd/serial.js +++ b/src/cmd/serial.js @@ -19,12 +19,12 @@ const { ensureError } = require('../lib/utilities'); const FlashCommand = require('./flash'); const usbUtils = require('./usb-util'); const { platformForId } = require('../lib/platform'); -const { FirmwareModuleDisplayNames } = require('particle-usb'); +const { FirmwareModuleDisplayNames } = require('../lib/require-optional')('particle-usb'); +const WifiControlRequest = require('../lib/wifi-control-request'); const semver = require('semver'); const IDENTIFY_COMMAND_TIMEOUT = 20000; - // TODO: DRY this up somehow // The categories of output will be handled via the log class, and similar for protip. const cmd = path.basename(process.argv[1]); @@ -529,14 +529,23 @@ module.exports = class SerialCommand extends CLICommandBase { if (!device?.specs?.features?.includes('wifi')) { throw new VError('The device does not support Wi-Fi'); } - // configure serial - // there is an issue with control request that doesn't allow us to pre-configure the device with the wifi credentials - // that's the reason we need to use serial to configure the device - if (file){ - return this._configWifiFromFile(device, file); + if (device?.specs?.generation <= 2 ) { + // configure serial + if (file){ + return this._configWifiFromFile(device, file); + } else { + return this.promptWifiScan(device); + } } else { - return this.promptWifiScan(device); + const wifiControlRequest = new WifiControlRequest(device.deviceId, { + file, + ui: this.ui, + newSpin: this.newSpin, + stopSpin: this.stopSpin + }); + await wifiControlRequest.configureWifi(); } + } _configWifiFromFile(device, filename){ @@ -750,6 +759,7 @@ module.exports = class SerialCommand extends CLICommandBase { }); }); + serialTrigger.addTrigger('EAP Type 0=PEAP/MSCHAPv2, 1=EAP-TLS:', (cb) => { resetTimeout(); @@ -803,6 +813,7 @@ module.exports = class SerialCommand extends CLICommandBase { } }); + serialTrigger.addTrigger('Outer identity (optional):', (cb) => { resetTimeout(); @@ -903,6 +914,7 @@ module.exports = class SerialCommand extends CLICommandBase { } }); + serialTrigger.addTrigger('Password:', (cb) => { resetTimeout(); // Skip password prompt as appropriate From 1dc271e5016397248ff1fe559eae1d6bd7059750 Mon Sep 17 00:00:00 2001 From: keeramis Date: Tue, 14 May 2024 04:18:01 -0700 Subject: [PATCH 2/4] lint fix --- src/cmd/serial.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/cmd/serial.js b/src/cmd/serial.js index b33a29c9f..7a588c6cf 100644 --- a/src/cmd/serial.js +++ b/src/cmd/serial.js @@ -21,7 +21,6 @@ const usbUtils = require('./usb-util'); const { platformForId } = require('../lib/platform'); const { FirmwareModuleDisplayNames } = require('../lib/require-optional')('particle-usb'); const WifiControlRequest = require('../lib/wifi-control-request'); -const semver = require('semver'); const IDENTIFY_COMMAND_TIMEOUT = 20000; @@ -759,7 +758,6 @@ module.exports = class SerialCommand extends CLICommandBase { }); }); - serialTrigger.addTrigger('EAP Type 0=PEAP/MSCHAPv2, 1=EAP-TLS:', (cb) => { resetTimeout(); @@ -813,7 +811,6 @@ module.exports = class SerialCommand extends CLICommandBase { } }); - serialTrigger.addTrigger('Outer identity (optional):', (cb) => { resetTimeout(); @@ -914,7 +911,6 @@ module.exports = class SerialCommand extends CLICommandBase { } }); - serialTrigger.addTrigger('Password:', (cb) => { resetTimeout(); // Skip password prompt as appropriate From 907a20b39c8fc14fab784c839e3d13fbbf829360 Mon Sep 17 00:00:00 2001 From: keeramis Date: Tue, 14 May 2024 23:00:38 -0700 Subject: [PATCH 3/4] Configure wifi using serial commands for device os < 6.x --- src/cmd/serial.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cmd/serial.js b/src/cmd/serial.js index 7a588c6cf..0220cae1b 100644 --- a/src/cmd/serial.js +++ b/src/cmd/serial.js @@ -21,6 +21,7 @@ const usbUtils = require('./usb-util'); const { platformForId } = require('../lib/platform'); const { FirmwareModuleDisplayNames } = require('../lib/require-optional')('particle-usb'); const WifiControlRequest = require('../lib/wifi-control-request'); +const semver = require('semver'); const IDENTIFY_COMMAND_TIMEOUT = 20000; @@ -524,19 +525,24 @@ module.exports = class SerialCommand extends CLICommandBase { } async configureWifi({ port, file }){ - const device = await this.whatSerialPortDidYouMean(port, true); - if (!device?.specs?.features?.includes('wifi')) { + const deviceFromSerialPort = await this.whatSerialPortDidYouMean(port, true); + const deviceId = deviceFromSerialPort.deviceId; + const device = await usbUtils.getOneUsbDevice({ idOrName: deviceId }); + if (!deviceFromSerialPort?.specs?.features?.includes('wifi')) { throw new VError('The device does not support Wi-Fi'); } - if (device?.specs?.generation <= 2 ) { + + // if device's firmware version is less than 6.0.0, use the old way + const fwVer = device.firmwareVersion; + if (semver.lt(fwVer, '6.0.0')) { // configure serial if (file){ - return this._configWifiFromFile(device, file); + return this._configWifiFromFile(deviceFromSerialPort, file); } else { - return this.promptWifiScan(device); + return this.promptWifiScan(deviceFromSerialPort); } } else { - const wifiControlRequest = new WifiControlRequest(device.deviceId, { + const wifiControlRequest = new WifiControlRequest(deviceFromSerialPort.deviceId, { file, ui: this.ui, newSpin: this.newSpin, From af9f90dd38b78411983e8e2be37f8344cb192091 Mon Sep 17 00:00:00 2001 From: keeramis Date: Tue, 14 May 2024 23:12:19 -0700 Subject: [PATCH 4/4] particle-usb dep changed --- src/cmd/serial.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/serial.js b/src/cmd/serial.js index 0220cae1b..9e709b3b5 100644 --- a/src/cmd/serial.js +++ b/src/cmd/serial.js @@ -19,7 +19,7 @@ const { ensureError } = require('../lib/utilities'); const FlashCommand = require('./flash'); const usbUtils = require('./usb-util'); const { platformForId } = require('../lib/platform'); -const { FirmwareModuleDisplayNames } = require('../lib/require-optional')('particle-usb'); +const { FirmwareModuleDisplayNames } = require('particle-usb'); const WifiControlRequest = require('../lib/wifi-control-request'); const semver = require('semver');