zwischenstand
This commit is contained in:
72
protocol.md
72
protocol.md
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user