disconnect_receiver left the rid in _states, causing the duplicate-ID
check to fire on reconnect. Use remove_receiver instead (which cleans
up _states/_configs) and reset _rid to None.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ReplayPacer (MsgListener+MsgTalker) sits between packetizer output and
downstream listeners; sleeps after each complete NMEA/UBX frame before
forwarding. FileBackend no longer owns the delay — it reads as fast as
possible and the pacer provides back-pressure on the same thread.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ConnectionConfig: new file_path and delay fields
- ConnectionRow: File page with path input, Browse button, delay
spinner (0–10 s), and auto-fill of receiver-ID from filename
- ReceiverManager.connect_receiver: FileBackend wired for 'file' type;
UBX poll timer skipped for file sources
- FileBackend.register_xcvr: fallback to first unoccupied entry when
name does not match filename pattern
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Trail history increased from 1h to 24h (86400 points). Added a spinbox
(0-24h, default 1h) next to 'Show Trails' to control how much trail is
rendered; spinbox is disabled when trails are off.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removed Trail column from satellite table. Added a single 'Show Trails'
checkbox in the source selector box that enables/disables all trails at once.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Store up to 1 hour of (elevation, azimuth) history per satellite/source
- Trail column in satellite table (checkbox, default off); clicking the
column header toggles all trails on/off
- Trail rendered in GNSS color with alpha fading from 15 (oldest) to 200
(newest), subsampled to max 120 points for render performance
- Trail column fixed at 42 px to avoid checkbox + empty-text visual split
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix _nice_ticks: use floor for first tick and ceil for last tick so the
tick range always fully brackets the data; data was previously clipped
when the maximum fell between two nice tick values
- Add 5% headroom padding so data does not sit flush against plot edges
- Add 'Visible Sats' and 'Used Sats' y-axis modes (global, like pDOP)
- Right-click context menu on plot canvas: Save as PNG and Copy to clipboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
One card per receiver showing receiver ID, pDOP, visible satellites and
used satellites. Cards are added/removed dynamically with receivers.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Sky widget always gets the latest data immediately (off-thread render)
- Table rebuilds throttled to ~2 Hz via single-shot QTimer
- Cell values updated in-place when satellite set is unchanged, preserving
scroll position; full rebuild only when satellites appear/disappear
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>