# 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](https://github.com/). --- ## 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 ```bash # 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 ```bash git clone 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:** ```c // 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: ```bash 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