UARTScope

Ein moderner UART-Monitor für Linux mit Qt6-Oberfläche. Gebaut als vollwertiger Ersatz für minicom besonders nützlich bei der Entwicklung von Baremetal-Projekten wie Chica (Amiga-Hardware-Nachbildung auf dem Raspberry Pi).


Features

Feature Beschreibung
Unbegrenzter Verlauf Kein Zeilenlimit keine Daten gehen verloren, egal wie viel der Pi sendet
Timestamps Jede Zeile im Raw-View bekommt automatisch einen hh:mm:ss.zzz-Timestamp
H + V Scrolling Kein Zeilenumbruch, voller horizontaler Scrollbalken
Live-Logging Alle empfangenen Zeilen werden mit Timestamp in eine Datei geschrieben
Tag-Monitor Zeilen mit [TAG] werden in eigenen Panels angezeigt und aktualisiert
Tag-Filter Tags können aus dem Raw-View ausgeblendet werden (nur im Tag-Monitor sichtbar)
Tabellenansicht CSV-formatierte UART-Zeilen werden in einer Tabelle dargestellt
Suche Inkrementelle Volltextsuche im Raw-View
Auto-Reconnect Bei Verbindungsabbruch wird automatisch neu verbunden (Intervall einstellbar)
ANSI Clear-Screen \033[2J\033[H aus der Firmware leert alle Views gleichzeitig
Copy-Buttons Raw-View und jedes Tag-Panel haben einen „📋 Copy"-Button
V4L2 Live Video HDMI-Grabber direkt eingebunden Live-Vorschau unter dem Tag-Monitor
Screenshot Aktuellen Frame des HDMI-Grabbers als PNG/JPG speichern
Format-Referenz Eingebauter Guide (mit Kopieren-Button) für KI-kompatible UART-Formatierung
Fensterlayout Fenstergröße, Position und alle Splitter-Positionen werden beim Beenden gespeichert

Voraussetzungen

# Arch (empfohlen)
sudo pacman -S cmake qt6-base qt6-serialport

# Ubuntu / Debian
sudo apt install cmake qt6-base-dev qt6-serialport-dev libqt6serialport6-dev

# Fedora
sudo dnf install cmake qt6-qtbase-devel qt6-qtserialport-devel

V4L2 benötigt keine zusätzliche Library linux/videodev2.h ist Teil der Standard-Kernel-Header.


Build

git clone https://git.projekt-hirnfrei.de/diabolus/uartscope.git
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

Berechtigungen

# UART-Port
sudo usermod -aG dialout $USER

# HDMI-Grabber / V4L2
sudo usermod -aG video $USER

# Einmal ausloggen / neu einloggen

Grabber testen:

v4l2-ctl --list-devices                      # alle /dev/video* Geräte
v4l2-ctl -d /dev/video0 --list-formats-ext  # unterstützte Formate & Auflösungen

UART-Ausgabe formatieren

Raw-View (immer aktiv)

Jede UART-Zeile erscheint im Raw-View mit Timestamp. Keine besondere Formatierung nötig.

Screen leeren von der Firmware aus alle Views gleichzeitig leeren:

uart_printf("\033[2J\033[H");

Tag-Monitor

Zeilen mit [TAGNAME] werden im Tag-Monitor-Panel angezeigt und im Raw-View hervorgehoben (cyan). Über „Tag filter…" in der Toolbar können Tags vollständig aus dem Raw-View ausgeblendet werden, sodass sie nur noch im Tag-Monitor erscheinen.

Format: [TAGNAME] key1=value1 key2=value2 ...

  • Tag-Name: Buchstaben, Ziffern, Underscore z.B. WDG, VIDEO, I2C_BUS
  • Key=Value-Paare: Leerzeichen-getrennt, Werte ohne Leerzeichen
  • Ohne Key=Value-Paare wird der rohe String angezeigt

Beispiele:

uart_printf("[WDG] uptime=%lu free_heap=%lu temp=%d\n",
            HAL_GetTick(), xPortGetFreeHeapSize(), core_temp);

uart_printf("[VIDEO] line=%d hblank=%d vblank=%d copper=%d\n",
            scanline, hblank_ticks, vblank_ticks, copper_dma);

uart_printf("[AUDIO] ch=%d buf=%d underruns=%lu\n",
            active_channels, buffer_fill, underruns);

Jeder einzigartige Tag bekommt automatisch ein eigenes Panel. Panels aktualisieren sich in-place kein Scrollen nötig.

Tabellenansicht

Optionale Header-Zeile mit #, dann CSV-Datenzeilen:

#time_ms,temperature,voltage,current
1000,23.5,3.30,0.42
2000,23.7,3.31,0.41

Delimiter per Dropdown umschaltbar: , ; \t | Space


Einstellungen

Beim Beenden werden folgende Einstellungen automatisch gespeichert und beim nächsten Start wiederhergestellt:

  • Fenstergröße und -position
  • Splitter-Positionen (Haupt-Splitter und Tag/Video-Splitter)
  • Auto-Reconnect ein/aus und Intervall
  • Tag-Filter (ausgeblendete Tags)

Gespeichert unter ~/.config/ChicaDev/UARTScope.conf (via QSettings).


Projektstruktur

uartscope/
├── CMakeLists.txt
├── README.md
├── uartscope.desktop.in
├── include/
│   ├── mainwindow.h       ← Hauptfenster, koordiniert alle Komponenten
│   ├── serialworker.h     ← UART-Empfang im eigenen QThread, Auto-Reconnect
│   ├── rawview.h          ← Unbegrenzter Log mit Timestamps, Suche, Copy
│   ├── tableview.h        ← CSV-Parser → QTableWidget
│   ├── tagwidget.h        ← Container für Tag-Panels
│   ├── tagpanel.h         ← Ein Panel pro [TAG], Key=Value-Tabelle, Copy
│   ├── connectdialog.h    ← Port-Konfiguration (Port, Baud, Log-Datei)
│   ├── v4l2worker.h       ← V4L2-Capture in std::thread, MJPEG/YUYV/NV12
│   └── videowidget.h      ← Live-Vorschau, Freeze, Screenshot
└── src/
    ├── main.cpp
    ├── mainwindow.cpp
    ├── serialworker.cpp
    ├── rawview.cpp
    ├── tableview.cpp
    ├── tagwidget.cpp
    ├── tagpanel.cpp
    ├── connectdialog.cpp
    ├── v4l2worker.cpp
    └── videowidget.cpp

Erweiterungsideen

  • Plot-Widget: numerische Tag-Werte live als Graph darstellen (Qt Charts)
  • UART senden: TX-Eingabezeile für bidirektionale Kommunikation
  • Hex-View: rohe Bytes als Hex-Dump anzeigen
  • Session-Replay: gespeicherte Log-Dateien abspielen
  • Regex-Filter: Zeilen im Raw-View per regulärem Ausdruck ein-/ausblenden
Description
Tool zu debuggen von Baremetal Projekten auf dem Raspberry Pi mittels UART
Readme 461 KiB
Languages
C++ 74.9%
Shell 19.8%
Perl 3.9%
CMake 1.4%