P1: PySide6 + pyqtgraph GUI shell (PID browser + live overlay plot)

First graphical frontend on obdcore. Cross-platform (Win/mac/Linux).

- gui/controller.py: owns link/registry/store/scheduler; subscribe == poll ==
  plot; per-PID rates (ICP/FICM/RPM fast); optional CSV recording.
- gui/main.py: connection bar (port dropdown via find_ports, baud, Mock,
  connect), left PID browser grouped by system with live values + confidence
  badges + checkboxes, central pyqtgraph overlay plot with legend, Normalize
  (% of range) toggle for mixed-scale PIDs, Crank/Driving/Vitals presets,
  10Hz refresh reading the store off the acquisition thread.
- run_gui.py launcher; requirements-gui.txt.
- store.py: lock Channel push/series (GUI reads while scheduler writes).
- docs/gui-p1-preview.png: validated render (mock crank, ICP ramp to 540).

Validated headless (offscreen Qt): connect(mock) -> crank preset -> ICP
streams past 500 -> normalize -> uncheck removes curve -> clean disconnect.
obdcore tests still pass after the locking change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
This commit is contained in:
2026-06-30 14:13:49 -04:00
parent 01de18a568
commit 4589904b97
8 changed files with 463 additions and 9 deletions
+18
View File
@@ -73,6 +73,24 @@ python obd_reader.py COM5 --crank --dash-log crank.csv # + record a CSV
under the line), that's the high-pressure oil bleed-off — STC fitting / oil-rail
O-rings. On exit it prints the peak and a verdict. `q` quits, `r` resets.
## Graphical app (preview — P1)
A cross-platform desktop GUI (PySide6 + pyqtgraph) is in progress. P1 = PID
browser + live overlay plot; see [ARCHITECTURE.md](ARCHITECTURE.md) for the
roadmap (cranking/driving/diagnostics perspectives, record/playback, etc.).
```
pip install -r requirements-gui.txt
python run_gui.py # tick "Mock" + Connect to explore with no adapter
```
![P1 GUI](docs/gui-p1-preview.png)
The whole app runs against simulated data (`MockLink`) so it can be developed
on any machine and only needs the truck for real captures.
---
### Live dashboard (real-time gauges)
Updates in place as you crank or run the engine — color-coded, with live