6.0 KiB
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