tasmota-webserial-esptool 6.4.1 → 6.5.1

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.
@@ -12,8 +12,11 @@ concurrency:
12
12
  jobs:
13
13
  build:
14
14
  runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: write
17
+ id-token: write # required to use OIDC
15
18
  steps:
16
- - uses: actions/checkout@v5
19
+ - uses: actions/checkout@v6
17
20
  - name: Remove old files and folders
18
21
  run: |
19
22
  rm -rf package-lock.json
@@ -21,7 +24,7 @@ jobs:
21
24
  rm -rf js/modules
22
25
  mkdir js/modules
23
26
  - name: install node v20
24
- uses: actions/setup-node@v4
27
+ uses: actions/setup-node@v6
25
28
  with:
26
29
  node-version: 20
27
30
  - name: Install Yarn with NPM
@@ -40,11 +43,11 @@ jobs:
40
43
  mv js/modules/index.js js/modules/esptool.js
41
44
  #ls js/modules/
42
45
  - name: Commit Distribution Files
43
- uses: stefanzweifel/git-auto-commit-action@v5
46
+ uses: stefanzweifel/git-auto-commit-action@v7
44
47
  with:
45
48
  commit_message: "Github Action: Updated dist files"
46
49
  - name: Publish to NPM registry
47
- uses: JS-DevTools/npm-publish@v3
50
+ uses: JS-DevTools/npm-publish@v4
48
51
  with:
49
52
  registry: https://registry.npmjs.org/
50
53
  token: ${{ secrets.NPM_TOKEN }}
@@ -52,7 +55,7 @@ jobs:
52
55
  - name: Setup Pages
53
56
  uses: actions/configure-pages@v5
54
57
  - name: Upload artifact
55
- uses: actions/upload-pages-artifact@v3
58
+ uses: actions/upload-pages-artifact@v4
56
59
  with:
57
60
  path: "."
58
61
 
@@ -12,9 +12,9 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
 
14
14
  steps:
15
- - uses: actions/checkout@v5
15
+ - uses: actions/checkout@v6
16
16
  - name: Use Node.js
17
- uses: actions/setup-node@v4
17
+ uses: actions/setup-node@v6
18
18
  with:
19
19
  node-version: 20
20
20
  - name: Remove old package-lock.json
@@ -25,6 +25,6 @@ jobs:
25
25
  - run: script/build
26
26
  - run: npm exec -- prettier --check src
27
27
  - name: Commit changed files
28
- uses: stefanzweifel/git-auto-commit-action@v5
28
+ uses: stefanzweifel/git-auto-commit-action@v7
29
29
  with:
30
30
  commit_message: "Github Action: Updated files"
