3.8 KiB
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.
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
# 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
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:
// 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:
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