tasmota-webserial-esptool 9.2.20 → 9.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/const.d.ts +3 -3
- package/dist/esp_loader.d.ts +5 -3
- package/dist/esp_loader.js +69 -70
- package/dist/web/index.js +1 -1
- package/js/modules/esptool.js +1 -1
- package/package.json +15 -10
- package/src/const.ts +3 -3
- package/src/esp_loader.ts +80 -83
package/dist/const.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export interface Logger {
|
|
2
|
-
log(msg: string, ...args:
|
|
3
|
-
error(msg: string, ...args:
|
|
4
|
-
debug(msg: string, ...args:
|
|
2
|
+
log(msg: string, ...args: unknown[]): void;
|
|
3
|
+
error(msg: string, ...args: unknown[]): void;
|
|
4
|
+
debug(msg: string, ...args: unknown[]): void;
|
|
5
5
|
}
|
|
6
6
|
export declare const baudRates: number[];
|
|
7
7
|
export declare const FLASH_SIZES: {
|
package/dist/esp_loader.d.ts
CHANGED
|
@@ -182,15 +182,17 @@ export declare class ESPLoader extends EventTarget {
|
|
|
182
182
|
connectWithResetStrategies(): Promise<void>;
|
|
183
183
|
/**
|
|
184
184
|
* @name watchdogReset
|
|
185
|
-
* Watchdog reset for ESP32-S2/S3/
|
|
185
|
+
* Watchdog reset for ESP32-S2/S3/P4 with USB-OTG or USB-JTAG/Serial
|
|
186
186
|
* Uses RTC watchdog timer to reset the chip - works when DTR/RTS signals are not available
|
|
187
187
|
* This is an alias for rtcWdtResetChipSpecific() for backwards compatibility
|
|
188
|
+
* Note: ESP32-C3, ESP32-C5, ESP32-C6 do NOT boot correctly after WDT reset
|
|
188
189
|
*/
|
|
189
190
|
watchdogReset(): Promise<void>;
|
|
190
191
|
/**
|
|
191
|
-
* RTC watchdog timer reset for ESP32-S2, ESP32-S3,
|
|
192
|
+
* RTC watchdog timer reset for ESP32-S2, ESP32-S3, and ESP32-P4
|
|
192
193
|
* Uses specific registers for each chip family
|
|
193
|
-
* Note: ESP32-
|
|
194
|
+
* Note: ESP32-C3 does NOT boot correctly after WDT reset
|
|
195
|
+
* Note: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2 do NOT support WDT reset (no usable RTC WDT path)
|
|
194
196
|
*/
|
|
195
197
|
rtcWdtResetChipSpecific(): Promise<void>;
|
|
196
198
|
/**
|
package/dist/esp_loader.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="@types/w3c-web-serial" />
|
|
2
|
-
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32_BASEFUSEADDR, ESP32_APB_CTL_DATE_ADDR, ESP32S2_EFUSE_BLOCK1_ADDR, ESP32S3_EFUSE_BLOCK1_ADDR, ESP32C2_EFUSE_BLOCK2_ADDR, ESP32C5_EFUSE_BLOCK1_ADDR, ESP32C6_EFUSE_BLOCK1_ADDR, ESP32C61_EFUSE_BLOCK1_ADDR, ESP32H2_EFUSE_BLOCK1_ADDR, ESP32P4_EFUSE_BLOCK1_ADDR, ESP32S31_EFUSE_BLOCK1_ADDR, SlipReadError, ESP32S2_RTC_CNTL_WDTWPROTECT_REG, ESP32S2_RTC_CNTL_WDTCONFIG0_REG, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S2_RTC_CNTL_OPTION1_REG, ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, ESP32S3_RTC_CNTL_OPTION1_REG, ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32C3_EFUSE_RD_MAC_SPI_SYS_3_REG, ESP32C3_EFUSE_RD_MAC_SPI_SYS_5_REG,
|
|
2
|
+
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32_BASEFUSEADDR, ESP32_APB_CTL_DATE_ADDR, ESP32S2_EFUSE_BLOCK1_ADDR, ESP32S3_EFUSE_BLOCK1_ADDR, ESP32C2_EFUSE_BLOCK2_ADDR, ESP32C5_EFUSE_BLOCK1_ADDR, ESP32C6_EFUSE_BLOCK1_ADDR, ESP32C61_EFUSE_BLOCK1_ADDR, ESP32H2_EFUSE_BLOCK1_ADDR, ESP32P4_EFUSE_BLOCK1_ADDR, ESP32S31_EFUSE_BLOCK1_ADDR, SlipReadError, ESP32S2_RTC_CNTL_WDTWPROTECT_REG, ESP32S2_RTC_CNTL_WDTCONFIG0_REG, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S2_RTC_CNTL_OPTION1_REG, ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, ESP32S3_RTC_CNTL_OPTION1_REG, ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32C3_EFUSE_RD_MAC_SPI_SYS_3_REG, ESP32C3_EFUSE_RD_MAC_SPI_SYS_5_REG, ESP32C5_UART_CLKDIV_REG, ESP32C5_PCR_SYSCLK_CONF_REG, ESP32C5_PCR_SYSCLK_XTAL_FREQ_V, ESP32C5_PCR_SYSCLK_XTAL_FREQ_S, ESP32P4_RTC_CNTL_WDTWPROTECT_REG, ESP32P4_RTC_CNTL_WDTCONFIG0_REG, ESP32P4_RTC_CNTL_WDTCONFIG1_REG, ESP32P4_RTC_CNTL_WDT_WKEY, ESP32P4_RTC_CNTL_OPTION1_REG, ESP32P4_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32P4_LP_SYSTEM_REG_ANA_XPD_PAD_GROUP_REG, ESP32P4_PMU_EXT_LDO_P0_0P1A_ANA_REG, ESP32P4_PMU_ANA_0P1A_EN_CUR_LIM_0, ESP32P4_PMU_EXT_LDO_P0_0P1A_REG, ESP32P4_PMU_0P1A_TARGET0_0, ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0, ESP32P4_PMU_DATE_REG, ESP32S2_UARTDEV_BUF_NO, ESP32S2_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO, ESP32S3_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_BUF_UART_NO_OFFSET, ESP32C5_UARTDEV_BUF_NO, ESP32C5_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C6_UARTDEV_BUF_NO, ESP32C6_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C61_UARTDEV_BUF_NO_REV_LE2, ESP32C61_UARTDEV_BUF_NO_REV_GT2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_LE2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_GT2, ESP32H2_UARTDEV_BUF_NO, ESP32H2_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32H4_UARTDEV_BUF_NO, ESP32H4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32P4_UARTDEV_BUF_NO_REV0, ESP32P4_UARTDEV_BUF_NO_REV300, ESP32P4_UARTDEV_BUF_NO_USB_OTG, ESP32P4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, } from "./const";
|
|
3
3
|
import { getStubCode } from "./stubs";
|
|
4
4
|
import { hexFormatter, padTo, sleep, slipEncode, toHex } from "./util";
|
|
5
5
|
import { deflate } from "pako";
|
|
@@ -1186,7 +1186,7 @@ export class ESPLoader extends EventTarget {
|
|
|
1186
1186
|
this.logger.debug(`Connected CDC/JTAG successfully with ${strategy.name} reset.`);
|
|
1187
1187
|
return;
|
|
1188
1188
|
}
|
|
1189
|
-
catch
|
|
1189
|
+
catch {
|
|
1190
1190
|
throw new Error("Sync timeout or abandoned");
|
|
1191
1191
|
}
|
|
1192
1192
|
}
|
|
@@ -1217,17 +1217,19 @@ export class ESPLoader extends EventTarget {
|
|
|
1217
1217
|
}
|
|
1218
1218
|
/**
|
|
1219
1219
|
* @name watchdogReset
|
|
1220
|
-
* Watchdog reset for ESP32-S2/S3/
|
|
1220
|
+
* Watchdog reset for ESP32-S2/S3/P4 with USB-OTG or USB-JTAG/Serial
|
|
1221
1221
|
* Uses RTC watchdog timer to reset the chip - works when DTR/RTS signals are not available
|
|
1222
1222
|
* This is an alias for rtcWdtResetChipSpecific() for backwards compatibility
|
|
1223
|
+
* Note: ESP32-C3, ESP32-C5, ESP32-C6 do NOT boot correctly after WDT reset
|
|
1223
1224
|
*/
|
|
1224
1225
|
async watchdogReset() {
|
|
1225
1226
|
await this.rtcWdtResetChipSpecific();
|
|
1226
1227
|
}
|
|
1227
1228
|
/**
|
|
1228
|
-
* RTC watchdog timer reset for ESP32-S2, ESP32-S3,
|
|
1229
|
+
* RTC watchdog timer reset for ESP32-S2, ESP32-S3, and ESP32-P4
|
|
1229
1230
|
* Uses specific registers for each chip family
|
|
1230
|
-
* Note: ESP32-
|
|
1231
|
+
* Note: ESP32-C3 does NOT boot correctly after WDT reset
|
|
1232
|
+
* Note: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2 do NOT support WDT reset (no usable RTC WDT path)
|
|
1231
1233
|
*/
|
|
1232
1234
|
async rtcWdtResetChipSpecific() {
|
|
1233
1235
|
this.logger.debug("Hard resetting with watchdog timer...");
|
|
@@ -1247,20 +1249,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1247
1249
|
WDTCONFIG1_REG = ESP32S3_RTC_CNTL_WDTCONFIG1_REG;
|
|
1248
1250
|
WDT_WKEY = ESP32S3_RTC_CNTL_WDT_WKEY;
|
|
1249
1251
|
}
|
|
1250
|
-
else if (this.chipFamily === CHIP_FAMILY_ESP32C3) {
|
|
1251
|
-
WDTWPROTECT_REG = ESP32C3_RTC_CNTL_WDTWPROTECT_REG;
|
|
1252
|
-
WDTCONFIG0_REG = ESP32C3_RTC_CNTL_WDTCONFIG0_REG;
|
|
1253
|
-
WDTCONFIG1_REG = ESP32C3_RTC_CNTL_WDTCONFIG1_REG;
|
|
1254
|
-
WDT_WKEY = ESP32C3_RTC_CNTL_WDT_WKEY;
|
|
1255
|
-
}
|
|
1256
|
-
else if (this.chipFamily === CHIP_FAMILY_ESP32C5 ||
|
|
1257
|
-
this.chipFamily === CHIP_FAMILY_ESP32C6) {
|
|
1258
|
-
// C5 and C6 use LP_WDT (Low Power Watchdog Timer)
|
|
1259
|
-
WDTWPROTECT_REG = ESP32C5_C6_RTC_CNTL_WDTWPROTECT_REG;
|
|
1260
|
-
WDTCONFIG0_REG = ESP32C5_C6_RTC_CNTL_WDTCONFIG0_REG;
|
|
1261
|
-
WDTCONFIG1_REG = ESP32C5_C6_RTC_CNTL_WDTCONFIG1_REG;
|
|
1262
|
-
WDT_WKEY = ESP32C5_C6_RTC_CNTL_WDT_WKEY;
|
|
1263
|
-
}
|
|
1264
1252
|
else if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
|
|
1265
1253
|
// P4 uses LP_WDT (Low Power Watchdog Timer)
|
|
1266
1254
|
WDTWPROTECT_REG = ESP32P4_RTC_CNTL_WDTWPROTECT_REG;
|
|
@@ -1308,7 +1296,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1308
1296
|
// Fall back to generic USB-JTAG/OTG handling
|
|
1309
1297
|
usbMode = { mode: "usb-jtag-serial", uartNo: 0 };
|
|
1310
1298
|
}
|
|
1311
|
-
// Check if chip supports WDT reset
|
|
1312
1299
|
// WDT reset is not needed for ESP32-C3
|
|
1313
1300
|
// WDT reset is supported by: ESP32-S2, ESP32-S3, ESP32-P4
|
|
1314
1301
|
// WDT reset is NOT supported by: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2
|
|
@@ -1421,53 +1408,65 @@ export class ESPLoader extends EventTarget {
|
|
|
1421
1408
|
// Detect USB connection type to choose correct reset method
|
|
1422
1409
|
const isUsbJtagOrOtg = await this.detectUsbConnectionType();
|
|
1423
1410
|
if (isUsbJtagOrOtg) {
|
|
1424
|
-
// USB-JTAG/OTG devices:
|
|
1425
|
-
|
|
1426
|
-
//
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
usbMode = { mode: "usb-jtag-serial", uartNo: 0 };
|
|
1435
|
-
}
|
|
1436
|
-
// Clear force download flag for USB-OTG devices
|
|
1437
|
-
if (usbMode.mode === "usb-otg") {
|
|
1411
|
+
// USB-JTAG/OTG devices: Check if chip supports WDT reset
|
|
1412
|
+
// Only S2, S3, P4 support WDT reset correctly
|
|
1413
|
+
// C3, C5, C6, C61, H2 do NOT boot correctly after WDT reset
|
|
1414
|
+
const supportsWdtReset = this.chipFamily === CHIP_FAMILY_ESP32S2 ||
|
|
1415
|
+
this.chipFamily === CHIP_FAMILY_ESP32S3 ||
|
|
1416
|
+
this.chipFamily === CHIP_FAMILY_ESP32P4;
|
|
1417
|
+
if (supportsWdtReset) {
|
|
1418
|
+
this.logger.debug("USB-JTAG/OTG detected - using WDT reset");
|
|
1419
|
+
// Get USB mode details
|
|
1420
|
+
let usbMode;
|
|
1438
1421
|
try {
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
this.logger.debug("Force download boot flag cleared");
|
|
1442
|
-
}
|
|
1422
|
+
usbMode = await this.getUsbMode();
|
|
1423
|
+
this.logger.debug(`USB mode: ${usbMode.mode} (uartNo=${usbMode.uartNo})`);
|
|
1443
1424
|
}
|
|
1444
1425
|
catch (err) {
|
|
1445
|
-
this.logger.debug(`Could not
|
|
1426
|
+
this.logger.debug(`Could not get USB mode: ${err}`);
|
|
1427
|
+
usbMode = { mode: "usb-jtag-serial", uartNo: 0 };
|
|
1428
|
+
}
|
|
1429
|
+
// Clear force download flag for USB-OTG devices
|
|
1430
|
+
if (usbMode.mode === "usb-otg") {
|
|
1431
|
+
try {
|
|
1432
|
+
const flagCleared = await this._clearForceDownloadBootIfNeeded();
|
|
1433
|
+
if (flagCleared) {
|
|
1434
|
+
this.logger.debug("Force download boot flag cleared");
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1437
|
+
catch (err) {
|
|
1438
|
+
this.logger.debug(`Could not clear force download flag: ${err}`);
|
|
1439
|
+
}
|
|
1446
1440
|
}
|
|
1441
|
+
// Perform WDT reset
|
|
1442
|
+
await this.rtcWdtResetChipSpecific();
|
|
1443
|
+
this.logger.debug(`${this.chipName}: WDT reset to firmware complete`);
|
|
1444
|
+
return;
|
|
1445
|
+
}
|
|
1446
|
+
else {
|
|
1447
|
+
// C3, C5, C6, etc. - use classic reset (like external serial chips)
|
|
1448
|
+
this.logger.debug(`${this.chipName} does not support WDT reset - using classic reset instead`);
|
|
1447
1449
|
}
|
|
1448
|
-
// Perform WDT reset
|
|
1449
|
-
await this.rtcWdtResetChipSpecific();
|
|
1450
|
-
this.logger.debug(`${this.chipName}: WDT reset to firmware complete`);
|
|
1451
|
-
return;
|
|
1452
1450
|
}
|
|
1453
1451
|
else {
|
|
1454
1452
|
// External serial chip: Use classic reset
|
|
1455
1453
|
this.logger.debug("External serial chip detected - using classic reset");
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1454
|
+
}
|
|
1455
|
+
// Classic reset: used for external serial chips and USB-JTAG chips that do not support WDT reset
|
|
1456
|
+
if (this.isWebUSB()) {
|
|
1457
|
+
// WebUSB: Use longer delays for better compatibility
|
|
1458
|
+
await this.setRTSWebUSB(true); // EN->LOW
|
|
1459
|
+
await sleep(200);
|
|
1460
|
+
await this.setRTSWebUSB(false);
|
|
1461
|
+
await sleep(200);
|
|
1462
|
+
this.logger.debug("Hard reset to firmware (WebUSB).");
|
|
1463
|
+
}
|
|
1464
|
+
else {
|
|
1465
|
+
// Web Serial: Standard reset
|
|
1466
|
+
await this.setRTS(true); // EN->LOW
|
|
1467
|
+
await sleep(100);
|
|
1468
|
+
await this.setRTS(false);
|
|
1469
|
+
this.logger.debug("Hard reset to firmware.");
|
|
1471
1470
|
}
|
|
1472
1471
|
}
|
|
1473
1472
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
@@ -1988,9 +1987,9 @@ export class ESPLoader extends EventTarget {
|
|
|
1988
1987
|
// Restart Readloop
|
|
1989
1988
|
this.readLoop();
|
|
1990
1989
|
}
|
|
1991
|
-
catch
|
|
1992
|
-
// this.logger.error(`Reconfigure port error
|
|
1993
|
-
// throw new Error(`Unable to change the baud rate to ${baud}
|
|
1990
|
+
catch {
|
|
1991
|
+
// this.logger.error(`Reconfigure port error`);
|
|
1992
|
+
// throw new Error(`Unable to change the baud rate to ${baud}`);
|
|
1994
1993
|
}
|
|
1995
1994
|
finally {
|
|
1996
1995
|
// Always reset flag, even on error or early return
|
|
@@ -2598,8 +2597,8 @@ export class ESPLoader extends EventTarget {
|
|
|
2598
2597
|
try {
|
|
2599
2598
|
await this._writeChain;
|
|
2600
2599
|
}
|
|
2601
|
-
catch
|
|
2602
|
-
// this.logger.debug(
|
|
2600
|
+
catch {
|
|
2601
|
+
// this.logger.debug("Pending write error during disconnect");
|
|
2603
2602
|
}
|
|
2604
2603
|
// Release persistent writer before closing
|
|
2605
2604
|
if (this._writer) {
|
|
@@ -2607,8 +2606,8 @@ export class ESPLoader extends EventTarget {
|
|
|
2607
2606
|
await this._writer.close();
|
|
2608
2607
|
this._writer.releaseLock();
|
|
2609
2608
|
}
|
|
2610
|
-
catch
|
|
2611
|
-
// this.logger.debug(
|
|
2609
|
+
catch {
|
|
2610
|
+
// this.logger.debug("Writer close/release error");
|
|
2612
2611
|
}
|
|
2613
2612
|
this._writer = undefined;
|
|
2614
2613
|
}
|
|
@@ -2620,8 +2619,8 @@ export class ESPLoader extends EventTarget {
|
|
|
2620
2619
|
await writer.close();
|
|
2621
2620
|
writer.releaseLock();
|
|
2622
2621
|
}
|
|
2623
|
-
catch
|
|
2624
|
-
// this.logger.debug(
|
|
2622
|
+
catch {
|
|
2623
|
+
// this.logger.debug("Direct writer close error");
|
|
2625
2624
|
}
|
|
2626
2625
|
}
|
|
2627
2626
|
await new Promise((resolve) => {
|
|
@@ -2642,7 +2641,7 @@ export class ESPLoader extends EventTarget {
|
|
|
2642
2641
|
try {
|
|
2643
2642
|
this._reader.cancel();
|
|
2644
2643
|
}
|
|
2645
|
-
catch
|
|
2644
|
+
catch {
|
|
2646
2645
|
// Reader already released, resolve immediately
|
|
2647
2646
|
clearTimeout(timeout);
|
|
2648
2647
|
resolve(undefined);
|
|
@@ -2672,8 +2671,8 @@ export class ESPLoader extends EventTarget {
|
|
|
2672
2671
|
try {
|
|
2673
2672
|
await this._writeChain;
|
|
2674
2673
|
}
|
|
2675
|
-
catch
|
|
2676
|
-
// this.logger.debug(
|
|
2674
|
+
catch {
|
|
2675
|
+
// this.logger.debug("Pending write error during release");
|
|
2677
2676
|
}
|
|
2678
2677
|
// Release writer
|
|
2679
2678
|
if (this._writer) {
|