Dany Thinnes d3229c7b64 - Auto-scroll standard aktiv
- Tag-Filter wird gespeichert
- Tag Monitor kann bei einem Tag jetzt pro Key mehrere Werte in einer Tabelle anzeigen
- Bug für Clear behoben
2026-06-23 23:19:06 +02:00
2026-06-23 23:19:06 +02:00
2026-06-23 23:19:06 +02:00
2026-06-09 09:04:59 +02:00
2026-06-23 23:19:06 +02:00
2026-06-23 23:19:06 +02:00

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
Auto-Scroll Standardmäßig aktiv springt automatisch ans Ende neuer Ausgaben
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
Listen-Werte ;-getrennte Werte in einem Tag werden als mehrzeilige Liste dargestellt
Tag-Filter Tags können aus dem Raw-View ausgeblendet werden wird dauerhaft gespeichert
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 Raw-View, Tabelle, Tag-Monitor und Video-Vorschau 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, Splitter-Positionen und Tag-Filter 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 Raw-View, Tabelle, Tag-Monitor und Video-Vorschau 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), sofern der Tag nicht über den Tag-Filter ausgeblendet wurde.

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

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

Listen-Werte: Ein Wert mit ;-getrennten Einträgen wird als mehrzeilige Liste unter dem Key dargestellt:

uart_printf("[KICKSTART] Devs=trackdisk.device;input.device\n");

Im Tag-Monitor erscheint das als:

Devs   trackdisk.device
       input.device

Jeder weitere Eintrag bekommt seine eigene Tabellenzeile, der Key wird nur einmal angezeigt.

Beispiele:

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

uart_printf("[KICKSTART] Libs=graphics.library;intuition.library;dos.library\n");

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

Jeder einzigartige Tag bekommt automatisch ein eigenes Panel. Panels aktualisieren sich in-place kein Scrollen nötig. Listen-Längen können sich von Update zu Update ändern, die Tabelle passt sich automatisch an.

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


Tag-Filter

Über „Tag filter…" in der Toolbar lassen sich Tags aus dem Raw-View ausblenden, sodass sie nur noch im Tag-Monitor erscheinen. Ein Tag pro Zeile, ohne Klammern (z.B. WDG). Groß-/Kleinschreibung spielt keine Rolle. Der Filter wird sofort beim Schließen des Dialogs gespeichert und beim nächsten Programmstart automatisch wiederhergestellt.


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
├── resources.qrc
├── UartscopeLogo.png
├── uartscope.desktop.in
├── include/
│   ├── mainwindow.h       ← Hauptfenster, koordiniert alle Komponenten
│   ├── serialworker.h     ← UART-Empfang im eigenen QThread, Auto-Reconnect, ANSI-Erkennung
│   ├── 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 mit Listen-Support, 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 687 KiB
Languages
C++ 73.1%
Shell 21.2%
Perl 4.2%
CMake 1.5%