Updated Readme with actual UART Protocol

This commit is contained in:
simon 2025-08-10 12:22:45 +02:00
parent 3b560799af
commit 1c9120a197

121
readme.md
View File

@ -2,54 +2,103 @@
## Struktur einer Nachricht
0xAA = Startbyte
checksum = XOR über alle Bytes (ohne Startbyte und Checksum-Byte)
- Control Bytes:
- 0xAA = Startbyte
- 0xBB = EscapeByte
- 0xCC = EndByte
checksum = XOR über alle Bytes (ohne Control Bytes und Checksum-Byte)
## Nachrichtenaufbau (Message Frame)
[ Startbyte ] [ Length ] [ CommandPage ] [ Payload (variabel) ] [ Checksum ]
Command, Payload und Checksum werden Escaped sollten sie einem Control Byte ensteprechend
[ Startbyte ] [ Command ] [ Payload (variabel) ] [ Checksum ] [ Endbyte ]
### Felder im Detail:
- **Length** (`uint8_t`):
Gibt die Gesamtlänge der Nachricht **ab `CommandPage` bis einschließlich `Payload`** an.
- **CommandPage** (`uint8_t`):
Gibt an, welcher Nachrichtentyp oder Befehl gesendet wird.
- **Command** (`uint8_t`):
Gibt an, welcher Nachrichtentyp gesendet wird.
- **Payload** (`variabel`):
Datenfeld mit variabler Länge, abhängig vom `CommandPage`.
Datenfeld mit variabler Länge, abhängig vom `Command`.
- **Checksum** (`uint8_t`):
XOR über alle Bytes ab `Length` bis einschließlich `Payload`.
### Nachrichten von PC zu ESP:
clientid: 0x00 für master, 0xFF für broadcast, ansonsten 0xA0-0xB3 // 19 Clients
### RequestPing 0xE1
Payload: byte: clientid
### RequestInfo 0xE2
Payload: byte: clientid
### RequestRestart 0xE3
Payload: byte: clientid
### PrepareFirmwareUpdate 0xF1
Payload: none
### FirmwareUpdateLine 0xF2
Payload: firmware line 240Bytes MAX
### ExecuteFirmwareUpdate 0xF3
Payload: none
### Nachrichten von ESP zu PC:
XOR über aller Bytes von `Command` und `Payload`.
### Messages
---
Command:
- UART_ECHO = 0x01
- UART_VERSION = 0x02
- UART_CLIENT_INFO = 0x03
Grundlegend sind alle Zahlenwerte im LittleEndian format!
#### UART_ECHO:
Send Message: AA 01 01 CC
Message Received: AA 01 01 CC
Sendet zurück was geschickt wird.
#### UART_VERSION:
Offset Länge (Bytes) Bezeichnung Beschreibung
0 2 Version Software Version
2 7 BuildHash Git Hash
Send Message: AA 02 02 CC
Message Received: AA 02 01 00 33 62 35 36 30 37 39 6F CC
┌─────────────────────┐
| Version | Buildhash |
| 1 | 3b56079 |
└─────────────────────┘
Sendet die Version und den Buildhash vom Master zurück.
#### UART_CLIENT_INFO:
Das erste Datenbyte nach dem Commando gibt an wie viele Client Infos in dieser Nachricht vorhanden sind.
Danach teilt sich ein Eintrag wie Folgt auf:
Offset Länge (Bytes) Bezeichnung Beschreibung
0 1 Client ID Eindeutige ID des Clients.
1 1 Ist verfügbar Boolean-Wert (0 = nein, 1 = ja), ob der Client verfügbar ist.
2 1 Slot genutzt Boolean-Wert (0 = nein, 1 = ja), ob der Slot belegt ist.
3 6 MAC-Adresse Die Hardware-Adresse des Clients.
9 4 Letzter Ping Zeit in Millisekunden seit dem letzten Ping.
13 4 Letzter erfolgreicher Ping Zeit in Millisekunden seit dem letzten erfolgreichen Ping.
17 2 Version Versionsnummer des Clients.
##### Ein Client
Send Message: AA 03 03 CC
Message Received: AA 03 01 00 01 01 50 78 7D 18 89 F8 34 00 00 00 61 1F 00 00 02 00 76 CC
┌─────────────────────────────────────────────────────────────────────────────────────────────────┐
| Client ID | Verfügbar | Genutzt | MAC-Adresse | Last Ping | Letzter Erfolg Ping | Version |
| 0 | 1 | 1 | 50:78:7D:18:89:F8 | 52 | 8033 | 2 |
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
##### Zwei Clients
Send Message: AA 03 03 CC
Message Received: AA 03 02 00 01 01 50 78 7D 18 89 F8 22 00 00 00 F4 2A 01 00 02 00 01 01 01 50 78 7D 18 0C B4 10 00 00 00 F1 2A 01 00 02 00 FE CC
┌─────────────────────────────────────────────────────────────────────────────────────────────────┐
| Client ID | Verfügbar | Genutzt | MAC-Adresse | Last Ping | Letzter Erfolg Ping | Version |
| 0 | 1 | 1 | 50:78:7D:18:89:F8 | 34 | 76532 | 2 |
| 1 | 1 | 1 | 50:78:7D:18:C:B4 | 16 | 76529 | 2 |
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
#### UART_CLIENT_INPUT:
Die Identifizierung wird hier anhand der vorher gesendeten ClientID gemacht also muss einmal vorher `UART_CLIENT_INFO` aufgerufen werden.
Das erste Datenbyte nach dem Commando gibt an wie viele Client Infos in dieser Nachricht vorhanden sind.
Danach teilt sich ein Eintrag wie Folgt auf:
Offset Länge (Bytes) Bezeichnung Beschreibung
0 1 Client ID Eindeutige ID des Clients.
1 4 LageX Float Wert von der X Lage.
5 4 LageY Float Wert von der Y Lage.
9 4 LageZ Float Wert von der Z Lage.
13 4 InputMaske Int32 Wert der als Bitmaske genutzt wird um bis zu 32 Boolische Werte anzugeben.
# Roadmap
- [ ] SEND STATUS OF DEVICE OVER UART
- [ ] CONFIGURE PEERS OVER MASTER
- [ ] SAVE PIN CONFIG ON PEERS
# Machbarkeits-Studie