tasmota-webserial-esptool 6.5.3 → 7.0.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/.vscode/settings.json +2 -0
- package/README.md +4 -3
- package/READ_FLASH_FEATURE.md +130 -0
- package/css/light.css +11 -0
- package/css/style.css +213 -45
- package/dist/const.d.ts +42 -3
- package/dist/const.js +102 -4
- package/dist/esp_loader.d.ts +27 -3
- package/dist/esp_loader.js +376 -17
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -2
- package/dist/partition.d.ts +26 -0
- package/dist/partition.js +129 -0
- package/dist/stubs/esp32.json +4 -4
- package/dist/stubs/esp32c2.json +4 -4
- package/dist/stubs/esp32c3.json +4 -4
- package/dist/stubs/esp32c5.json +4 -4
- package/dist/stubs/esp32c6.json +4 -4
- package/dist/stubs/esp32c61.json +4 -4
- package/dist/stubs/esp32h2.json +4 -4
- package/dist/stubs/esp32p4.json +4 -4
- package/dist/stubs/esp32p4r3.json +4 -4
- package/dist/stubs/esp32s2.json +4 -4
- package/dist/stubs/esp32s3.json +4 -4
- package/dist/stubs/esp8266.json +3 -3
- package/dist/stubs/index.d.ts +1 -1
- package/dist/stubs/index.js +7 -1
- package/dist/web/esp32-CijhsJH1.js +1 -0
- package/dist/web/esp32c2-C17SM4gO.js +1 -0
- package/dist/web/esp32c3-DxRGijbg.js +1 -0
- package/dist/web/esp32c5-3mDOIGa4.js +1 -0
- package/dist/web/esp32c6-h6U0SQTm.js +1 -0
- package/dist/web/esp32c61-BKtexhPZ.js +1 -0
- package/dist/web/esp32h2-RtuWSEmP.js +1 -0
- package/dist/web/esp32p4-5nkIjxqJ.js +1 -0
- package/dist/web/esp32p4r3-CpHBYEwI.js +1 -0
- package/dist/web/esp32s2-IiDBtXxo.js +1 -0
- package/dist/web/esp32s3-6yv5yxum.js +1 -0
- package/dist/web/esp8266-CUwxJpGa.js +1 -0
- package/dist/web/index.js +1 -1
- package/index.html +158 -34
- package/js/modules/esp32-CijhsJH1.js +1 -0
- package/js/modules/esp32c2-C17SM4gO.js +1 -0
- package/js/modules/esp32c3-DxRGijbg.js +1 -0
- package/js/modules/esp32c5-3mDOIGa4.js +1 -0
- package/js/modules/esp32c6-h6U0SQTm.js +1 -0
- package/js/modules/esp32c61-BKtexhPZ.js +1 -0
- package/js/modules/esp32h2-RtuWSEmP.js +1 -0
- package/js/modules/esp32p4-5nkIjxqJ.js +1 -0
- package/js/modules/esp32p4r3-CpHBYEwI.js +1 -0
- package/js/modules/esp32s2-IiDBtXxo.js +1 -0
- package/js/modules/esp32s3-6yv5yxum.js +1 -0
- package/js/modules/esp8266-CUwxJpGa.js +1 -0
- package/js/modules/esptool.js +1 -1
- package/js/script.js +456 -11
- package/package.json +6 -6
- package/src/const.ts +109 -5
- package/src/esp_loader.ts +491 -18
- package/src/index.ts +3 -1
- package/src/partition.ts +155 -0
- package/src/stubs/README.md +1 -1
- package/src/stubs/esp32.json +4 -4
- package/src/stubs/esp32c2.json +4 -4
- package/src/stubs/esp32c3.json +4 -4
- package/src/stubs/esp32c5.json +4 -4
- package/src/stubs/esp32c6.json +4 -4
- package/src/stubs/esp32c61.json +4 -4
- package/src/stubs/esp32h2.json +4 -4
- package/src/stubs/esp32p4.json +4 -4
- package/src/stubs/esp32p4r3.json +4 -4
- package/src/stubs/esp32s2.json +4 -4
- package/src/stubs/esp32s3.json +4 -4
- package/src/stubs/esp8266.json +3 -3
- package/src/stubs/index.ts +14 -2
- package/BUGFIX_GET_SECURITY_INFO.md +0 -126
- package/IMPLEMENTATION_SUMMARY.md +0 -232
- package/SECURITY_INFO_EXPLANATION.md +0 -145
- package/dist/web/esp32-BNIFdu1P.js +0 -1
- package/dist/web/esp32c2-BqxquOKw.js +0 -1
- package/dist/web/esp32c3-BOOqe8me.js +0 -1
- package/dist/web/esp32c5-mcj52-K1.js +0 -1
- package/dist/web/esp32c6-Cg5qYgg7.js +0 -1
- package/dist/web/esp32c61-CzCdsydk.js +0 -1
- package/dist/web/esp32h2-DZa_lpff.js +0 -1
- package/dist/web/esp32p4-DyGqUAeZ.js +0 -1
- package/dist/web/esp32p4r3-Cle9QJmZ.js +0 -1
- package/dist/web/esp32s2-Bk4mqADi.js +0 -1
- package/dist/web/esp32s3-Df3OUCOC.js +0 -1
- package/dist/web/esp8266-CQFcqJ_a.js +0 -1
- package/js/modules/esp32-BNIFdu1P.js +0 -1
- package/js/modules/esp32c2-BqxquOKw.js +0 -1
- package/js/modules/esp32c3-BOOqe8me.js +0 -1
- package/js/modules/esp32c5-mcj52-K1.js +0 -1
- package/js/modules/esp32c6-Cg5qYgg7.js +0 -1
- package/js/modules/esp32c61-CzCdsydk.js +0 -1
- package/js/modules/esp32h2-DZa_lpff.js +0 -1
- package/js/modules/esp32p4-DyGqUAeZ.js +0 -1
- package/js/modules/esp32p4r3-Cle9QJmZ.js +0 -1
- package/js/modules/esp32s2-Bk4mqADi.js +0 -1
- package/js/modules/esp32s3-Df3OUCOC.js +0 -1
- package/js/modules/esp8266-CQFcqJ_a.js +0 -1
package/src/stubs/esp32s2.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "CAAAYBwAAGBIAP0/EAAAYDZBAIH7/1H7/8AgAGgIwCAAeAVwcJSc5ww0MEQBgfb/wCAAqASICHLH/6CgdOAIAFaX/sb1/wAAgfH/
|
|
2
|
+
"entry": 1073907884,
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1073905664,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "WAD9P+aLAkB7jAJAGpECQBuNAkCejAJAG40CQHSNAkB3jgJA7Y4CQJKOAkBxiwJAI44CQGyOAkCSjQJADo8CQLqNAkAOjwJAcowCQNSMAkAbjQJAdI0CQISMAkCyiwJA6I8CQNWQAkCKigJA+ZACQIqKAkCKigJAiooCQIqKAkCKigJAiooCQIqKAkCKigJAb48CQIqKAkAEkAJA1ZACQA==",
|
|
6
|
+
"data_start": 1073622016,
|
|
7
7
|
"bss_start": 1073545216
|
|
8
8
|
}
|
package/src/stubs/esp32s3.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "FIADYACAA2BMAMo/BIADYDZBAIH7/wxJcf3/wCAAmQgGBQAAAIH3/8AgAKgIgfb/oKB0iAjgCADAIACIByfo5B3wAAAIAABgHAAAYBAAAGA2QQCB/P9R/P/AIABoCMAgAHgFcHCUnOcMNDBEAYHm/8AgAKgEiAhyx/+goHTgCABWl/7G9f8AAIHx/
|
|
2
|
+
"entry": 1077382292,
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1077379072,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "XADKP2KQN0A3kTdAz5U3QNeRN0BakTdA15E3QDCSN0A3kzdArZM3QFKTN0DtjzdA35I3QCyTN0BOkjdAzpM3QHaSN0DOkzdALpE3QJCRN0DXkTdAMJI3QECRN0AukDdAqJQ3QJaVN0AGjzdAtZU3QAaPN0AGjzdABo83QAaPN0AGjzdABo83QAaPN0AGjzdAL5Q3QAaPN0DElDdAlpU3QAQInwAAAAAAAAAYAQQIBQAAAAAAAAAIAQQIBgAAAAAAAAAAAQQIIQAAAAAAIAAAEQQI3AAAAAAAIAAAEQQIDAAAAAAAIAAAAQQIEgAAAAAAIAAAESAoDAAQAQAA",
|
|
6
|
+
"data_start": 1070279680,
|
|
7
7
|
"bss_start": 1070202880
|
|
8
8
|
}
|
package/src/stubs/esp8266.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"entry": 1074843652,
|
|
3
|
-
"text": "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",
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1074843648,
|
|
5
|
-
"data": "CIH+
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "CIH+PwUFBAACAwcAAwMLAOzXEEAj2BBAUdgQQO7YEECd5xBAUtkQQKjZEED02RBAnecQQLraEEA32xBA+NsQQJ3nEECd5xBAkNwQQJ3nEEBt3xBANOAQQG/gEECd5xBAnecQQAvhEECd5xBA8+EQQJniEEDY4xBAl+QQQGjlEECd5xBAnecQQJ3nEECd5xBAluYQQJ3nEECM5xBAyN0QQMHYEEDa5RBA4doQQDPaEECd5xBAIOcQQGfnEECd5xBAnecQQJ3nEECd5xBAnecQQJ3nEECd5xBAnecQQFraEECX2hBA8uUQQAEAAAACAAAAAwAAAAQAAAAFAAAABwAAAAkAAAANAAAAEQAAABkAAAAhAAAAMQAAAEEAAABhAAAAgQAAAMEAAAABAQAAgQEAAAECAAABAwAAAQQAAAEGAAABCAAAAQwAAAEQAAABGAAAASAAAAEwAAABQAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAAAAAAAAAAAAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAANAAAADwAAABEAAAATAAAAFwAAABsAAAAfAAAAIwAAACsAAAAzAAAAOwAAAEMAAABTAAAAYwAAAHMAAACDAAAAowAAAMMAAADjAAAAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAMAAAAEAAAABAAAAAQAAAAEAAAABQAAAAUAAAAFAAAABQAAAAAAAAAAAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AAQEAAAEAAAAEAAAA",
|
|
6
|
+
"data_start": 1073720492,
|
|
7
7
|
"bss_start": 1073643776
|
|
8
8
|
}
|
package/src/stubs/index.ts
CHANGED
|
@@ -10,7 +10,10 @@ import {
|
|
|
10
10
|
CHIP_FAMILY_ESP32C6,
|
|
11
11
|
CHIP_FAMILY_ESP32C61,
|
|
12
12
|
CHIP_FAMILY_ESP32H2,
|
|
13
|
-
|
|
13
|
+
CHIP_FAMILY_ESP32H4,
|
|
14
|
+
CHIP_FAMILY_ESP32H21,
|
|
15
|
+
CHIP_FAMILY_ESP32P4,
|
|
16
|
+
CHIP_FAMILY_ESP32S31
|
|
14
17
|
} from "../const";
|
|
15
18
|
import { toByteArray } from "../util";
|
|
16
19
|
|
|
@@ -33,9 +36,18 @@ interface Stub {
|
|
|
33
36
|
export const getStubCode = async (
|
|
34
37
|
chipFamily: ChipFamily,
|
|
35
38
|
chipRevision?: number | null,
|
|
36
|
-
): Promise<Stub> => {
|
|
39
|
+
): Promise<Stub | null> => {
|
|
37
40
|
let stubcode!: LoadedStub;
|
|
38
41
|
|
|
42
|
+
// Chips without stub support yet
|
|
43
|
+
if (
|
|
44
|
+
chipFamily == CHIP_FAMILY_ESP32H4 ||
|
|
45
|
+
chipFamily == CHIP_FAMILY_ESP32H21 ||
|
|
46
|
+
chipFamily == CHIP_FAMILY_ESP32S31
|
|
47
|
+
) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
39
51
|
if (chipFamily == CHIP_FAMILY_ESP32) {
|
|
40
52
|
stubcode = await import("./esp32.json");
|
|
41
53
|
} else if (chipFamily == CHIP_FAMILY_ESP32S2) {
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
# Bugfix: GET_SECURITY_INFO für ESP32-C3
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
|
|
5
|
-
ESP32-C3 v0.4 (und andere moderne Chips) sollten `GET_SECURITY_INFO` unterstützen, aber es schlug mit einer leeren Antwort fehl:
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
GET_SECURITY_INFO failed, using magic value detection: Error: Invalid security info response length: 0
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Ursache
|
|
12
|
-
|
|
13
|
-
Das Problem lag in der `checkCommand()` Funktion:
|
|
14
|
-
|
|
15
|
-
1. `GET_SECURITY_INFO` wird während `detectChip()` aufgerufen
|
|
16
|
-
2. Zu diesem Zeitpunkt ist `chipFamily` noch **nicht gesetzt**
|
|
17
|
-
3. `checkCommand()` konnte die Status-Länge nicht korrekt bestimmen
|
|
18
|
-
4. Es fiel in den `else` Block und verwendete die falsche Status-Länge
|
|
19
|
-
5. Die Daten wurden falsch geparst → leere `responseData`
|
|
20
|
-
|
|
21
|
-
### Code-Flow (vorher):
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
async detectChip() {
|
|
25
|
-
// chipFamily ist noch NICHT gesetzt!
|
|
26
|
-
const securityInfo = await this.getSecurityInfo();
|
|
27
|
-
// ↓
|
|
28
|
-
// checkCommand(ESP_GET_SECURITY_INFO, ...)
|
|
29
|
-
// ↓
|
|
30
|
-
// chipFamily ist undefined
|
|
31
|
-
// ↓
|
|
32
|
-
// statusLen wird falsch berechnet
|
|
33
|
-
// ↓
|
|
34
|
-
// data wird falsch geparst
|
|
35
|
-
// ↓
|
|
36
|
-
// responseData.length === 0
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Lösung
|
|
41
|
-
|
|
42
|
-
In `checkCommand()` wurde eine spezielle Behandlung für `GET_SECURITY_INFO` hinzugefügt:
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
async checkCommand(opcode, buffer, checksum, timeout) {
|
|
46
|
-
// ...
|
|
47
|
-
|
|
48
|
-
let statusLen = 0;
|
|
49
|
-
|
|
50
|
-
if (this.IS_STUB || this.chipFamily == CHIP_FAMILY_ESP8266) {
|
|
51
|
-
statusLen = 2;
|
|
52
|
-
} else if ([CHIP_FAMILY_ESP32, ...].includes(this.chipFamily)) {
|
|
53
|
-
statusLen = 4;
|
|
54
|
-
} else {
|
|
55
|
-
// NEU: Wenn chipFamily noch nicht gesetzt ist (während detectChip)
|
|
56
|
-
if (opcode === ESP_GET_SECURITY_INFO) {
|
|
57
|
-
statusLen = 4; // Moderne Chips verwenden 4-Byte Status
|
|
58
|
-
} else if ([2, 4].includes(data.length)) {
|
|
59
|
-
statusLen = data.length;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// ...
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Ergebnis
|
|
68
|
-
|
|
69
|
-
Nach dem Fix sollte ESP32-C3 v0.4 (und andere moderne Chips) korrekt erkannt werden:
|
|
70
|
-
|
|
71
|
-
### Vorher:
|
|
72
|
-
```
|
|
73
|
-
[debug] GET_SECURITY_INFO failed, using magic value detection: Error: Invalid security info response length: 0
|
|
74
|
-
[debug] Detected chip via magic value: 0x1B31506F (ESP32-C3)
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Nachher (erwartet):
|
|
78
|
-
```
|
|
79
|
-
[debug] Detected chip via IMAGE_CHIP_ID: 5 (ESP32-C3)
|
|
80
|
-
Chip type ESP32-C3
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Betroffene Chips
|
|
84
|
-
|
|
85
|
-
Dieser Fix verbessert die Erkennung für:
|
|
86
|
-
|
|
87
|
-
- ✅ ESP32-C3 (alle Revisionen mit GET_SECURITY_INFO Support)
|
|
88
|
-
- ✅ ESP32-S3
|
|
89
|
-
- ✅ ESP32-C6
|
|
90
|
-
- ✅ ESP32-C61
|
|
91
|
-
- ✅ ESP32-H2
|
|
92
|
-
- ✅ ESP32-C5
|
|
93
|
-
- ✅ ESP32-P4 Rev. 300+
|
|
94
|
-
|
|
95
|
-
## Fallback bleibt erhalten
|
|
96
|
-
|
|
97
|
-
Der Fallback auf Magic Value Detection bleibt weiterhin funktionsfähig für:
|
|
98
|
-
|
|
99
|
-
- ESP8266
|
|
100
|
-
- ESP32
|
|
101
|
-
- ESP32-S2
|
|
102
|
-
- Ältere ROM-Versionen, die GET_SECURITY_INFO nicht unterstützen
|
|
103
|
-
|
|
104
|
-
## Testing
|
|
105
|
-
|
|
106
|
-
### Zu testen:
|
|
107
|
-
- [ ] ESP32-C3 v0.4 → sollte via IMAGE_CHIP_ID erkannt werden
|
|
108
|
-
- [ ] ESP32-S3 → sollte via IMAGE_CHIP_ID erkannt werden
|
|
109
|
-
- [ ] ESP32-P4 Rev. 300+ → sollte via IMAGE_CHIP_ID erkannt werden
|
|
110
|
-
- [ ] ESP8266 → sollte via Magic Value erkannt werden (Fallback)
|
|
111
|
-
- [ ] ESP32 → sollte via Magic Value erkannt werden (Fallback)
|
|
112
|
-
|
|
113
|
-
### Erwartetes Verhalten:
|
|
114
|
-
|
|
115
|
-
**Moderne Chips (mit GET_SECURITY_INFO):**
|
|
116
|
-
```
|
|
117
|
-
[debug] Detected chip via IMAGE_CHIP_ID: X (ESP32-XX)
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
**Ältere Chips (ohne GET_SECURITY_INFO):**
|
|
121
|
-
```
|
|
122
|
-
[debug] GET_SECURITY_INFO failed, using magic value detection
|
|
123
|
-
[debug] Detected chip via magic value: 0xXXXXXXXX (ESP32-XX)
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
Beide Wege führen zur korrekten Chip-Erkennung! ✅
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
# Implementation Summary: ESP32-P4 Chip Variant Support
|
|
2
|
-
|
|
3
|
-
## ✅ Erfolgreich implementiert
|
|
4
|
-
|
|
5
|
-
### Ziel
|
|
6
|
-
Unterscheidung zwischen ESP32-P4 Revision 0 und Revision 300, damit esp-web-tools separate Manifeste für beide Varianten bereitstellen kann.
|
|
7
|
-
|
|
8
|
-
## Implementierte Änderungen
|
|
9
|
-
|
|
10
|
-
### 1. WebSerial_ESPTool
|
|
11
|
-
|
|
12
|
-
**Datei: `src/esp_loader.ts`**
|
|
13
|
-
|
|
14
|
-
#### Neues Feld:
|
|
15
|
-
```typescript
|
|
16
|
-
chipVariant: string | null = null;
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
#### Erweiterte Chip-Erkennung:
|
|
20
|
-
- Bei IMAGE_CHIP_ID Erkennung (Rev. 300+):
|
|
21
|
-
- Revision wird aus eFuses gelesen
|
|
22
|
-
- `chipVariant` wird auf `"rev300"` oder `"rev0"` gesetzt
|
|
23
|
-
|
|
24
|
-
- Bei Magic Value Erkennung (Rev. < 300):
|
|
25
|
-
- Revision wird aus eFuses gelesen
|
|
26
|
-
- `chipVariant` wird auf `"rev300"` oder `"rev0"` gesetzt
|
|
27
|
-
|
|
28
|
-
#### Revision-Berechnung:
|
|
29
|
-
```typescript
|
|
30
|
-
// Aus EFUSE_BLOCK1 (Word 2):
|
|
31
|
-
const minorRev = word2 & 0x0f;
|
|
32
|
-
const majorRev = (((word2 >> 23) & 1) << 2) | ((word2 >> 4) & 0x03);
|
|
33
|
-
const revision = majorRev * 100 + minorRev;
|
|
34
|
-
|
|
35
|
-
// Variante setzen:
|
|
36
|
-
if (revision >= 300) {
|
|
37
|
-
chipVariant = "rev300";
|
|
38
|
-
} else {
|
|
39
|
-
chipVariant = "rev0";
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 2. esp-web-tools
|
|
44
|
-
|
|
45
|
-
**Datei: `src/const.ts`**
|
|
46
|
-
|
|
47
|
-
#### Erweitertes Build Interface:
|
|
48
|
-
```typescript
|
|
49
|
-
export interface Build {
|
|
50
|
-
chipFamily: "ESP32-P4" | ...;
|
|
51
|
-
chipVariant?: string; // NEU - optional
|
|
52
|
-
parts: { path: string; offset: number; }[];
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
#### Erweitertes FlashState Interface:
|
|
57
|
-
```typescript
|
|
58
|
-
export interface BaseFlashState {
|
|
59
|
-
chipFamily?: Build["chipFamily"] | "Unknown Chip";
|
|
60
|
-
chipVariant?: string | null; // NEU
|
|
61
|
-
// ...
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**Datei: `src/flash.ts`**
|
|
66
|
-
|
|
67
|
-
#### Erweiterte Build-Auswahl:
|
|
68
|
-
```typescript
|
|
69
|
-
build = manifest.builds.find((b) => {
|
|
70
|
-
// Match chipFamily
|
|
71
|
-
if (b.chipFamily !== chipFamily) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
// Wenn Build chipVariant spezifiziert, muss es matchen
|
|
75
|
-
if (b.chipVariant !== undefined) {
|
|
76
|
-
return b.chipVariant === chipVariant;
|
|
77
|
-
}
|
|
78
|
-
// Ohne chipVariant: Match für alle Varianten
|
|
79
|
-
return true;
|
|
80
|
-
});
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
#### Verbesserte Meldungen:
|
|
84
|
-
- Initialisierung zeigt chipVariant an
|
|
85
|
-
- Fehlermeldungen enthalten chipVariant-Info
|
|
86
|
-
|
|
87
|
-
**Datei: `README.md`**
|
|
88
|
-
- Dokumentation für Chip Variant Support hinzugefügt
|
|
89
|
-
- Beispiel für P4-Varianten
|
|
90
|
-
|
|
91
|
-
## Verwendung
|
|
92
|
-
|
|
93
|
-
### Manifest mit spezifischen Builds:
|
|
94
|
-
```json
|
|
95
|
-
{
|
|
96
|
-
"name": "My Firmware",
|
|
97
|
-
"version": "1.0.0",
|
|
98
|
-
"builds": [
|
|
99
|
-
{
|
|
100
|
-
"chipFamily": "ESP32-P4",
|
|
101
|
-
"chipVariant": "rev0",
|
|
102
|
-
"parts": [
|
|
103
|
-
{ "path": "firmware_p4_old.bin", "offset": 0 }
|
|
104
|
-
]
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"chipFamily": "ESP32-P4",
|
|
108
|
-
"chipVariant": "rev300",
|
|
109
|
-
"parts": [
|
|
110
|
-
{ "path": "firmware_p4_new.bin", "offset": 0 }
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
]
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Manifest mit Fallback:
|
|
118
|
-
```json
|
|
119
|
-
{
|
|
120
|
-
"builds": [
|
|
121
|
-
{
|
|
122
|
-
"chipFamily": "ESP32-P4",
|
|
123
|
-
"chipVariant": "rev300",
|
|
124
|
-
"parts": [...]
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
"chipFamily": "ESP32-P4",
|
|
128
|
-
"parts": [...] // Fallback für rev0
|
|
129
|
-
}
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
## Build-Status
|
|
135
|
-
|
|
136
|
-
✅ **WebSerial_ESPTool**: Kompiliert erfolgreich
|
|
137
|
-
✅ **esp-web-tools**: Kompiliert erfolgreich
|
|
138
|
-
✅ **TypeScript**: Keine Fehler
|
|
139
|
-
✅ **Abwärtskompatibilität**: Vollständig gewährleistet
|
|
140
|
-
|
|
141
|
-
## Nächste Schritte
|
|
142
|
-
|
|
143
|
-
### Für Deployment:
|
|
144
|
-
|
|
145
|
-
1. **WebSerial_ESPTool**:
|
|
146
|
-
```bash
|
|
147
|
-
cd WebSerial_ESPTool
|
|
148
|
-
# Version in package.json erhöhen (z.B. 6.5.0)
|
|
149
|
-
npm run prepublishOnly
|
|
150
|
-
npm publish
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
2. **esp-web-tools**:
|
|
154
|
-
```bash
|
|
155
|
-
cd esp-web-tools
|
|
156
|
-
# package.json aktualisieren: "tasmota-webserial-esptool": "^6.5.0"
|
|
157
|
-
npm install
|
|
158
|
-
# Version in package.json erhöhen (z.B. 8.2.0)
|
|
159
|
-
npm run prepublishOnly
|
|
160
|
-
npm publish
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Für Testing:
|
|
164
|
-
|
|
165
|
-
1. **Hardware-Tests**:
|
|
166
|
-
- Test mit ESP32-P4 Rev. 0 Hardware
|
|
167
|
-
- Test mit ESP32-P4 Rev. 300 Hardware
|
|
168
|
-
- Verifizierung der korrekten Varianten-Erkennung
|
|
169
|
-
|
|
170
|
-
2. **Manifest-Tests**:
|
|
171
|
-
- Test mit chipVariant-spezifischen Builds
|
|
172
|
-
- Test mit Fallback-Builds
|
|
173
|
-
- Test mit gemischten Manifesten
|
|
174
|
-
|
|
175
|
-
## Dokumentation
|
|
176
|
-
|
|
177
|
-
Erstellt:
|
|
178
|
-
- ✅ `CHIP_VARIANT_SUPPORT.md` - Vollständige technische Dokumentation
|
|
179
|
-
- ✅ `CHANGELOG_CHIP_VARIANT.md` - Detaillierte Änderungsliste
|
|
180
|
-
- ✅ `IMPLEMENTATION_SUMMARY.md` - Diese Datei
|
|
181
|
-
- ✅ `manifest-example-p4-variants.json` - Beispiel-Manifest
|
|
182
|
-
- ✅ README.md Update in esp-web-tools
|
|
183
|
-
|
|
184
|
-
## Technische Details
|
|
185
|
-
|
|
186
|
-
### Chip-Erkennung Flow:
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
1. ESPLoader.initialize()
|
|
190
|
-
↓
|
|
191
|
-
2. detectChip()
|
|
192
|
-
↓
|
|
193
|
-
3a. Versuche GET_SECURITY_INFO (IMAGE_CHIP_ID)
|
|
194
|
-
→ Erfolg: chipId = 18 (ESP32-P4)
|
|
195
|
-
→ getChipRevision() → chipVariant setzen
|
|
196
|
-
|
|
197
|
-
3b. Fallback: Magic Value Detection
|
|
198
|
-
→ chipMagicValue = 0x0, 0x7039ad9, oder 0x0addbad0
|
|
199
|
-
→ getChipRevision() → chipVariant setzen
|
|
200
|
-
|
|
201
|
-
4. chipVariant ist nun "rev0" oder "rev300"
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Manifest Matching Flow:
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
1. Chip erkannt: chipFamily = "ESP32-P4", chipVariant = "rev300"
|
|
208
|
-
↓
|
|
209
|
-
2. Durchsuche manifest.builds[]
|
|
210
|
-
↓
|
|
211
|
-
3. Für jeden Build:
|
|
212
|
-
- chipFamily muss matchen
|
|
213
|
-
- Wenn Build.chipVariant definiert: muss exakt matchen
|
|
214
|
-
- Wenn Build.chipVariant undefined: immer Match
|
|
215
|
-
↓
|
|
216
|
-
4. Ersten passenden Build verwenden
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Vorteile
|
|
220
|
-
|
|
221
|
-
1. **Flexibilität**: Manifeste können spezifische oder generische Builds anbieten
|
|
222
|
-
2. **Abwärtskompatibilität**: Bestehende Manifeste funktionieren unverändert
|
|
223
|
-
3. **Zukunftssicher**: Erweiterbar für weitere Chip-Varianten
|
|
224
|
-
4. **Transparent**: Variante wird dem Benutzer angezeigt
|
|
225
|
-
5. **Robust**: Fallback-Mechanismus verhindert Fehler
|
|
226
|
-
|
|
227
|
-
## Getestet
|
|
228
|
-
|
|
229
|
-
- ✅ TypeScript Kompilierung
|
|
230
|
-
- ✅ Build-Prozess
|
|
231
|
-
- ✅ Keine Diagnostics-Fehler
|
|
232
|
-
- ⏳ Hardware-Tests (ausstehend)
|