zwischenstand

This commit is contained in:
2026-03-18 15:05:45 +01:00
parent 7c7f19a4b7
commit ff63dda086
29 changed files with 626 additions and 269 deletions

View File

@@ -39,15 +39,16 @@ uint16_t payload_length // Little Endian
|--------|------------|----------------|---------------------------------------|
| `0x00` | `REQUEST` | Host → Device | Abfrage eines Datentyps |
| `0x10` | `RESPONSE` | Device → Host | Antwort auf `REQUEST` |
| `0x11` | `ACK` | Host Device | Flusskontrolle bei Stream-Transfers |
| `0x11` | `ACK` | Host Device | Flusskontrolle bei Stream-Transfers |
| `0x12` | `ERROR` | Device → Host | Fehlerantwort mit Fehlercode |
| `0x13` | `SUCCESS` | Device → Host | Bestaetigung einer Operation |
### 4.2 Datei-Transfer (reserviert, noch nicht implementiert)
| Wert | Name |
|--------|--------------|
| `0x20` | `FILE_START` |
| `0x21` | `FILE_CHUNK` |
| `0x22` | `FILE_END` |
### 4.2 Datei-Transfer
| Wert | Name | Richtung | Beschreibung |
|--------|--------------|----------------|---------------------------------------------|
| `0x20` | `FILE_START` | Host ↔ Device | Beginn eines Dateitransfers |
| `0x21` | `FILE_CHUNK` | Host ↔ Device | Ein Datenblock des Dateitransfers |
| `0x22` | `FILE_END` | Host ↔ Device | Abschluss des Dateitransfers inkl. CRC32 |
### 4.3 Firmware-Transfer (reserviert, noch nicht implementiert)
| Wert | Name |
@@ -97,6 +98,13 @@ Definierte `data_type`-Werte:
| `0x01` | `PROTO_INFO` | Protokollversion und Chunk-Groesse |
| `0x02` | `DEVICE_INFO` | Geraeteinformationen (TBD) |
| `0x03` | `FS_INFO` | Dateisystem-Statistik und Pfadnamen |
| `0x20` | `FILE_GET` | Datei vom Device anfordern |
| `0x21` | `FILE_PUT` | Datei auf das Device hochladen |
| `0x22` | `TAGS_GET` | Metadaten-Tags anfordern |
| `0x23` | `TAGS_PUT` | Metadaten-Tags schreiben |
| `0x24` | `RM_FILE` | Datei loeschen |
| `0x25` | `RENAME_FILE` | Datei umbenennen |
| `0x30` | `FW_UPDATE` | Firmware-Update starten |
| `0x40` | `LS` | Verzeichnisliste starten |
### 6.1 `PROTO_INFO` (`0x01`)
@@ -144,10 +152,36 @@ Wire-Format (Beispiel fuer Pfad `/a`):
Das Device antwortet mit dem LS-Stream (siehe Abschnitt 8).
## 7. ACK- und ERROR-Frames
### 6.5 `RM_FILE` (`0x24`) — Datei loeschen
Request-Payload:
```c
uint8_t data_type; // 0x24
uint8_t path_length; // Laenge des Pfads
char path[]; // Pfad ohne 0-Terminator
```
### 7.1 ACK (`frame_type = 0x11`) — Host → Device
Wird waehrend eines laufenden LS-Streams gesendet, um dem Device Credits (Sendeerlaubnisse) zu erteilen.
### 6.6 `RENAME_FILE` (`0x25`) — Datei umbenennen
Request-Payload:
```c
uint8_t data_type; // 0x25
uint8_t old_path_length; // Laenge des alten Pfads
uint8_t new_path_length; // Laenge des neuen Pfads
char paths[]; // Alter Pfad, direkt gefolgt vom neuen Pfad (beide ohne 0-Terminator)
```
### 6.7 `FILE_PUT` (`0x21`) / `TAGS_PUT` (`0x23`) — Upload initiieren
Request-Payload:
```c
uint8_t data_type; // 0x21 (Datei) oder 0x23 (Tags)
uint32_t total_size; // Dateigroesse in Bytes (LE)
char path[]; // Zielpfad ohne 0-Terminator
```
## 7. ACK-, ERROR- und SUCCESS-Frames
### 7.1 ACK (`frame_type = 0x11`) — Host ↔ Device
Wird waehrend eines laufenden Stream-Transfers gesendet, um der sendenden Seite Credits (Sendeerlaubnisse) zu erteilen.
Bei einem Download (`LS` oder `FILE_GET`) sendet der Host das ACK. Bei einem Upload (`FILE_PUT` oder `TAGS_PUT`) sendet das Device das ACK.
Format:
```c
@@ -204,6 +238,24 @@ Fehlercode-Tabelle (Zephyr errno, positiver Wert):
| 88 | `ENOSYS` | Funktion nicht implementiert |
| 134 | `ENOTSUP` | Operation nicht unterstuetzt |
### 7.3 SUCCESS (`frame_type = 0x13`) — Device → Host
Bestaetigt den erfolgreichen Abschluss einer Operation, z. B. nach Beendigung eines Uploads oder einer Dateioperation (Loeschen, Umbenennen).
Format:
```c
// Header:
uint8_t frame_type; // 0x13
uint16_t payload_length; // 0x0001
// Payload:
uint8_t data_type; // Der Befehl, der erfolgreich war (z.B. 0x21 fuer FILE_PUT)
```
Wire-Format (Beispiel: Erfolg bei RM_FILE):
```
[0x13][0x01 0x00][0x24]
```
## 8. LS-Stream (Verzeichnisliste)
Der LS-Stream wird durch einen `REQUEST` mit `data_type = 0x40` ausgeloest und laeuft wie folgt ab: