Files
uartscope/README.md

142 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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