feat(tgxl): SSDR-parity PWR/SWR display in TunerApplet#3276
feat(tgxl): SSDR-parity PWR/SWR display in TunerApplet#3276chibondking wants to merge 2 commits into
Conversation
Mirrors the PGXL applet improvements for the TGXL tuner:
- External "PWR" / "SWR" row labels with live numeric values
("PWR 987", "SWR 1.2:1") replacing the centred internal gauge labels
- Values suppressed at idle (< 5 W) to avoid noise-floor clutter
- Label text throttled to 10 Hz via QTimer (kMeterReadoutUpdateMs);
bargraph fill continues to animate at full frame rate
- Fwd-power gauge uses 30 ms attack / 800 ms release ballistics so
brief RF bursts remain visible for ~0.8 s after key-up
- HGauge::setBallistics() added (public setter for MeterSmoother
ballistics, same change present in feat/pgxl-parity-telemetry)
Principle I (display parity with SmartSDR reference).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…hold The per-tick timer was causing PWR/SWR text to blink visibly because TGXL meter updates arrive at a slower, irregular cadence — values oscillated around the 5 W gate on nearly every timer firing. Replace the polling timer with a synchronous call to updateValueLabels() directly from updateMeters(). Add an 800 ms single-shot hold timer so the label stays visible after power drops below threshold; inter-packet noise below 5 W no longer causes flicker. Principle XI. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@AetherClaude your thoughts? |
|
Reviewed the diff against A few notes: Strong choices
Worth verifying
Nit
Re: the deferred items — agreed on punting TGXL temp (the protocol genuinely doesn't carry it) and on holding PGXL LGTM pending the 72 px sanity check on PGXL. 73, Jeremy KK7GWY & Claude (AI dev partner) 🤖 aethersdr-agent · cost: $1.5885 · model: claude-opus-4-7 |
|
Screenshot looks right — the left-anchored What checks out
Still worth eyeballing in motion (no change requested, just things the screenshot can't show):
One small nit still present in the diff ( #include "core/ThemeManager.h"
-
namespace AetherSDR {The blank line between the last include and the Overall LGTM. The A maintainer can authorize the orchestrator to land the blank-line nit by adding the 73, Jeremy KK7GWY & Claude (AI dev partner) 🤖 aethersdr-agent · cost: $2.8814 · model: claude-opus-4-7 |
|
Superseded by #3277 which consolidates PGXL and TGXL applet metering into one PR. |
…3277) ## Summary Consolidates PGXL and TGXL applet metering improvements into one PR. Closes #3276 and the PGXL applet PR. ### PGXL (Amplifier applet) - **External row labels** — PWR, SWR, and Id labels left-aligned at 72 px carry live numeric values (`PWR 933`, `SWR 1.2:1`, `Id 25`); internal gauge labels cleared - **Id bargraph** — new drain-current gauge (0–70 A, red > 60 A) with label row matching SSDR layout - **Bottom info row** — temperature, Vdd, and Vac values displayed in the empty space left of the OPERATE button - **Slow-release fwd-power ballistics** — `{30 ms attack / 800 ms release}` on fwd gauge so brief TX bursts stay visible - **100 ms label throttle** — value labels update at 10 Hz via QTimer; gauge fill animates at full rate - **S-push parser fix** — `PgxlConnection` was silently dropping S-push messages whose KV string began directly with `key=value` (no prefix word); fixed with a conditional instead of an early return - **Telemetry field fixes** — `tempb`, `vdd`, and compound `temp` (`"34.5/28.1"`) now handled in both direct-TCP and radio-proxy data paths ### TGXL (Tuner applet) - **External row labels** — same 72 px PWR/SWR label pattern as PGXL - **Slow-release fwd-power ballistics** — same `{30 ms / 800 ms}` profile - **Label update strategy** — synchronous update on each meter event (no polling timer) with an 800 ms single-shot hold so inter-packet noise below 5 W doesn't cause flicker ### Shared - **`HGauge::setBallistics()`** — added as public API so individual gauges can opt into custom attack/release curves ### Deferred - Id drain-current field name requires pcap analysis to confirm (PGXL protocol not fully documented); field name placeholder in place ## Test plan - [x] PGXL connected: PWR, SWR, Id bars and labels update during TX; temp/Vdd/Vac show in bottom row - [x] PGXL: fwd gauge decays slowly (~800 ms) after TX ends - [x] TGXL connected: PWR and SWR labels appear during TX, hold 800 ms after, no flicker at threshold - [x] No regression on relay bars, TUNE button, OPERATE/BYPASS/STANDBY cycle, antenna switch 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ethersdr#3277) ## Summary Consolidates PGXL and TGXL applet metering improvements into one PR. Closes aethersdr#3276 and the PGXL applet PR. ### PGXL (Amplifier applet) - **External row labels** — PWR, SWR, and Id labels left-aligned at 72 px carry live numeric values (`PWR 933`, `SWR 1.2:1`, `Id 25`); internal gauge labels cleared - **Id bargraph** — new drain-current gauge (0–70 A, red > 60 A) with label row matching SSDR layout - **Bottom info row** — temperature, Vdd, and Vac values displayed in the empty space left of the OPERATE button - **Slow-release fwd-power ballistics** — `{30 ms attack / 800 ms release}` on fwd gauge so brief TX bursts stay visible - **100 ms label throttle** — value labels update at 10 Hz via QTimer; gauge fill animates at full rate - **S-push parser fix** — `PgxlConnection` was silently dropping S-push messages whose KV string began directly with `key=value` (no prefix word); fixed with a conditional instead of an early return - **Telemetry field fixes** — `tempb`, `vdd`, and compound `temp` (`"34.5/28.1"`) now handled in both direct-TCP and radio-proxy data paths ### TGXL (Tuner applet) - **External row labels** — same 72 px PWR/SWR label pattern as PGXL - **Slow-release fwd-power ballistics** — same `{30 ms / 800 ms}` profile - **Label update strategy** — synchronous update on each meter event (no polling timer) with an 800 ms single-shot hold so inter-packet noise below 5 W doesn't cause flicker ### Shared - **`HGauge::setBallistics()`** — added as public API so individual gauges can opt into custom attack/release curves ### Deferred - Id drain-current field name requires pcap analysis to confirm (PGXL protocol not fully documented); field name placeholder in place ## Test plan - [x] PGXL connected: PWR, SWR, Id bars and labels update during TX; temp/Vdd/Vac show in bottom row - [x] PGXL: fwd gauge decays slowly (~800 ms) after TX ends - [x] TGXL connected: PWR and SWR labels appear during TX, hold 800 ms after, no flicker at threshold - [x] No regression on relay bars, TUNE button, OPERATE/BYPASS/STANDBY cycle, antenna switch 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

Summary
Brings the TGXL (Tuner Genius XL) applet's PWR/SWR display to parity with SmartSDR.
What changed
PWR 987,SWR 1.2:1. Internal gauge label is empty, matching the PGXL applet layout.{30 ms attack / 800 ms release}so the bar rises quickly on RF bursts and decays slowly, matching SmartSDR behaviour.PWR/SWRwith no noisy floor reading.HGauge::setBallistics()— added as a public API so individual gauges can opt into custom attack/release curves without subclassing.What's remaining / deferred
tempb/ compoundtempfield) — requires pcap analysis to confirm exact key nameTest plan
🤖 Generated with Claude Code