diff --git a/readme.md b/readme.md index 119bb30..3e900ee 100644 --- a/readme.md +++ b/readme.md @@ -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