Erste lauffähige Version
This commit is contained in:
141
README.md
Normal file
141
README.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# UARTScope
|
||||
|
||||
Ein moderner UART-Monitor für Linux mit Qt6-Oberfläche. Gebaut als Ersatz für minicom mit deutlich mehr Komfort – besonders nützlich bei der Entwicklung von Baremetal-Projekten wie [Chica](https://github.com/).
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
| Feature | Beschreibung |
|
||||
|---|---|
|
||||
| **Unbegrenzter Verlauf** | QPlainTextEdit mit unlimitierter Zeilenzahl – keine Daten gehen verloren |
|
||||
| **Horizontal + vertikal scrollen** | Kein Zeilenumbruch, voller H-Scrollbalken |
|
||||
| **Live-Logging** | Jede empfangene Zeile wird mit Zeitstempel in eine Datei geschrieben |
|
||||
| **Tag-Monitor** | Zeilen mit `[TAG]` werden abgefangen und in eigenen Panels angezeigt |
|
||||
| **Tabellenansicht** | CSV-formatierte UART-Zeilen werden in einer sortierbaren Tabelle dargestellt |
|
||||
| **Suche** | Inkrementelle Volltextsuche im Raw-View |
|
||||
| **Dunkles Theme** | Fusion Dark – passt gut zur Terminal-Ästhetik |
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
```bash
|
||||
# Ubuntu / Debian
|
||||
sudo apt install cmake qt6-base-dev qt6-serialport-dev libqt6serialport6-dev
|
||||
|
||||
# Arch
|
||||
sudo pacman -S cmake qt6-base qt6-serialport
|
||||
|
||||
# Fedora
|
||||
sudo dnf install cmake qt6-qtbase-devel qt6-qtserialport-devel
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
git clone <repo>
|
||||
cd uartscope
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build -j$(nproc)
|
||||
|
||||
# Ausführen
|
||||
./build/uartscope
|
||||
|
||||
# Systemweit installieren (optional)
|
||||
sudo cmake --install build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## UART-Ausgabe formatieren
|
||||
|
||||
### Tag-Monitor (`[TAG]`)
|
||||
|
||||
Der Tag-Monitor fängt Zeilen ab, die ein Tag der Form `[TAGNAME]` enthalten.
|
||||
Das Tag erscheint weiterhin im Raw-View (eingefärbt), wird aber **zusätzlich** im Tag-Panel aktualisiert.
|
||||
|
||||
**Watchdog-Beispiel** – dein Watchdog-Handler schickt:
|
||||
```
|
||||
[WDG] uptime=12345 free_heap=43210 load=0.82
|
||||
```
|
||||
→ UARTScope erstellt automatisch ein Panel `[WDG]` mit einer Tabelle:
|
||||
|
||||
| Key | Value |
|
||||
|---|---|
|
||||
| uptime | 12345 |
|
||||
| free_heap | 43210 |
|
||||
| load | 0.82 |
|
||||
|
||||
Jedes Update blinkt kurz grün auf – du siehst sofort, dass neue Daten angekommen sind.
|
||||
|
||||
**Mehrere Tags gleichzeitig:**
|
||||
```c
|
||||
// In deinem Baremetal-Code:
|
||||
uart_printf("[WDG] uptime=%lu free=%lu\n", uptime, heap_free);
|
||||
uart_printf("[VIDEO] line=%d hblank=%d vblank=%d\n", line, hb, vb);
|
||||
uart_printf("[AUDIO] buf=%d underruns=%d\n", audio_buf, underruns);
|
||||
```
|
||||
Für jeden einzigartigen Tag wird automatisch ein eigenes Panel erstellt.
|
||||
|
||||
### Tabellenansicht
|
||||
|
||||
Die Tabellenansicht erwartet CSV-Zeilen. Optionale Header-Zeile mit `#`:
|
||||
|
||||
```
|
||||
#time_ms,temperature,voltage,current
|
||||
1000,23.5,3.30,0.42
|
||||
2000,23.7,3.31,0.41
|
||||
3000,24.1,3.29,0.43
|
||||
```
|
||||
|
||||
Delimiter ist per Dropdown umschaltbar (`,` `;` `\t` `|` `Space`).
|
||||
|
||||
---
|
||||
|
||||
## Serielle Ports – Berechtigungen
|
||||
|
||||
Auf den meisten Linux-Distros muss dein User in der Gruppe `dialout` sein:
|
||||
|
||||
```bash
|
||||
sudo usermod -aG dialout $USER
|
||||
# Einmal ausloggen / neu einloggen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```
|
||||
uartscope/
|
||||
├── CMakeLists.txt
|
||||
├── include/
|
||||
│ ├── mainwindow.h
|
||||
│ ├── serialworker.h ← UART-Empfang im eigenen Thread
|
||||
│ ├── rawview.h ← Unbegrenzter scrollbarer Log
|
||||
│ ├── tableview.h ← CSV → QTableWidget
|
||||
│ ├── tagwidget.h ← Container für Tag-Panels
|
||||
│ ├── tagpanel.h ← Ein Panel pro [TAG]
|
||||
│ └── connectdialog.h ← Port-Konfiguration
|
||||
└── src/
|
||||
├── main.cpp
|
||||
├── mainwindow.cpp
|
||||
├── serialworker.cpp
|
||||
├── rawview.cpp
|
||||
├── tableview.cpp
|
||||
├── tagwidget.cpp
|
||||
├── tagpanel.cpp
|
||||
└── connectdialog.cpp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Erweiterungsideen
|
||||
|
||||
- **Protokoll-Filter**: Zeilen anhand von Regex ein-/ausblenden
|
||||
- **Plot-Widget**: numerische Werte aus Tags live als Graph darstellen (Qt Charts)
|
||||
- **UART senden**: TX-Eingabezeile hinzufügen für bidirektionale Kommunikation
|
||||
- **Session-Replay**: gespeicherte Log-Dateien wieder abspielen
|
||||
- **Hex-View**: rohe Bytes als Hex-Dump anzeigen
|
||||
Reference in New Issue
Block a user