tasmota-webserial-esptool 6.4.1 → 6.5.0
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/.github/workflows/build_upload.yml +8 -5
- package/.github/workflows/ci.yml +3 -3
- package/CHANGELOG_CHIP_VARIANT.md +169 -0
- package/CHIP_VARIANT_SUPPORT.md +170 -0
- package/IMPLEMENTATION_SUMMARY.md +232 -0
- package/css/style.css +1 -0
- package/dist/const.d.ts +9 -0
- package/dist/const.js +15 -0
- package/dist/esp_loader.d.ts +20 -0
- package/dist/esp_loader.js +107 -12
- package/dist/index.js +1 -0
- package/dist/stubs/esp32c5.json +4 -4
- package/dist/stubs/esp32p4r3.json +8 -0
- package/dist/stubs/index.d.ts +1 -1
- package/dist/stubs/index.js +8 -2
- package/dist/web/esp32c5-mcj52-K1.js +1 -0
- package/dist/web/esp32p4r3-Cle9QJmZ.js +1 -0
- package/dist/web/index.js +1 -1
- package/index.html +13 -0
- package/js/modules/esp32c5-mcj52-K1.js +1 -0
- package/js/modules/esp32p4r3-Cle9QJmZ.js +1 -0
- package/js/modules/esptool.js +1 -1
- package/js/script.js +23 -0
- package/package.json +1 -1
- package/src/const.ts +22 -0
- package/src/esp_loader.ts +152 -12
- package/src/index.ts +2 -0
- package/src/stubs/esp32c5.json +4 -4
- package/src/stubs/esp32p4r3.json +8 -0
- package/src/stubs/index.ts +10 -2
- package/tsconfig.json +2 -1
- package/dist/web/esp32c5-C8uE-s4t.js +0 -1
- package/js/modules/esp32c5-C8uE-s4t.js +0 -1
package/dist/const.js
CHANGED
|
@@ -151,6 +151,7 @@ export const ESP32H2_UART_DATE_REG_ADDR = 0x6000007c;
|
|
|
151
151
|
export const ESP32H2_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
152
152
|
export const ESP32P4_SPI_REG_BASE = 0x5008d000;
|
|
153
153
|
export const ESP32P4_BASEFUSEADDR = 0x5012d000;
|
|
154
|
+
export const ESP32P4_EFUSE_BLOCK1_ADDR = ESP32P4_BASEFUSEADDR + 0x044;
|
|
154
155
|
export const ESP32P4_MACFUSEADDR = 0x5012d000 + 0x044;
|
|
155
156
|
export const ESP32P4_SPI_USR_OFFS = 0x18;
|
|
156
157
|
export const ESP32P4_SPI_USR1_OFFS = 0x1c;
|
|
@@ -162,6 +163,7 @@ export const ESP32P4_UART_DATE_REG_ADDR = 0x500ca000 + 0x8c;
|
|
|
162
163
|
export const ESP32P4_BOOTLOADER_FLASH_OFFSET = 0x2000;
|
|
163
164
|
export const SYNC_PACKET = toByteArray("\x07\x07\x12 UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
|
|
164
165
|
export const CHIP_DETECT_MAGIC_REG_ADDR = 0x40001000;
|
|
166
|
+
// Image Chip IDs (used by ESP32-C3 and later for chip detection)
|
|
165
167
|
// These values for the families are made up; nothing that esptool uses.
|
|
166
168
|
export const CHIP_FAMILY_ESP8266 = 0x8266;
|
|
167
169
|
export const CHIP_FAMILY_ESP32 = 0x32;
|
|
@@ -174,6 +176,16 @@ export const CHIP_FAMILY_ESP32C6 = 0x32c6;
|
|
|
174
176
|
export const CHIP_FAMILY_ESP32C61 = 0x32c61;
|
|
175
177
|
export const CHIP_FAMILY_ESP32H2 = 0x3272;
|
|
176
178
|
export const CHIP_FAMILY_ESP32P4 = 0x3280;
|
|
179
|
+
export const CHIP_ID_TO_INFO = {
|
|
180
|
+
5: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
|
|
181
|
+
9: { name: "ESP32-S3", family: CHIP_FAMILY_ESP32S3 },
|
|
182
|
+
12: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
|
|
183
|
+
13: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
|
|
184
|
+
16: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
185
|
+
17: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
|
|
186
|
+
18: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
187
|
+
20: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
188
|
+
};
|
|
177
189
|
export const CHIP_DETECT_MAGIC_VALUES = {
|
|
178
190
|
0xfff0c101: { name: "ESP8266", family: CHIP_FAMILY_ESP8266 },
|
|
179
191
|
0x00f01d83: { name: "ESP32", family: CHIP_FAMILY_ESP32 },
|
|
@@ -197,6 +209,8 @@ export const CHIP_DETECT_MAGIC_VALUES = {
|
|
|
197
209
|
0x7211606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
198
210
|
0x97e30068: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
199
211
|
0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
212
|
+
// ESP32-P4 old revisions (< Rev. 300) - use magic value detection
|
|
213
|
+
// Rev. 300+ uses IMAGE_CHIP_ID detection instead
|
|
200
214
|
0x0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
201
215
|
0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
202
216
|
0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
@@ -217,6 +231,7 @@ export const ESP_SPI_SET_PARAMS = 0x0b;
|
|
|
217
231
|
export const ESP_SPI_ATTACH = 0x0d;
|
|
218
232
|
export const ESP_CHANGE_BAUDRATE = 0x0f;
|
|
219
233
|
export const ESP_SPI_FLASH_MD5 = 0x13;
|
|
234
|
+
export const ESP_GET_SECURITY_INFO = 0x14;
|
|
220
235
|
export const ESP_CHECKSUM_MAGIC = 0xef;
|
|
221
236
|
export const ESP_FLASH_DEFL_BEGIN = 0x10;
|
|
222
237
|
export const ESP_FLASH_DEFL_DATA = 0x11;
|
package/dist/esp_loader.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export declare class ESPLoader extends EventTarget {
|
|
|
5
5
|
private _parent?;
|
|
6
6
|
chipFamily: ChipFamily;
|
|
7
7
|
chipName: string | null;
|
|
8
|
+
chipRevision: number | null;
|
|
9
|
+
chipVariant: string | null;
|
|
8
10
|
_efuses: any[];
|
|
9
11
|
_flashsize: number;
|
|
10
12
|
debug: boolean;
|
|
@@ -16,6 +18,24 @@ export declare class ESPLoader extends EventTarget {
|
|
|
16
18
|
constructor(port: SerialPort, logger: Logger, _parent?: ESPLoader | undefined);
|
|
17
19
|
private get _inputBuffer();
|
|
18
20
|
initialize(): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Detect chip type using GET_SECURITY_INFO (for newer chips) or magic value (for older chips)
|
|
23
|
+
*/
|
|
24
|
+
detectChip(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Get chip revision for ESP32-P4
|
|
27
|
+
*/
|
|
28
|
+
getChipRevision(): Promise<number>;
|
|
29
|
+
/**
|
|
30
|
+
* Get security info including chip ID (ESP32-C3 and later)
|
|
31
|
+
*/
|
|
32
|
+
getSecurityInfo(): Promise<{
|
|
33
|
+
flags: number;
|
|
34
|
+
flashCryptCnt: number;
|
|
35
|
+
keyPurposes: number[];
|
|
36
|
+
chipId: number;
|
|
37
|
+
apiVersion: number;
|
|
38
|
+
}>;
|
|
19
39
|
/**
|
|
20
40
|
* @name readLoop
|
|
21
41
|
* Reads data from the input stream and places it in the inputBuffer
|
package/dist/esp_loader.js
CHANGED
|
@@ -1,4 +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_ESP32P4, 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, CHIP_ERASE_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, ESP32P4_EFUSE_BLOCK1_ADDR, SlipReadError, } from "./const";
|
|
2
3
|
import { getStubCode } from "./stubs";
|
|
3
4
|
import { hexFormatter, sleep, slipEncode, toHex } from "./util";
|
|
4
5
|
// @ts-ignore
|
|
@@ -11,6 +12,8 @@ export class ESPLoader extends EventTarget {
|
|
|
11
12
|
this.logger = logger;
|
|
12
13
|
this._parent = _parent;
|
|
13
14
|
this.chipName = null;
|
|
15
|
+
this.chipRevision = null;
|
|
16
|
+
this.chipVariant = null;
|
|
14
17
|
this._efuses = new Array(4).fill(0);
|
|
15
18
|
this._flashsize = 4 * 1024 * 1024;
|
|
16
19
|
this.debug = false;
|
|
@@ -30,14 +33,8 @@ export class ESPLoader extends EventTarget {
|
|
|
30
33
|
this.readLoop();
|
|
31
34
|
}
|
|
32
35
|
await this.sync();
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
let chip = CHIP_DETECT_MAGIC_VALUES[chipMagicValue >>> 0];
|
|
36
|
-
if (chip === undefined) {
|
|
37
|
-
throw new Error(`Unknown Chip: Hex: ${toHex(chipMagicValue >>> 0, 8).toLowerCase()} Number: ${chipMagicValue}`);
|
|
38
|
-
}
|
|
39
|
-
this.chipName = chip.name;
|
|
40
|
-
this.chipFamily = chip.family;
|
|
36
|
+
// Detect chip type
|
|
37
|
+
await this.detectChip();
|
|
41
38
|
// Read the OTP data for this chip and store into this.efuses array
|
|
42
39
|
let FlAddr = getSpiFlashAddresses(this.getChipFamily());
|
|
43
40
|
let AddrMAC = FlAddr.macFuse;
|
|
@@ -47,6 +44,104 @@ export class ESPLoader extends EventTarget {
|
|
|
47
44
|
this.logger.log(`Chip type ${this.chipName}`);
|
|
48
45
|
//this.logger.log("FLASHID");
|
|
49
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Detect chip type using GET_SECURITY_INFO (for newer chips) or magic value (for older chips)
|
|
49
|
+
*/
|
|
50
|
+
async detectChip() {
|
|
51
|
+
try {
|
|
52
|
+
// Try GET_SECURITY_INFO command first (ESP32-C3 and later)
|
|
53
|
+
const securityInfo = await this.getSecurityInfo();
|
|
54
|
+
const chipId = securityInfo.chipId;
|
|
55
|
+
const chipInfo = CHIP_ID_TO_INFO[chipId];
|
|
56
|
+
if (chipInfo) {
|
|
57
|
+
this.chipName = chipInfo.name;
|
|
58
|
+
this.chipFamily = chipInfo.family;
|
|
59
|
+
// Get chip revision for ESP32-P4
|
|
60
|
+
if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
|
|
61
|
+
this.chipRevision = await this.getChipRevision();
|
|
62
|
+
this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
|
|
63
|
+
// Set chip variant based on revision
|
|
64
|
+
if (this.chipRevision >= 300) {
|
|
65
|
+
this.chipVariant = "rev300";
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.chipVariant = "rev0";
|
|
69
|
+
}
|
|
70
|
+
this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
|
|
71
|
+
}
|
|
72
|
+
this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${chipId} (${this.chipName})`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.logger.debug(`Unknown IMAGE_CHIP_ID: ${chipId}, falling back to magic value detection`);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// GET_SECURITY_INFO not supported, fall back to magic value detection
|
|
79
|
+
this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${err}`);
|
|
80
|
+
}
|
|
81
|
+
// Fallback: Use magic value detection for ESP8266, ESP32, ESP32-S2, and ESP32-P4 RC versions
|
|
82
|
+
let chipMagicValue = await this.readRegister(CHIP_DETECT_MAGIC_REG_ADDR);
|
|
83
|
+
let chip = CHIP_DETECT_MAGIC_VALUES[chipMagicValue >>> 0];
|
|
84
|
+
if (chip === undefined) {
|
|
85
|
+
throw new Error(`Unknown Chip: Hex: ${toHex(chipMagicValue >>> 0, 8).toLowerCase()} Number: ${chipMagicValue}`);
|
|
86
|
+
}
|
|
87
|
+
this.chipName = chip.name;
|
|
88
|
+
this.chipFamily = chip.family;
|
|
89
|
+
// For ESP32-P4 detected via magic value (old revisions), set variant
|
|
90
|
+
if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
|
|
91
|
+
this.chipRevision = await this.getChipRevision();
|
|
92
|
+
this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
|
|
93
|
+
if (this.chipRevision >= 300) {
|
|
94
|
+
this.chipVariant = "rev300";
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.chipVariant = "rev0";
|
|
98
|
+
}
|
|
99
|
+
this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
|
|
100
|
+
}
|
|
101
|
+
this.logger.debug(`Detected chip via magic value: ${toHex(chipMagicValue >>> 0, 8)} (${this.chipName})`);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get chip revision for ESP32-P4
|
|
105
|
+
*/
|
|
106
|
+
async getChipRevision() {
|
|
107
|
+
if (this.chipFamily !== CHIP_FAMILY_ESP32P4) {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
// Read from EFUSE_BLOCK1 to get chip revision
|
|
111
|
+
// Word 2 contains revision info for ESP32-P4
|
|
112
|
+
const word2 = await this.readRegister(ESP32P4_EFUSE_BLOCK1_ADDR + 8);
|
|
113
|
+
// Minor revision: bits [3:0]
|
|
114
|
+
const minorRev = word2 & 0x0f;
|
|
115
|
+
// Major revision: bits [23] << 2 | bits [5:4]
|
|
116
|
+
const majorRev = (((word2 >> 23) & 1) << 2) | ((word2 >> 4) & 0x03);
|
|
117
|
+
// Revision is major * 100 + minor
|
|
118
|
+
return majorRev * 100 + minorRev;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get security info including chip ID (ESP32-C3 and later)
|
|
122
|
+
*/
|
|
123
|
+
async getSecurityInfo() {
|
|
124
|
+
const [_, responseData] = await this.checkCommand(ESP_GET_SECURITY_INFO, [], 0);
|
|
125
|
+
if (responseData.length < 20) {
|
|
126
|
+
throw new Error(`Invalid security info response length: ${responseData.length}`);
|
|
127
|
+
}
|
|
128
|
+
const flags = unpack("<I", responseData.slice(0, 4))[0];
|
|
129
|
+
const flashCryptCnt = responseData[4];
|
|
130
|
+
const keyPurposes = Array.from(responseData.slice(5, 12));
|
|
131
|
+
const chipId = responseData.length >= 16
|
|
132
|
+
? unpack("<I", responseData.slice(12, 16))[0]
|
|
133
|
+
: 0;
|
|
134
|
+
const apiVersion = responseData.length >= 20
|
|
135
|
+
? unpack("<I", responseData.slice(16, 20))[0]
|
|
136
|
+
: 0;
|
|
137
|
+
return {
|
|
138
|
+
flags,
|
|
139
|
+
flashCryptCnt,
|
|
140
|
+
keyPurposes,
|
|
141
|
+
chipId,
|
|
142
|
+
apiVersion,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
50
145
|
/**
|
|
51
146
|
* @name readLoop
|
|
52
147
|
* Reads data from the input stream and places it in the inputBuffer
|
|
@@ -411,6 +506,7 @@ export class ESPLoader extends EventTarget {
|
|
|
411
506
|
else {
|
|
412
507
|
await this.reconfigurePort(baud);
|
|
413
508
|
}
|
|
509
|
+
this.logger.log(`Changed baud rate to ${baud}`);
|
|
414
510
|
}
|
|
415
511
|
async reconfigurePort(baud) {
|
|
416
512
|
var _a;
|
|
@@ -425,7 +521,6 @@ export class ESPLoader extends EventTarget {
|
|
|
425
521
|
await this.port.open({ baudRate: baud });
|
|
426
522
|
// Restart Readloop
|
|
427
523
|
this.readLoop();
|
|
428
|
-
this.logger.log(`Changed baud rate to ${baud}`);
|
|
429
524
|
}
|
|
430
525
|
catch (e) {
|
|
431
526
|
console.error(e);
|
|
@@ -846,7 +941,7 @@ export class ESPLoader extends EventTarget {
|
|
|
846
941
|
return await this.checkCommand(ESP_MEM_END, data, 0, timeout);
|
|
847
942
|
}
|
|
848
943
|
async runStub() {
|
|
849
|
-
const stub = await getStubCode(this.chipFamily);
|
|
944
|
+
const stub = await getStubCode(this.chipFamily, this.chipRevision);
|
|
850
945
|
// We're transferring over USB, right?
|
|
851
946
|
let ramBlock = USB_RAM_BLOCK;
|
|
852
947
|
// Upload
|
|
@@ -921,7 +1016,7 @@ class EspStubLoader extends ESPLoader {
|
|
|
921
1016
|
* Start downloading an application image to RAM
|
|
922
1017
|
*/
|
|
923
1018
|
async memBegin(size, blocks, blocksize, offset) {
|
|
924
|
-
let stub = await getStubCode(this.chipFamily);
|
|
1019
|
+
let stub = await getStubCode(this.chipFamily, this.chipRevision);
|
|
925
1020
|
let load_start = offset;
|
|
926
1021
|
let load_end = offset + size;
|
|
927
1022
|
console.log(load_start, load_end);
|
package/dist/index.js
CHANGED
package/dist/stubs/esp32c5.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "QRG39wBgIsQmwkrAEUcGxrcEhEDYyz6JM4TnAJOEBAAcQJGLmeeyQCJEkkQCSUEBgoADJQkAnEATdfUPgpfNtwERtwcAYE7Gg6mHAErINwmEQCbKUsQGziLMk4THAT6KEwkJAIBAE3T0PxnIAyUKAIMnCQB9FBN19Q+Cl2X43bfyQGJEtwcAYCOoNwHSREJJskkiSgVhgoCTBwAMkEEqh2MY9QCFRwXGI6AFAHlVgoCFRmMH1gAJRWMNpgB9VYKAQgWTB7ANQYVjE/cCiUecwfW3EwbADWMVxwCUwT6FgoCTB9AN4xz3/
|
|
2
|
+
"entry": 1082132556,
|
|
3
|
+
"text": "QRG39wBgIsQmwkrAEUcGxrcEhEDYyz6JM4TnAJOEBAAcQJGLmeeyQCJEkkQCSUEBgoADJQkAnEATdfUPgpfNtwERtwcAYE7Gg6mHAErINwmEQCbKUsQGziLMk4THAT6KEwkJAIBAE3T0PxnIAyUKAIMnCQB9FBN19Q+Cl2X43bfyQGJEtwcAYCOoNwHSREJJskkiSgVhgoCTBwAMkEEqh2MY9QCFRwXGI6AFAHlVgoCFRmMH1gAJRWMNpgB9VYKAQgWTB7ANQYVjE/cCiUecwfW3EwbADWMVxwCUwT6FgoCTB9AN4xz3/JTBEwWwDYKAtzWFQEERk4XFugbGcT9jTQUEtzeFQJOHR7IDpwcIg9ZHCBOGFgAjkscINpcjAKcAA9dHCJFnk4cHBGMa9wI3t4RAEwdHsqFnupcDpgcIt/aEQJOGRrZjH+YAI6bHCCOg1wgjkgcIIaD5V+MK9fyyQEEBgoAjptcII6DnCN23NzcAYBMHRwUcQ52L9f83JwBgEwdHBRxDnYv1/4KAQREGxvk/NzcAYLcGAAgjJgcCkwfHAhTDFEP9/ohDskATRfX/BYlBAYKAQREGxsk/fd23NwBgNwcAQJjDmEN9/7JAQQGCgHlxKoNCXjcFAECDTkEDgy9FAQVFRsJCwAbWDU92yCrGcsS+iDqItocyh6FGLoaahWOZ7wGX4IL/54DgfrJQRWGCgJfAgv/ngGAhzb95cSLUJtJK0FLMBtZOzqqELokyhEFKlwCA/+eAwO5jSoAAslAiVJJUAlnySWJKRWGCgKKJY1OKAMFJk5c5AD7AyogmhgLCAUiBRyFHkwYAArFFEUWFNzMENEFOmc6Uwbd5cSLUJtJK0FLMVsoG1k7OqoQuiTKEEwoAApcAgP/ngIDohUpjS4AAslAiVJJUAlnySWJK0kpFYYKA/T2iiWNUigCTCQACyocmhoFIE5g5AAFHkwYAAslFEUVWwgLA3T2XAID/54Ag5E6ZzpQzBDRBVb8BESLMN4SEQBMEhAFKyAMpBAEGzibKYwoJCEk1WcW9R4FEY9YnAQRE/YyTtBQAYT25NbcHhECDx0cAwceXAID/54BA30k1EESFRz7CAsAyBjcHAAGBSAFIgUeNxGNe5gABR+FGkwWADRVFpT2XAID/54BA3EFHJaABR5MGAAKTBcAN3bdjWeYCAUfhRpMFAAIVRYE9lwCA/+eAwNkFRxxImY8cyBxEupccxPJAYkTSREJJBWGCgAFHkwYAApMFEALBvxxENwcAAbqGsgeZwLcGgAB9F/mPNzcAYFzDFMMcQ/3/zdxBvwERBs5ROzcFhkBsAEEVlwCA/+eAANuqhwVFneeyR5P3ByA+xnU7tzcAYJhHtwZAADcFhkBVj5jHskVBFZcAgP/ngGDYMzWgAPJABWGCgEERt4eEQAbGk4eHAQVHI4DnABPXxQCYxwVnfRfMw8jH+Y06laqVsYGMyyOqBwBRNxnBEwVQDLJAQQGCgAERIsw3hIRAEwSEASbKREQGzkrITsZSxFbCWsBj85UAroSlwAMpRAAqiiaZE1nJABxIY1XwABxEY1/5BMU5fd23B4RAg8dHAIMqRADZw5P5+g8TCQAQMwk5QZcAgP/ngGDGY/wkAyaG0oVWhU07lwCA/+eAIMVcQKaXXMBcRIWPXMTyQGJE0kRCSbJJIkqSSgJLBWGCgO07Yb+TiQnwSobShVaFppmlO5PZiQABSzMFWQGzBSoBY2U7ATOGJEF9txMGABAFC6E7EwkJEBN7+w/5vyaG0oVWhZcAgP/ngEDCE3X1D0nZkwdADFzIabdBEQbGlwCA/+eAYLYDRYUBskB1FRM1FQBBAYKAQREGxsU3DcW3B4RAk4cHAJRHmc43ZwlgEwfHEBxDNwb9/30W8Y83BgMA8Y7VjxzDskBBAYKAQREGxm03EcENRbJAQQEXA4D/ZwBjrEERBsYmwiLEqoSXAID/54CAqVk3DcU3BIRAEwQEAINXxACFB8IHwYMjFvQAk7f3A4HHk4cE9IHnTT8jFgQAskAiRJJEQQGCgEERBsYTBwAMYxrlABMFsA1lNxMFwA2yQEEBeb8TB7AN4xvl/lE/EwXQDfW3QREixCbCBsYqhLMEtQBjF5QAskAiRJJEQQGCgANFBAAFBE0/7bd1cSLFJsPO3tLc1toGx0rBEwEBgBMBAYCqhDcKhEAoCC6EhWqXAID/54BAEhMKCgCTCQEHFeQoACwIlwCA/+eAYBEoAMFFUT8BRYViFpG6QCpEmkQKSfZZZlrWWklhgoAiiWPzigAFaYNHSgBKhs6FJoWJz6k+SobOhSgIlwCA/+eAAA3KlDMEJEFtt5cAgP/ngECoE3X1D3ndEwUwBnW3EwUADMm1NXEizU7HUsVaweLcBs8my0rJVsPe3hMBAYATAQGAqokuijKLNowCwgU9gBi3BwIAGeGTBwACPoWXAID/54AgBIVnY+xnDygItwqEQJcAgP/ngGAFAUmTigoAgytE+WNoeQtj7UsDZaCzBCpBY3ObANqEg8dKACaGooVOhZ3HbTStP6aFIoV9NY0/JoaihSgIlwCA/+eAYAGmmSaZY35JAbMHeUHj4of9AaiXAID/54AAnBN19Q9p1SMsBPiBRPlbowkE+BMFMQCXAID/54AginX5A0U0+SwA7/C/jJMXBQFjwgcCk7dEAJHPhWeThwcHppeKl5OHB4CThweAI4qn+IUEfb/jHnX7kUfjiPT0KAAsCJcAgP/ngID5xTXBRSgAET3hPRU7kwcAAhnBtwcCAD6FlwCA/+eAwPSFYhaR+kBqRNpESkm6SSpKmkoKS/ZbZlwNYYKAt1dBSTVxk4f3hAFFBs8izSbLSslOx1LFVsNawd7e4tzm2urY7tY+3pcAgP/ngECFyTkRzbdnCWCTh8cQmEO3BoRAI6TmALcGAwBVj5jDVTkFzbcnC2A3R9hQk4eHwRMHF6qYw7cmC2AjoAbAI6AHAJOHBsKYwxOHxsEUQzcGBADRjhTDI6AHALcHhEA3N4VAk4cHABMHR7shoCOgBwCRB+Pt5/4BNZFFaBgVO+U7t7eEQJOHR7Khar6aI6D6CDcJhEC3B4BAEwkJAJOHBw8jIPkABTljCwUUtwcBYBMHEAIjrOcMhUVFRZcAgP/ngADhtwWAQAFGk4UFAEVFlwCA/+eAQOK39wBgEUeYyzcFAgCXAID/54CA4bcXCWCIX4FFcYlhFRM1FQCXAID/54DAh7cHAEADp0cBhUdj/ecC4Uc+wAFHgUcCwpMIwQQBSIFGAUaTBfAJEUXv8P+Cg0fhBBOHd/4TN3cBYxQHDpO3lwNjgAcOgUdBZiMC+QATBwAQkwf2/4VmtwUABAFFl/B//+eAgHm3hIRAtzeFQJOEhAGTh0fBDWs+1Cabg6fKCPXfA6TKCIVHI6YKCCMC8QSDRxQACUcjE+EEowLxBILETUdjgucIUUdjgOcIKUdjnucAg0c0AANHJACiB9mPEUdjlecAHEScQ77EdTGhRcgAxTaDRzQAA0ckAKIH2Y8RZ0EHY3b3BBMFsA2JPhMFwA2xNhMF4A6ZNr05Sbe3BYBAAUaThQUEFUWXAID/54CgzrcHAGDYRxMFAAITZxcQ2MfJtYVHFbfJRyMT8QR5vwNHFADRRmPn5gKFRmPm5gABSpMJ8A9BrHkXE3f3D8lG4+jm/rc2hUAKB5OGhrs2lxhDAoeTBgcDk/b2DxFG42nW/BMH9wITd/cPjUZj7eYEtzaFQAoHk4ZGwDaXGEMChxMHQAJjlucYgsSdSQFFRTQBRdU00T7JPqFFyAD9GRE245YJ/gFKgUk5rJXr8ACBRQFFl/B//+eAYFgV4dFF6ADNNIFJMaiFSYHvl/B//+eAIF6zOaAAKaAhR2OF5wCFSQFK1aIDKoQAgynEALNnOgHSB/X37/C/hX3xTpqFS2OICQAzBjpBkxcGAcGDoevBawVMwXxj7TsJhUtjhwkIg0dJADMGOkHxyzLO7/BP4Jfwf//ngKBWckZewgLAgUgBSIFHAUeTBgACkwUQAhVF7/DP35OJCYCTiQmAwbeDR0kAncsyzu/wr9yX8H//54AAU3JGXsICwIFIAUiBRwFHkwYAApMFEAIVRe/wL9yTiQmAk4kJgK23E1XGAJfwf//ngCBTbdWTCVADszkwARW/g0dJADMGOkGFyzLO7/BP15fwf//ngKBNckZiwgLAgUgBSIFHAUeTBgACkwXADRVF7/DP1uaZBb8TVQYBl/B//+eAYE5l2ZMJYANFvxNVxgCX8H//54DgTDHVcb8hR+OM5+gBSpMJAAxFqEFHzb9BR4VJ45Dn7ExECERFMmW1QUeFSeOY5+oYSJFnY+/nIkxICETv8M/1ebVBR4VJ45vn6BxIEWdjYvciWERMSAhEs4nnAu/wz/O3h4RAk4eHAQ1nI6wHALqXI6Q3sam9N4eEQBMHhwGDRgcAY4YGGBREwReTCQAMY5T2AIMpRwEBR5MG8A5jQvcGg0dUAANHRAABSqIH2Y8DR2QAQgddj4NHdADiB9mPY572GhP1+Q/v8N+KE3X6D+/wX4rv8D+Z45oJyINHFABJR2No9xoJR+Ny98j1F5P39w89R+Ns98YiV4oHupecQ4KHMwbkAANGhgEFB7GOQb+3h4RAk4eHAQPHBwB1y9hHYxEHFoOpRwEjgAcATbthR2OQ5wJcTBhMVEgQSExECESX8H//54BgOiqKszmgAJ2/AUqFSYW/EUeFSeOS59i3lgBguF7ld/0XBWZ9j1GPCES43reWAGC4VoFFfY9Rj7jWt5YAYPhefY9Rj/jet5YAYPhS+Y/Rj/zSl/B//+eA4DwFsxP39wDjFAfmk9tHAJMJhAABSn1c43Z6zwOlyQCX8H//54BAHwOniQCDpkkAA6YJAPmOYweHARxCE0f3/32P2Y4UwgUKwQn5txFHOb1BR4VJ45bnzhxEWEgjKvkAIyjpAH25AycJAROGB/8R5wHOAUqTCWAMfbWDJkkBY+fGBo2L45YH3oMmSQGBRYFHCaizBfQAiE2zBfcAkQeIwYVF4+jH/uOPBcSdjj6XIyrZACMo6QC5sSFHhUnjkufIgylJAWOECQCTCYAMIyoJACMoCQAVuwFKkwkgDKm1kwkQDJG1AUqTCYAMNb0BSpMJkAwVvRMHIA1jjOcQEwdADeOX56wDSjQAg0ckACIKM2r6AJfwf//ngCAfg6nEAEEaY3M6AdKJ44QJqgOqRABhBE6aE1rKAJxIY1XwAJxEY1z6Du/wL6J13YNHSQADqkQAY4UHHrNnOgG9i2OaBxKX8H//54BgGrcnAGAjogc0l/B//+eA4BzOi2MXBRC3JwBgk4cHND7OtycAYJOHBzA+0LcnAGCTh4c0tywAYJMN8AM+0pOMzDQFTBN1+gNB6RMNAARj6X0J/Uczs3cBEx1DAEENSaAJZRMFBXGDKcQAAESX8H//54BABLcHAGDYS7cGAAHBFpNXRwESB3WPvYvZj7OHNwMBRbPVhwKX8H//54CgBRMFgD6X8H//54DgAMGyVEgQSExECETv8G/rTbqDRTQAg0ckABMFhAGiBd2NwRXv8I/Aabrv8C+p9b2Td/oBQU2123JHk1ddQGqGHMOCV6KFPpWXUIP/54CgsJJXI6BHASOgjAHv8I+SNycAYOFngUYTB4c1CUaThwdqDENjjsUAY5r2AJfwf//ngCAIkwdADNzIeaCFBtW344b2/jbWl/B//+eAgAW3JwBgslYjqIc1E4eHNeFnDUaThwdqDENjhsUA44H2/IUG1b/jjfb6l/B//+eAgAIV7RMYPQCBR1KGYsICwIFIfRgBR5MGAALJRRFF7/Bvi7cnAGAjqoc1s4urQWqUaprjkAvql/B//+eAwP4qzpfwf//ngCD/ckU99dxAzpfcwNxEs4c3QdzEl/B//+eAgP1ZuE6GooVShZfwf//ngMD74b+DSTQAg0ckAKIJs+n5ANxEwRmB55O3WQCVyzc9hUC3i4RAtwyEQGEEBUoTDU27k4uLAROMjAFjhgkA3ESZw2NMQAFjVQoIkwdwDBmgkweQDNzIb/A/gwMoi7CDJw0AzsAzuAkBBgizh/tABQi+xkLO7/DvkAMnDQBySDeFhECihfwA4oaQABMFBQOX8H//54AA8IZHAyeLsIMlDQCziflAHY8+lLZHIyTrsCqKvpUjIL0A4XezhYVBrpeRwy39E4WMAe/wz6IjII0BtbdjHAr63ERjiQf6kweADJ2/HERjkwf67/DPtAllEwUFcZfwf//ngODd7/BPsJfwf//ngKDib/BP+EBEYw8E9u/wT7ITBYA+l/B//+eAgNvv8O+tApRv8E/27/BPrfpAakTaREpJukkqSppKCkv2W2Zc1lxGXbZdDWGCgA==",
|
|
4
4
|
"text_start": 1082130432,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "GACEQLQMgEACDYBAmg2AQHgOgEDgDoBAjg6AQAgLgEAsDoBAdA6AQLgNgEC4CoBA4A2AQLgKgECSDIBAzgyAQAINgECaDYBApAyAQDILgEBgC4BAoAyAQJYSgEACDYBARhCAQE4SgED2CYBAdhKAQPYJgED2CYBA9gmAQPYJgED2CYBA9gmAQPYJgED2CYBA7A+AQPYJgEByEYBAThKAQA==",
|
|
6
|
+
"data_start": 1082469300,
|
|
7
7
|
"bss_start": 1082392576
|
|
8
8
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entry": 1341458758,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1341456384,
|
|
5
|
+
"data": "YAD2T4YO9U/UDvVPcg/1T1gQ9U+yEPVPahD1T7gM9U8MEPVPVBD1T5AP9U9oDPVPuA/1T2gM9U9iDvVPoA71T9QO9U9yD/VPdA71T+IM9U8WDfVPcA71T5AU9U/UDvVPJhL1T1AU9U8MC/VPdBT1TwwL9U8MC/VPDAv1TwwL9U8MC/VPDAv1TwwL9U8MC/VPxBH1TwwL9U9sE/VPUBT1Tw==",
|
|
6
|
+
"data_start": 1341598716,
|
|
7
|
+
"bss_start": 1341521920
|
|
8
|
+
}
|
package/dist/stubs/index.d.ts
CHANGED
package/dist/stubs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4 } from "../const";
|
|
2
2
|
import { toByteArray } from "../util";
|
|
3
|
-
export const getStubCode = async (chipFamily) => {
|
|
3
|
+
export const getStubCode = async (chipFamily, chipRevision) => {
|
|
4
4
|
let stubcode;
|
|
5
5
|
if (chipFamily == CHIP_FAMILY_ESP32) {
|
|
6
6
|
stubcode = await import("./esp32.json");
|
|
@@ -33,7 +33,13 @@ export const getStubCode = async (chipFamily) => {
|
|
|
33
33
|
stubcode = await import("./esp32h2.json");
|
|
34
34
|
}
|
|
35
35
|
else if (chipFamily == CHIP_FAMILY_ESP32P4) {
|
|
36
|
-
|
|
36
|
+
// ESP32-P4: Use esp32p4r3.json for Rev. 300+, esp32p4.json for older revisions
|
|
37
|
+
if (chipRevision !== null && chipRevision !== undefined && chipRevision >= 300) {
|
|
38
|
+
stubcode = await import("./esp32p4r3.json");
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
stubcode = await import("./esp32p4.json");
|
|
42
|
+
}
|
|
37
43
|
}
|
|
38
44
|
// Base64 decode the text and data
|
|
39
45
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=1082132556,B="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",E=1082130432,w="GACEQLQMgEACDYBAmg2AQHgOgEDgDoBAjg6AQAgLgEAsDoBAdA6AQLgNgEC4CoBA4A2AQLgKgECSDIBAzgyAQAINgECaDYBApAyAQDILgEBgC4BAoAyAQJYSgEACDYBARhCAQE4SgED2CYBAdhKAQPYJgED2CYBA9gmAQPYJgED2CYBA9gmAQPYJgED2CYBA7A+AQPYJgEByEYBAThKAQA==",g=1082469300,C=1082392576,Q={entry:A,text:B,text_start:E,data:w,data_start:g,bss_start:C};export{C as bss_start,w as data,g as data_start,Q as default,A as entry,B as text,E as text_start};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=1341458758,w="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",B=1341456384,E="YAD2T4YO9U/UDvVPcg/1T1gQ9U+yEPVPahD1T7gM9U8MEPVPVBD1T5AP9U9oDPVPuA/1T2gM9U9iDvVPoA71T9QO9U9yD/VPdA71T+IM9U8WDfVPcA71T5AU9U/UDvVPJhL1T1AU9U8MC/VPdBT1TwwL9U8MC/VPDAv1TwwL9U8MC/VPDAv1TwwL9U8MC/VPxBH1TwwL9U9sE/VPUBT1Tw==",D=1341598716,Q=1341521920,C={entry:A,text:w,text_start:B,data:E,data_start:D,bss_start:Q};export{Q as bss_start,E as data,D as data_start,C as default,A as entry,w as text,B as text_start};
|