fix web TX spectrum position in CTUN mode

Add 'dup' field to state JSON (FDisplayDuplex). In CTUN+non-DUP TX,
use vfo_a_hz as spectrum center so the TX signal renders at the VFO
position instead of the display center. In CTUN+DUP TX, keep center_hz
so the RX spectrum stays correctly positioned at the filter.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 16:15:34 +03:00
co-authored by Claude Sonnet 4.6
parent 9ae77ddeb4
commit 22e01a6e3f
3 changed files with 11 additions and 6 deletions
+7 -4
View File
@@ -218,6 +218,7 @@ type
FAttnIdx: Integer;
FOnTun: TWebCmdTun;
FTuning: Boolean;
FDuplex: Boolean;
FWebClientActive: Boolean;
@@ -262,7 +263,7 @@ type
CenterHz: Double; FilterIdx: Integer;
VfoB: Double; ActiveVfo: Integer;
Transmitting: Boolean; DriveLevel: Integer;
AttnIdx: Integer; Tuning: Boolean);
AttnIdx: Integer; Tuning: Boolean; Duplex: Boolean);
property WebClientActive: Boolean read FWebClientActive;
@@ -1133,7 +1134,7 @@ begin
'"wf_agc":%s,"wf_nf":%s,"band_idx":%d,"smeter_dbm":%.1f,' +
'"running":%s,"mute":%s,"ctun":%s,' +
'"nr_mode":%d,"nr":%s,"nb_mode":%d,"nb":%s,"snb":%s,"anf":%s,"connected":%s,' +
'"transmitting":%s,"drive":%d,"attn_idx":%d,"tuning":%s}',
'"transmitting":%s,"drive":%d,"attn_idx":%d,"tuning":%s,"dup":%s}',
[FFreq, FVfoB, FActiveVfo,
FMode, MODE_N[FMode mod 8],
FFilterIdx, FFilterBW,
@@ -1155,7 +1156,8 @@ begin
BoolToStr(FTransmitting, 'true', 'false'),
FDriveLevel,
FAttnIdx,
BoolToStr(FTuning, 'true', 'false')
BoolToStr(FTuning, 'true', 'false'),
BoolToStr(FDuplex, 'true', 'false')
]);
finally
FStateLock.Leave;
@@ -1222,7 +1224,7 @@ procedure TWebServer.PushSpectrum(
CenterHz: Double; FilterIdx: Integer;
VfoB: Double; ActiveVfo: Integer;
Transmitting: Boolean; DriveLevel: Integer;
AttnIdx: Integer; Tuning: Boolean);
AttnIdx: Integer; Tuning: Boolean; Duplex: Boolean);
var N, i: Integer;
begin
if not FRunning then Exit;
@@ -1258,6 +1260,7 @@ begin
FDriveLevel := DriveLevel;
FAttnIdx := AttnIdx;
FTuning := Tuning;
FDuplex := Duplex;
finally
FStateLock.Leave;
end;