Files
uartscope/README.md

3.8 KiB
Raw Permalink Blame History

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