[feat](trx-frontend-http): add APRS decoder plugin with sub-tab navigation

Replace server-side /frontends endpoint with client-side plugin system.
The Plugins tab now has Overview and APRS sub-tabs. The APRS plugin
decodes packets from RX audio using Bell 202 AFSK demodulation (1200
baud), AX.25 frame decoding with NRZI/HDLC, and CRC-16-CCITT
validation. Decoded packets are displayed in a scrolling log.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
2026-02-08 14:11:58 +01:00
parent 7eaa39ea4a
commit d44390db00
4 changed files with 389 additions and 17 deletions
@@ -118,7 +118,25 @@
</div>
</div>
<div id="tab-plugins" class="tab-panel" style="display:none;">
<div id="plugins-list"></div>
<div class="sub-tab-bar">
<button class="sub-tab active" data-subtab="overview">Overview</button>
<button class="sub-tab" data-subtab="aprs">APRS</button>
</div>
<div id="subtab-overview" class="sub-tab-panel">
<div class="plugin-item">
<strong>APRS Decoder</strong>
<div style="color:var(--text-muted); font-size:0.85rem; margin-top:0.2rem;">
Decodes APRS packets from RX audio using Bell 202 AFSK (1200 baud). Switch to the APRS tab to start.
</div>
</div>
</div>
<div id="subtab-aprs" class="sub-tab-panel" style="display:none;">
<div class="aprs-controls">
<button id="aprs-toggle-btn" type="button">Start APRS</button>
<small id="aprs-status" style="color:var(--text-muted);">Stopped</small>
</div>
<div id="aprs-packets"></div>
</div>
</div>
<div id="tab-about" class="tab-panel" style="display:none;">
<table class="about-table">