@@ -0,0 +1,126 @@
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! ✅
@@ -0,0 +1,169 @@
1
+ # Changelog: Chip Variant Support
2
+
3
+ ## Änderungen in WebSerial_ESPTool
4
+
5
+ ### Neue Features
6
+
7
+ #### 1. `chipVariant` Feld in ESPLoader
8
+ - Neues öffentliches Feld: `chipVariant: string | null`
9
+ - Wird automatisch bei der Chip-Erkennung gesetzt
10
+ - Für ESP32-P4: `"rev0"` (Revision < 300) oder `"rev300"` (Revision >= 300)
11
+ - Für alle anderen Chips: `null`
12
+
13
+ #### 2. Erweiterte ESP32-P4 Erkennung
14
+ - Revision wird aus eFuses gelesen (EFUSE_BLOCK1)
15
+ - Funktioniert sowohl bei IMAGE_CHIP_ID als auch Magic Value Erkennung
16
+ - Logging der erkannten Variante im Debug-Modus
17
+
18
+ ### Geänderte Dateien
19
+
20
+ - `src/esp_loader.ts`:
21
+ - Hinzugefügt: `chipVariant: string | null` Feld
22
+ - Erweitert: `detectChip()` Methode setzt chipVariant für ESP32-P4
23
+ - Erweitert: Logging für bessere Nachvollziehbarkeit
24
+
25
+ ### API-Änderungen
26
+
27
+ ```typescript
28
+ // Vorher
29
+ const esploader = new ESPLoader(port, logger);
30
+ await esploader.initialize();
31
+ console.log(esploader.chipName); // "ESP32-P4"
32
+ console.log(esploader.chipRevision); // 300
33
+
34
+ // Nachher (zusätzlich)
35
+ console.log(esploader.chipVariant); // "rev300"
36
+ ```
37
+
38
+ ### Abwärtskompatibilität
39
+
40
+ ✅ Vollständig abwärtskompatibel
41
+ - Bestehendes Code funktioniert unverändert
42
+ - Neues Feld ist optional und kann ignoriert werden
43
+ - Keine Breaking Changes
44
+
45
+ ## Änderungen in esp-web-tools
46
+
47
+ ### Neue Features
48
+
49
+ #### 1. `chipVariant` Support in Manifesten
50
+ - Neues optionales Feld in `Build` Interface: `chipVariant?: string`
51
+ - Ermöglicht spezifische Firmware-Builds für verschiedene Chip-Varianten
52
+ - Intelligente Matching-Logik mit Fallback-Unterstützung
53
+
54
+ #### 2. Erweiterte Build-Auswahl
55
+ - Priorisiert Builds mit passendem `chipVariant`
56
+ - Fallback auf Builds ohne `chipVariant` Angabe
57
+ - Bessere Fehlermeldungen mit Varianten-Information
58
+
59
+ ### Geänderte Dateien
60
+
61
+ - `src/const.ts`:
62
+ - Erweitert: `Build` Interface mit `chipVariant?: string`
63
+ - Erweitert: `BaseFlashState` Interface mit `chipVariant?: string | null`
64
+
65
+ - `src/flash.ts`:
66
+ - Erweitert: Build-Matching-Logik berücksichtigt chipVariant
67
+ - Erweitert: Fehlermeldungen zeigen chipVariant an
68
+ - Erweitert: Initialisierungsmeldung zeigt chipVariant an
69
+
70
+ - `README.md`:
71
+ - Hinzugefügt: Dokumentation für Chip Variant Support
72
+ - Hinzugefügt: Beispiel für P4-Varianten
73
+
74
+ ### Manifest-Beispiel
75
+
76
+ ```json
77
+ {
78
+ "name": "My Firmware",
79
+ "version": "1.0.0",
80
+ "builds": [
81
+ {
82
+ "chipFamily": "ESP32-P4",
83
+ "chipVariant": "rev0",
84
+ "parts": [...]
85
+ },
86
+ {
87
+ "chipFamily": "ESP32-P4",
88
+ "chipVariant": "rev300",
89
+ "parts": [...]
90
+ }
91
+ ]
92
+ }
93
+ ```
94
+
95
+ ### Abwärtskompatibilität
96
+
97
+ ✅ Vollständig abwärtskompatibel
98
+ - Bestehende Manifeste ohne `chipVariant` funktionieren weiterhin
99
+ - `chipVariant` ist optional
100
+ - Keine Breaking Changes
101
+
102
+ ## Testing
103
+
104
+ ### Build-Tests
105
+ - ✅ WebSerial_ESPTool kompiliert erfolgreich
106
+ - ✅ esp-web-tools kompiliert erfolgreich
107
+ - ✅ Keine TypeScript-Fehler
108
+ - ✅ Keine Linting-Fehler
109
+
110
+ ### Funktionale Tests (empfohlen)
111
+ - [ ] Test mit ESP32-P4 Rev. 0 Hardware
112
+ - [ ] Test mit ESP32-P4 Rev. 300 Hardware
113
+ - [ ] Test mit Manifest mit chipVariant
114
+ - [ ] Test mit Manifest ohne chipVariant (Fallback)
115
+ - [ ] Test mit anderen ESP32-Chips (sollte chipVariant = null sein)
116
+
117
+ ## Deployment
118
+
119
+ ### WebSerial_ESPTool
120
+ 1. Version in `package.json` erhöhen
121
+ 2. `npm run prepublishOnly` ausführen
122
+ 3. `npm publish` ausführen
123
+
124
+ ### esp-web-tools
125
+ 1. Warten bis neue WebSerial_ESPTool Version verfügbar ist
126
+ 2. `package.json` aktualisieren: `"tasmota-webserial-esptool": "^6.5.0"` (oder höher)
127
+ 3. Version in `package.json` erhöhen
128
+ 4. `npm install`
129
+ 5. `npm run prepublishOnly` ausführen
130
+ 6. `npm publish` ausführen
131
+
132
+ ## Dokumentation
133
+
134
+ - ✅ `CHIP_VARIANT_SUPPORT.md` - Vollständige technische Dokumentation
135
+ - ✅ `manifest-example-p4-variants.json` - Beispiel-Manifest
136
+ - ✅ `README.md` (esp-web-tools) - Kurze Anleitung
137
+ - ✅ `CHANGELOG_CHIP_VARIANT.md` - Diese Datei
138
+
139
+ ## Verwendungsbeispiele
140
+
141
+ ### Szenario 1: Separate Builds für jede Variante
142
+ ```json
143
+ {
144
+ "builds": [
145
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev0", "parts": [...] },
146
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev300", "parts": [...] }
147
+ ]
148
+ }
149
+ ```
150
+
151
+ ### Szenario 2: Ein Build für alle Varianten
152
+ ```json
153
+ {
154
+ "builds": [
155
+ { "chipFamily": "ESP32-P4", "parts": [...] }
156
+ ]
157
+ }
158
+ ```
159
+
160
+ ### Szenario 3: Spezifischer Build + Fallback
161
+ ```json
162
+ {
163
+ "builds": [
164
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev300", "parts": [...] },
165
+ { "chipFamily": "ESP32-P4", "parts": [...] }
166
+ ]
167
+ }
168
+ ```
169
+ Rev300 verwendet ersten Build, Rev0 verwendet zweiten Build (Fallback).
@@ -0,0 +1,184 @@
1
+ # ESP32-P4 Chip Variant Support
2
+
3
+ ## Übersicht
4
+
5
+ Die beiden Projekte unterstützen jetzt die Unterscheidung zwischen verschiedenen ESP32-P4 Varianten über das neue `chipVariant` Feld.
6
+
7
+ ## WebSerial_ESPTool
8
+
9
+ ### Änderungen
10
+
11
+ Das `ESPLoader` Objekt hat jetzt ein neues Feld:
12
+ - `chipVariant: string | null` - Identifiziert die Chip-Variante
13
+
14
+ ### ESP32-P4 Varianten
15
+
16
+ Für ESP32-P4 Chips werden folgende Varianten erkannt:
17
+ - `"rev0"` - ESP32-P4 Revision < 300 (ältere Versionen)
18
+ - `"rev300"` - ESP32-P4 Revision >= 300 (neuere Versionen)
19
+
20
+ Die Erkennung erfolgt automatisch basierend auf der Chip-Revision, die aus den eFuses gelesen wird.
21
+
22
+ ### Beispiel
23
+
24
+ ```typescript
25
+ const esploader = new ESPLoader(port, logger);
26
+ await esploader.initialize();
27
+
28
+ console.log(esploader.chipName); // "ESP32-P4"
29
+ console.log(esploader.chipFamily); // CHIP_FAMILY_ESP32P4
30
+ console.log(esploader.chipRevision); // z.B. 0 oder 300
31
+ console.log(esploader.chipVariant); // "rev0" oder "rev300"
32
+ ```
33
+
34
+ ## esp-web-tools
35
+
36
+ ### Änderungen
37
+
38
+ #### Manifest Format
39
+
40
+ Das `Build` Interface unterstützt jetzt ein optionales `chipVariant` Feld:
41
+
42
+ ```typescript
43
+ interface Build {
44
+ chipFamily: "ESP32-P4" | ...;
45
+ chipVariant?: string; // NEU
46
+ parts: { path: string; offset: number; }[];
47
+ }
48
+ ```
49
+
50
+ #### Flash State
51
+
52
+ Der `FlashState` enthält jetzt auch die `chipVariant` Information:
53
+
54
+ ```typescript
55
+ interface BaseFlashState {
56
+ chipFamily?: "ESP32-P4" | ...;
57
+ chipVariant?: string | null; // NEU
58
+ // ...
59
+ }
60
+ ```
61
+
62
+ ### Manifest Beispiel
63
+
64
+ Hier ist ein Beispiel-Manifest, das verschiedene Firmware-Builds für die zwei P4-Varianten bereitstellt:
65
+
66
+ ```json
67
+ {
68
+ "name": "My ESP32-P4 Firmware",
69
+ "version": "1.0.0",
70
+ "builds": [
71
+ {
72
+ "chipFamily": "ESP32-P4",
73
+ "chipVariant": "rev0",
74
+ "parts": [
75
+ { "path": "bootloader_rev0.bin", "offset": 0 },
76
+ { "path": "partition-table.bin", "offset": 32768 },
77
+ { "path": "firmware_rev0.bin", "offset": 65536 }
78
+ ]
79
+ },
80
+ {
81
+ "chipFamily": "ESP32-P4",
82
+ "chipVariant": "rev300",
83
+ "parts": [
84
+ { "path": "bootloader_rev300.bin", "offset": 0 },
85
+ { "path": "partition-table.bin", "offset": 32768 },
86
+ { "path": "firmware_rev300.bin", "offset": 65536 }
87
+ ]
88
+ },
89
+ {
90
+ "chipFamily": "ESP32-S3",
91
+ "parts": [
92
+ { "path": "bootloader_s3.bin", "offset": 0 },
93
+ { "path": "partition-table.bin", "offset": 32768 },
94
+ { "path": "firmware_s3.bin", "offset": 65536 }
95
+ ]
96
+ }
97
+ ]
98
+ }
99
+ ```
100
+
101
+ ### Matching-Logik
102
+
103
+ Die Firmware-Auswahl funktioniert wie folgt:
104
+
105
+ 1. **Wenn `chipVariant` im Build angegeben ist**: Der Build wird nur verwendet, wenn sowohl `chipFamily` als auch `chipVariant` übereinstimmen.
106
+
107
+ 2. **Wenn `chipVariant` im Build NICHT angegeben ist**: Der Build wird für alle Varianten dieser `chipFamily` verwendet (Fallback).
108
+
109
+ #### Beispiele
110
+
111
+ **Szenario 1: Spezifische Builds für jede Variante**
112
+ ```json
113
+ {
114
+ "builds": [
115
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev0", "parts": [...] },
116
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev300", "parts": [...] }
117
+ ]
118
+ }
119
+ ```
120
+ - ESP32-P4 rev0 → verwendet ersten Build
121
+ - ESP32-P4 rev300 → verwendet zweiten Build
122
+
123
+ **Szenario 2: Ein Build für alle Varianten**
124
+ ```json
125
+ {
126
+ "builds": [
127
+ { "chipFamily": "ESP32-P4", "parts": [...] }
128
+ ]
129
+ }
130
+ ```
131
+ - ESP32-P4 rev0 → verwendet den Build
132
+ - ESP32-P4 rev300 → verwendet den Build
133
+
134
+ **Szenario 3: Spezifischer Build + Fallback**
135
+ ```json
136
+ {
137
+ "builds": [
138
+ { "chipFamily": "ESP32-P4", "chipVariant": "rev300", "parts": [...] },
139
+ { "chipFamily": "ESP32-P4", "parts": [...] }
140
+ ]
141
+ }
142
+ ```
143
+ - ESP32-P4 rev0 → verwendet zweiten Build (Fallback)
144
+ - ESP32-P4 rev300 → verwendet ersten Build (spezifisch)
145
+
146
+ ## Abwärtskompatibilität
147
+
148
+ Alle Änderungen sind vollständig abwärtskompatibel:
149
+
150
+ - Bestehende Manifeste ohne `chipVariant` funktionieren weiterhin
151
+ - Das `chipVariant` Feld ist optional
152
+ - Für alle Chips außer ESP32-P4 ist `chipVariant` `null`
153
+
154
+ ## Technische Details
155
+
156
+ ### Chip-Erkennung
157
+
158
+ Die ESP32-P4 Revision wird aus den eFuses gelesen (EFUSE_BLOCK1):
159
+ - Minor Revision: Bits [3:0]
160
+ - Major Revision: Bit [23] << 2 | Bits [5:4]
161
+ - Revision = Major * 100 + Minor
162
+
163
+ ### Erkennungsmethoden
164
+
165
+ Die Chip-Erkennung verwendet einen zweistufigen Ansatz:
166
+
167
+ 1. **Primär: GET_SECURITY_INFO** (IMAGE_CHIP_ID)
168
+ - Unterstützt von: ESP32-C3 (neuere ROM), ESP32-S3, ESP32-C6, ESP32-H2, ESP32-P4 Rev. 300+
169
+ - Liefert direkt die Chip-ID
170
+ - Wenn nicht unterstützt oder leere Antwort → Fallback zu Magic Value
171
+
172
+ 2. **Fallback: Magic Value Detection**
173
+ - Unterstützt von: ESP8266, ESP32, ESP32-S2, ESP32-C3 (ältere ROM), ESP32-P4 Rev. < 300
174
+ - Liest Magic-Wert aus Register 0x40001000
175
+ - Zuverlässige Methode für ältere Chips
176
+
177
+ **Für ESP32-P4:**
178
+ - Beide Methoden funktionieren
179
+ - Nach Erkennung wird die Revision aus eFuses gelesen
180
+ - Basierend auf Revision wird `chipVariant` gesetzt:
181
+ - Rev. < 300 → `"rev0"`
182
+ - Rev. >= 300 → `"rev300"`
183
+
184
+ **Hinweis:** Die Debug-Meldung "GET_SECURITY_INFO failed, using magic value detection" ist normal und erwartet für ältere Chips. Der Fallback-Mechanismus stellt sicher, dass alle Chips korrekt erkannt werden.