Uartscope Pogrammbeschreibung

Wer regelmäßig mit dem Raspberry Pi oder anderen Baremetal-Projekten arbeitet, kennt das Problem: man debuggt über UART-Ausgaben und nutzt dafür Tools wie minicom. Das funktioniert grundsätzlich – aber sobald die Ausgaben schneller kommen, der Verlauf zu kurz wird oder man gleichzeitig verschiedene Arten von Daten im Blick behalten will, stößt man schnell an Grenzen.

Genau aus diesem Alltag heraus ist UARTScope entstanden – ein eigenes Tool, das ich für die Entwicklung von Chica, meiner Amiga-Hardware-Nachbildung auf dem Raspberry Pi, gebaut habe.


Was ist UARTScope?

UARTScope ist ein UART-Monitor für Linux mit einer modernen Qt6-Oberfläche, geschrieben in C++17. Es empfängt serielle Daten in Echtzeit und stellt sie in mehreren parallelen Ansichten dar – ohne dass dabei auch nur eine Zeile verloren geht.

Neben der klassischen seriellen Überwachung bringt es außerdem einen integrierten V4L2-Videoplayer mit, der einen HDMI-Grabber direkt einbindet. So hat man UART-Ausgaben und HDMI-Bild des Pi in einer einzigen Oberfläche.


Features im Überblick

🖥️ Raw-View

Alle eingehenden UART-Zeilen werden mit Millisekunden-Timestamp in einem scrollbaren Textbereich angezeigt. Der Verlauf ist unbegrenzt – egal wie viel Ausgabe kommt, es geht nichts verloren. Horizontal- und Vertikal-Scrolling, inkrementelle Volltextsuche und ein Copy-Button sind mit dabei.

🏷️ Tag-Monitor

Wer seine Firmware entsprechend formatiert, kann bestimmte Zeilen automatisch aus dem Raw-View herausfiltern und in eigenen Tag-Panels anzeigen lassen. Ein Watchdog, der alle paar Sekunden Statuswerte sendet, verschmutzt damit nicht mehr den eigentlichen Log – er bekommt einfach sein eigenes Panel.

Das Format ist denkbar einfach:

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\n",
            scanline, hblank_ticks, vblank_ticks);

Jeder einzigartige Tag bekommt automatisch ein eigenes Panel mit einer Key=Value-Tabelle, die sich in-place aktualisiert.

📊 Tabellenansicht

CSV-formatierte UART-Ausgaben werden automatisch in einer sortierbaren Tabelle dargestellt. Eine optionale Header-Zeile mit # benennt die Spalten. Der Delimiter ist per Dropdown umschaltbar (Komma, Semikolon, Tab, Pipe, Leerzeichen).

📹 V4L2 Live-Video

Ein angeschlossener HDMI-Grabber lässt sich direkt in UARTScope einbinden. Die Live-Vorschau erscheint im rechten Panel unterhalb des Tag-Monitors. Unterstützte Formate: MJPEG, YUYV, NV12. Screenshots lassen sich per Knopfdruck als PNG oder JPG speichern.

⚙️ Weitere Features

  • Auto-Reconnect – bei Verbindungsabbruch (z.B. gezogenem USB-Kabel) wird automatisch neu verbunden, mit einstellbarem Retry-Intervall
  • Live-Logging – alle Zeilen werden mit Timestamp direkt in eine Datei geschrieben
  • ANSI Clear-Screen – ein \033[2J\033[H aus der Firmware leert alle Views gleichzeitig
  • Format-Referenz – ein eingebauter Guide erklärt das UARTScope-Ausgabeformat, mit einem Kopieren-Button für KI-Assistenten
  • Fensterlayout – Fenstergröße, Position und alle Splitter-Positionen werden beim Beenden gespeichert und beim nächsten Start wiederhergestellt

Technisches

  • Sprache: C++17
  • Framework: Qt 6 (Widgets, SerialPort)
  • Build: CMake
  • Plattform: Linux (x86_64, aarch64)
  • Video: V4L2 über Linux-Kernel-Header – keine externe Library

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)
./build/uartscope

Abhängigkeiten (Arch):

sudo pacman -S cmake qt6-base qt6-serialport

Abhängigkeiten (Ubuntu/Debian):

sudo apt install cmake qt6-base-dev qt6-serialport-dev libqt6serialport6-dev

Source Code

UARTScope ist Open Source und auf meinem Gitea-Server verfügbar:

👉 git.projekt-hirnfrei.de/diabolus/uartscope

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert