Über... hinzugefügt, Icon hinzugefügt

This commit is contained in:
2026-06-09 23:15:29 +02:00
parent 2181f254d2
commit 92168ee5dc
19 changed files with 1039 additions and 88 deletions

150
README.md
View File

@@ -1,6 +1,6 @@
# 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/).
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](https://git.projekt-hirnfrei.de/diabolus/chica) (Amiga-Hardware-Nachbildung auf dem Raspberry Pi).
---
@@ -8,35 +8,45 @@ Ein moderner UART-Monitor für Linux mit Qt6-Oberfläche. Gebaut als Ersatz für
| 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 |
| **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 |
| **Dunkles Theme** | Fusion Dark passt gut zur Terminal-Ästhetik |
| **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
```bash
# Arch (empfohlen)
sudo pacman -S cmake qt6-base qt6-serialport
# 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
```
V4L2 benötigt keine zusätzliche Library `linux/videodev2.h` ist Teil der Standard-Kernel-Header.
---
## Build
```bash
git clone <repo>
git clone https://git.projekt-hirnfrei.de/diabolus/uartscope.git
cd uartscope
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
@@ -50,59 +60,85 @@ sudo cmake --install build
---
## Berechtigungen
```bash
# UART-Port
sudo usermod -aG dialout $USER
# HDMI-Grabber / V4L2
sudo usermod -aG video $USER
# Einmal ausloggen / neu einloggen
```
Grabber testen:
```bash
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
### Tag-Monitor (`[TAG]`)
### Raw-View (immer aktiv)
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.
Jede UART-Zeile erscheint im Raw-View mit Timestamp. Keine besondere Formatierung nötig.
**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:**
**Screen leeren** von der Firmware aus alle Views gleichzeitig leeren:
```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);
uart_printf("\033[2J\033[H");
```
Für jeden einzigartigen Tag wird automatisch ein eigenes Panel erstellt.
### 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:**
```c
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
Die Tabellenansicht erwartet CSV-Zeilen. Optionale Header-Zeile mit `#`:
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
3000,24.1,3.29,0.43
```
Delimiter ist per Dropdown umschaltbar (`,` `;` `\t` `|` `Space`).
Delimiter per Dropdown umschaltbar: `,` `;` `\t` `|` `Space`
---
## Serielle Ports Berechtigungen
## Einstellungen
Auf den meisten Linux-Distros muss dein User in der Gruppe `dialout` sein:
Beim Beenden werden folgende Einstellungen automatisch gespeichert und beim nächsten Start wiederhergestellt:
```bash
sudo usermod -aG dialout $USER
# Einmal ausloggen / neu einloggen
```
- 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`).
---
@@ -111,14 +147,18 @@ sudo usermod -aG dialout $USER
```
uartscope/
├── CMakeLists.txt
├── README.md
├── uartscope.desktop.in
├── include/
│ ├── mainwindow.h
│ ├── serialworker.h ← UART-Empfang im eigenen Thread
│ ├── rawview.h ← Unbegrenzter scrollbarer Log
│ ├── tableview.h ← CSV → QTableWidget
│ ├── 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]
── connectdialog.h ← Port-Konfiguration
│ ├── 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
@@ -127,15 +167,17 @@ uartscope/
├── tableview.cpp
├── tagwidget.cpp
├── tagpanel.cpp
── connectdialog.cpp
── connectdialog.cpp
├── v4l2worker.cpp
└── videowidget.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
- **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