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/js/script.js
CHANGED
|
@@ -16,6 +16,7 @@ const autoscroll = document.getElementById("autoscroll");
|
|
|
16
16
|
const lightSS = document.getElementById("light");
|
|
17
17
|
const darkSS = document.getElementById("dark");
|
|
18
18
|
const darkMode = document.getElementById("darkmode");
|
|
19
|
+
const debugMode = document.getElementById("debugmode");
|
|
19
20
|
const firmware = document.querySelectorAll(".upload .firmware input");
|
|
20
21
|
const progress = document.querySelectorAll(".upload .progress-bar");
|
|
21
22
|
const offsets = document.querySelectorAll(".upload .offset");
|
|
@@ -44,6 +45,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
44
45
|
autoscroll.addEventListener("click", clickAutoscroll);
|
|
45
46
|
baudRate.addEventListener("change", changeBaudRate);
|
|
46
47
|
darkMode.addEventListener("click", clickDarkMode);
|
|
48
|
+
debugMode.addEventListener("click", clickDebugMode);
|
|
47
49
|
window.addEventListener("error", function (event) {
|
|
48
50
|
console.log("Got an uncaught error: ", event.error);
|
|
49
51
|
});
|
|
@@ -82,6 +84,10 @@ function logMsg(text) {
|
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
function debugMsg(...args) {
|
|
87
|
+
if (!debugMode.checked) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
85
91
|
function getStackTrace() {
|
|
86
92
|
let stack = new Error().stack;
|
|
87
93
|
//console.log(stack);
|
|
@@ -199,6 +205,13 @@ async function clickConnect() {
|
|
|
199
205
|
espStub = await esploader.runStub();
|
|
200
206
|
toggleUIConnected(true);
|
|
201
207
|
toggleUIToolbar(true);
|
|
208
|
+
|
|
209
|
+
// Set the selected baud rate
|
|
210
|
+
let baud = parseInt(baudRate.value);
|
|
211
|
+
if (baudRates.includes(baud)) {
|
|
212
|
+
await espStub.setBaudrate(baud);
|
|
213
|
+
}
|
|
214
|
+
|
|
202
215
|
espStub.addEventListener("disconnect", () => {
|
|
203
216
|
toggleUIConnected(false);
|
|
204
217
|
espStub = false;
|
|
@@ -240,6 +253,15 @@ async function clickDarkMode() {
|
|
|
240
253
|
saveSetting("darkmode", darkMode.checked);
|
|
241
254
|
}
|
|
242
255
|
|
|
256
|
+
/**
|
|
257
|
+
* @name clickDebugMode
|
|
258
|
+
* Change handler for the Debug Mode checkbox.
|
|
259
|
+
*/
|
|
260
|
+
async function clickDebugMode() {
|
|
261
|
+
saveSetting("debugmode", debugMode.checked);
|
|
262
|
+
logMsg("Debug mode " + (debugMode.checked ? "enabled" : "disabled"));
|
|
263
|
+
}
|
|
264
|
+
|
|
243
265
|
/**
|
|
244
266
|
* @name clickErase
|
|
245
267
|
* Click handler for the erase button.
|
|
@@ -420,6 +442,7 @@ function loadAllSettings() {
|
|
|
420
442
|
autoscroll.checked = loadSetting("autoscroll", true);
|
|
421
443
|
baudRate.value = loadSetting("baudrate", 1500000);
|
|
422
444
|
darkMode.checked = loadSetting("darkmode", false);
|
|
445
|
+
debugMode.checked = loadSetting("debugmode", true);
|
|
423
446
|
}
|
|
424
447
|
|
|
425
448
|
function loadSetting(setting, defaultValue) {
|
package/package.json
CHANGED
package/src/const.ts
CHANGED
|
@@ -176,6 +176,7 @@ export const ESP32H2_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
|
176
176
|
|
|
177
177
|
export const ESP32P4_SPI_REG_BASE = 0x5008d000;
|
|
178
178
|
export const ESP32P4_BASEFUSEADDR = 0x5012d000;
|
|
179
|
+
export const ESP32P4_EFUSE_BLOCK1_ADDR = ESP32P4_BASEFUSEADDR + 0x044;
|
|
179
180
|
export const ESP32P4_MACFUSEADDR = 0x5012d000 + 0x044;
|
|
180
181
|
export const ESP32P4_SPI_USR_OFFS = 0x18;
|
|
181
182
|
export const ESP32P4_SPI_USR1_OFFS = 0x1c;
|
|
@@ -204,6 +205,8 @@ export const SYNC_PACKET = toByteArray(
|
|
|
204
205
|
"\x07\x07\x12 UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU",
|
|
205
206
|
);
|
|
206
207
|
export const CHIP_DETECT_MAGIC_REG_ADDR = 0x40001000;
|
|
208
|
+
|
|
209
|
+
// Image Chip IDs (used by ESP32-C3 and later for chip detection)
|
|
207
210
|
// These values for the families are made up; nothing that esptool uses.
|
|
208
211
|
export const CHIP_FAMILY_ESP8266 = 0x8266;
|
|
209
212
|
export const CHIP_FAMILY_ESP32 = 0x32;
|
|
@@ -229,6 +232,22 @@ export type ChipFamily =
|
|
|
229
232
|
| typeof CHIP_FAMILY_ESP32H2
|
|
230
233
|
| typeof CHIP_FAMILY_ESP32P4;
|
|
231
234
|
|
|
235
|
+
interface ChipIdInfo {
|
|
236
|
+
name: string;
|
|
237
|
+
family: ChipFamily;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export const CHIP_ID_TO_INFO: { [chipId: number]: ChipIdInfo } = {
|
|
241
|
+
5: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
|
|
242
|
+
9: { name: "ESP32-S3", family: CHIP_FAMILY_ESP32S3 },
|
|
243
|
+
12: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
|
|
244
|
+
13: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
|
|
245
|
+
16: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
246
|
+
17: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
|
|
247
|
+
18: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
248
|
+
20: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
249
|
+
};
|
|
250
|
+
|
|
232
251
|
interface ChipInfo {
|
|
233
252
|
[magicValue: number]: {
|
|
234
253
|
name: string;
|
|
@@ -259,6 +278,8 @@ export const CHIP_DETECT_MAGIC_VALUES: ChipInfo = {
|
|
|
259
278
|
0x7211606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
|
|
260
279
|
0x97e30068: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
261
280
|
0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
281
|
+
// ESP32-P4 old revisions (< Rev. 300) - use magic value detection
|
|
282
|
+
// Rev. 300+ uses IMAGE_CHIP_ID detection instead
|
|
262
283
|
0x0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
263
284
|
0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
264
285
|
0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
|
|
@@ -282,6 +303,7 @@ export const ESP_SPI_SET_PARAMS = 0x0b;
|
|
|
282
303
|
export const ESP_SPI_ATTACH = 0x0d;
|
|
283
304
|
export const ESP_CHANGE_BAUDRATE = 0x0f;
|
|
284
305
|
export const ESP_SPI_FLASH_MD5 = 0x13;
|
|
306
|
+
export const ESP_GET_SECURITY_INFO = 0x14;
|
|
285
307
|
export const ESP_CHECKSUM_MAGIC = 0xef;
|
|
286
308
|
export const ESP_FLASH_DEFL_BEGIN = 0x10;
|
|
287
309
|
export const ESP_FLASH_DEFL_DATA = 0x11;
|
package/src/esp_loader.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="@types/w3c-web-serial" />
|
|
2
|
+
|
|
1
3
|
import {
|
|
2
4
|
CHIP_FAMILY_ESP32,
|
|
3
5
|
CHIP_FAMILY_ESP32S2,
|
|
@@ -26,6 +28,7 @@ import {
|
|
|
26
28
|
ESP_WRITE_REG,
|
|
27
29
|
ESP_SPI_ATTACH,
|
|
28
30
|
ESP_SYNC,
|
|
31
|
+
ESP_GET_SECURITY_INFO,
|
|
29
32
|
FLASH_SECTOR_SIZE,
|
|
30
33
|
FLASH_WRITE_SIZE,
|
|
31
34
|
STUB_FLASH_WRITE_SIZE,
|
|
@@ -48,6 +51,8 @@ import {
|
|
|
48
51
|
DETECTED_FLASH_SIZES,
|
|
49
52
|
CHIP_DETECT_MAGIC_REG_ADDR,
|
|
50
53
|
CHIP_DETECT_MAGIC_VALUES,
|
|
54
|
+
CHIP_ID_TO_INFO,
|
|
55
|
+
ESP32P4_EFUSE_BLOCK1_ADDR,
|
|
51
56
|
SlipReadError,
|
|
52
57
|
} from "./const";
|
|
53
58
|
import { getStubCode } from "./stubs";
|
|
@@ -59,6 +64,8 @@ import { pack, unpack } from "./struct";
|
|
|
59
64
|
export class ESPLoader extends EventTarget {
|
|
60
65
|
chipFamily!: ChipFamily;
|
|
61
66
|
chipName: string | null = null;
|
|
67
|
+
chipRevision: number | null = null;
|
|
68
|
+
chipVariant: string | null = null;
|
|
62
69
|
_efuses = new Array(4).fill(0);
|
|
63
70
|
_flashsize = 4 * 1024 * 1024;
|
|
64
71
|
debug = false;
|
|
@@ -91,7 +98,64 @@ export class ESPLoader extends EventTarget {
|
|
|
91
98
|
}
|
|
92
99
|
await this.sync();
|
|
93
100
|
|
|
94
|
-
//
|
|
101
|
+
// Detect chip type
|
|
102
|
+
await this.detectChip();
|
|
103
|
+
|
|
104
|
+
// Read the OTP data for this chip and store into this.efuses array
|
|
105
|
+
let FlAddr = getSpiFlashAddresses(this.getChipFamily());
|
|
106
|
+
let AddrMAC = FlAddr.macFuse;
|
|
107
|
+
for (let i = 0; i < 4; i++) {
|
|
108
|
+
this._efuses[i] = await this.readRegister(AddrMAC + 4 * i);
|
|
109
|
+
}
|
|
110
|
+
this.logger.log(`Chip type ${this.chipName}`);
|
|
111
|
+
//this.logger.log("FLASHID");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Detect chip type using GET_SECURITY_INFO (for newer chips) or magic value (for older chips)
|
|
116
|
+
*/
|
|
117
|
+
async detectChip() {
|
|
118
|
+
try {
|
|
119
|
+
// Try GET_SECURITY_INFO command first (ESP32-C3 and later)
|
|
120
|
+
const securityInfo = await this.getSecurityInfo();
|
|
121
|
+
const chipId = securityInfo.chipId;
|
|
122
|
+
|
|
123
|
+
const chipInfo = CHIP_ID_TO_INFO[chipId];
|
|
124
|
+
if (chipInfo) {
|
|
125
|
+
this.chipName = chipInfo.name;
|
|
126
|
+
this.chipFamily = chipInfo.family;
|
|
127
|
+
|
|
128
|
+
// Get chip revision for ESP32-P4
|
|
129
|
+
if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
|
|
130
|
+
this.chipRevision = await this.getChipRevision();
|
|
131
|
+
this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
|
|
132
|
+
|
|
133
|
+
// Set chip variant based on revision
|
|
134
|
+
if (this.chipRevision >= 300) {
|
|
135
|
+
this.chipVariant = "rev300";
|
|
136
|
+
} else {
|
|
137
|
+
this.chipVariant = "rev0";
|
|
138
|
+
}
|
|
139
|
+
this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
this.logger.debug(
|
|
143
|
+
`Detected chip via IMAGE_CHIP_ID: ${chipId} (${this.chipName})`,
|
|
144
|
+
);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this.logger.debug(
|
|
149
|
+
`Unknown IMAGE_CHIP_ID: ${chipId}, falling back to magic value detection`,
|
|
150
|
+
);
|
|
151
|
+
} catch (err) {
|
|
152
|
+
// GET_SECURITY_INFO not supported, fall back to magic value detection
|
|
153
|
+
this.logger.debug(
|
|
154
|
+
`GET_SECURITY_INFO failed, using magic value detection: ${err}`,
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Fallback: Use magic value detection for ESP8266, ESP32, ESP32-S2, and ESP32-P4 RC versions
|
|
95
159
|
let chipMagicValue = await this.readRegister(CHIP_DETECT_MAGIC_REG_ADDR);
|
|
96
160
|
let chip = CHIP_DETECT_MAGIC_VALUES[chipMagicValue >>> 0];
|
|
97
161
|
if (chip === undefined) {
|
|
@@ -105,14 +169,87 @@ export class ESPLoader extends EventTarget {
|
|
|
105
169
|
this.chipName = chip.name;
|
|
106
170
|
this.chipFamily = chip.family;
|
|
107
171
|
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
172
|
+
// For ESP32-P4 detected via magic value (old revisions), set variant
|
|
173
|
+
if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
|
|
174
|
+
this.chipRevision = await this.getChipRevision();
|
|
175
|
+
this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
|
|
176
|
+
|
|
177
|
+
if (this.chipRevision >= 300) {
|
|
178
|
+
this.chipVariant = "rev300";
|
|
179
|
+
} else {
|
|
180
|
+
this.chipVariant = "rev0";
|
|
181
|
+
}
|
|
182
|
+
this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
|
|
113
183
|
}
|
|
114
|
-
|
|
115
|
-
|
|
184
|
+
|
|
185
|
+
this.logger.debug(
|
|
186
|
+
`Detected chip via magic value: ${toHex(chipMagicValue >>> 0, 8)} (${this.chipName})`,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Get chip revision for ESP32-P4
|
|
192
|
+
*/
|
|
193
|
+
async getChipRevision(): Promise<number> {
|
|
194
|
+
if (this.chipFamily !== CHIP_FAMILY_ESP32P4) {
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Read from EFUSE_BLOCK1 to get chip revision
|
|
199
|
+
// Word 2 contains revision info for ESP32-P4
|
|
200
|
+
const word2 = await this.readRegister(ESP32P4_EFUSE_BLOCK1_ADDR + 8);
|
|
201
|
+
|
|
202
|
+
// Minor revision: bits [3:0]
|
|
203
|
+
const minorRev = word2 & 0x0f;
|
|
204
|
+
|
|
205
|
+
// Major revision: bits [23] << 2 | bits [5:4]
|
|
206
|
+
const majorRev = (((word2 >> 23) & 1) << 2) | ((word2 >> 4) & 0x03);
|
|
207
|
+
|
|
208
|
+
// Revision is major * 100 + minor
|
|
209
|
+
return majorRev * 100 + minorRev;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Get security info including chip ID (ESP32-C3 and later)
|
|
214
|
+
*/
|
|
215
|
+
async getSecurityInfo(): Promise<{
|
|
216
|
+
flags: number;
|
|
217
|
+
flashCryptCnt: number;
|
|
218
|
+
keyPurposes: number[];
|
|
219
|
+
chipId: number;
|
|
220
|
+
apiVersion: number;
|
|
221
|
+
}> {
|
|
222
|
+
const [_, responseData] = await this.checkCommand(
|
|
223
|
+
ESP_GET_SECURITY_INFO,
|
|
224
|
+
[],
|
|
225
|
+
0,
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
if (responseData.length < 20) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
`Invalid security info response length: ${responseData.length}`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const flags = unpack("<I", responseData.slice(0, 4))[0];
|
|
235
|
+
const flashCryptCnt = responseData[4];
|
|
236
|
+
const keyPurposes = Array.from(responseData.slice(5, 12));
|
|
237
|
+
const chipId =
|
|
238
|
+
responseData.length >= 16
|
|
239
|
+
? unpack("<I", responseData.slice(12, 16))[0]
|
|
240
|
+
: 0;
|
|
241
|
+
const apiVersion =
|
|
242
|
+
responseData.length >= 20
|
|
243
|
+
? unpack("<I", responseData.slice(16, 20))[0]
|
|
244
|
+
: 0;
|
|
245
|
+
|
|
246
|
+
return {
|
|
247
|
+
flags,
|
|
248
|
+
flashCryptCnt,
|
|
249
|
+
keyPurposes,
|
|
250
|
+
chipId,
|
|
251
|
+
apiVersion,
|
|
252
|
+
};
|
|
116
253
|
}
|
|
117
254
|
|
|
118
255
|
/**
|
|
@@ -520,6 +657,8 @@ export class ESPLoader extends EventTarget {
|
|
|
520
657
|
} else {
|
|
521
658
|
await this.reconfigurePort(baud);
|
|
522
659
|
}
|
|
660
|
+
|
|
661
|
+
this.logger.log(`Changed baud rate to ${baud}`);
|
|
523
662
|
}
|
|
524
663
|
|
|
525
664
|
async reconfigurePort(baud: number) {
|
|
@@ -536,8 +675,6 @@ export class ESPLoader extends EventTarget {
|
|
|
536
675
|
|
|
537
676
|
// Restart Readloop
|
|
538
677
|
this.readLoop();
|
|
539
|
-
|
|
540
|
-
this.logger.log(`Changed baud rate to ${baud}`);
|
|
541
678
|
} catch (e) {
|
|
542
679
|
console.error(e);
|
|
543
680
|
throw new Error(`Unable to change the baud rate to ${baud}: ${e}`);
|
|
@@ -1105,7 +1242,10 @@ export class ESPLoader extends EventTarget {
|
|
|
1105
1242
|
}
|
|
1106
1243
|
|
|
1107
1244
|
async runStub(): Promise<EspStubLoader> {
|
|
1108
|
-
const stub: Record<string, any> = await getStubCode(
|
|
1245
|
+
const stub: Record<string, any> = await getStubCode(
|
|
1246
|
+
this.chipFamily,
|
|
1247
|
+
this.chipRevision,
|
|
1248
|
+
);
|
|
1109
1249
|
|
|
1110
1250
|
// We're transferring over USB, right?
|
|
1111
1251
|
let ramBlock = USB_RAM_BLOCK;
|
|
@@ -1192,7 +1332,7 @@ class EspStubLoader extends ESPLoader {
|
|
|
1192
1332
|
blocksize: number,
|
|
1193
1333
|
offset: number,
|
|
1194
1334
|
): Promise<any> {
|
|
1195
|
-
let stub = await getStubCode(this.chipFamily);
|
|
1335
|
+
let stub = await getStubCode(this.chipFamily, this.chipRevision);
|
|
1196
1336
|
let load_start = offset;
|
|
1197
1337
|
let load_end = offset + size;
|
|
1198
1338
|
console.log(load_start, load_end);
|
package/src/index.ts
CHANGED
package/src/stubs/esp32c5.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "QRG39wBgIsQmwkrAEUcGxrcEhEDYyz6JM4TnAJOEBAAcQJGLmeeyQCJEkkQCSUEBgoADJQkAnEATdfUPgpfNtwERtwcAYE7Gg6mHAErINwmEQCbKUsQGziLMk4THAT6KEwkJAIBAE3T0PxnIAyUKAIMnCQB9FBN19Q+Cl2X43bfyQGJEtwcAYCOoNwHSREJJskkiSgVhgoCTBwAMkEEqh2MY9QCFRwXGI6AFAHlVgoCFRmMH1gAJRWMNpgB9VYKAQgWTB7ANQYVjE/cCiUecwfW3EwbADWMVxwCUwT6FgoCTB9AN4xz3/
|
|
2
|
+
"entry": 1082132556,
|
|
3
|
+
"text": "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",
|
|
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/src/stubs/index.ts
CHANGED
|
@@ -30,7 +30,10 @@ interface Stub {
|
|
|
30
30
|
data_start: number;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export const getStubCode = async (
|
|
33
|
+
export const getStubCode = async (
|
|
34
|
+
chipFamily: ChipFamily,
|
|
35
|
+
chipRevision?: number | null,
|
|
36
|
+
): Promise<Stub> => {
|
|
34
37
|
let stubcode!: LoadedStub;
|
|
35
38
|
|
|
36
39
|
if (chipFamily == CHIP_FAMILY_ESP32) {
|
|
@@ -54,7 +57,12 @@ export const getStubCode = async (chipFamily: ChipFamily): Promise<Stub> => {
|
|
|
54
57
|
} else if (chipFamily == CHIP_FAMILY_ESP32H2) {
|
|
55
58
|
stubcode = await import("./esp32h2.json");
|
|
56
59
|
} else if (chipFamily == CHIP_FAMILY_ESP32P4) {
|
|
57
|
-
|
|
60
|
+
// ESP32-P4: Use esp32p4r3.json for Rev. 300+, esp32p4.json for older revisions
|
|
61
|
+
if (chipRevision !== null && chipRevision !== undefined && chipRevision >= 300) {
|
|
62
|
+
stubcode = await import("./esp32p4r3.json");
|
|
63
|
+
} else {
|
|
64
|
+
stubcode = await import("./esp32p4.json");
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
|
|
60
68
|
// Base64 decode the text and data
|
package/tsconfig.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var A=1082131984,B="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",E=1082130432,w="FACEQJAJgEDsCYBAfAqAQF4LgEDKC4BAeAuAQH4IgEAaC4BAWguAQJgKgEAuCIBAzAqAQC4IgEBqCYBAsAmAQOwJgEB8CoBAfAmAQKYIgEDaCIBAeAmAQB4OgEDsCYBA5AyAQNYNgEBuB4BA/g2AQG4HgEBuB4BAbgeAQG4HgEBuB4BAbgeAQG4HgEBuB4BAgAyAQG4HgEACDYBA1g2AQA==",g=1082469296,Q=1082392576,c={entry:A,text:B,text_start:E,data:w,data_start:g,bss_start:Q};export{Q as bss_start,w as data,g as data_start,c as default,A as entry,B as text,E as text_start};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var A=1082131984,B="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",E=1082130432,w="FACEQJAJgEDsCYBAfAqAQF4LgEDKC4BAeAuAQH4IgEAaC4BAWguAQJgKgEAuCIBAzAqAQC4IgEBqCYBAsAmAQOwJgEB8CoBAfAmAQKYIgEDaCIBAeAmAQB4OgEDsCYBA5AyAQNYNgEBuB4BA/g2AQG4HgEBuB4BAbgeAQG4HgEBuB4BAbgeAQG4HgEBuB4BAgAyAQG4HgEACDYBA1g2AQA==",g=1082469296,Q=1082392576,c={entry:A,text:B,text_start:E,data:w,data_start:g,bss_start:Q};export{Q as bss_start,w as data,g as data_start,c as default,A as entry,B as text,E as text_start};
|