mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix RX leak after TX→RX: drop IQ during TX in non-DUP, Windows post-TX hold
В non-DUP при MOX/TUN на возврате слышен и виден на водопаде хвост
своего сигнала. Во время TX RX-IQ оседал в RXA pipeline / FFT-истории
RX-анализатора и «выстреливал» при открытии гейта.
- WDSPEngine: KeepRXDuringTX (DUP-флаг). В non-DUP TX PushIQItemToDSP
дропает пакеты на входе DSP-потока — RXA и анализатор не кормятся.
- Windows-only post-TX hold (250 мс): дропаем И входящие RX-IQ, И аудио
в окне после MOX-off, чтобы скрыть «хвост» от FPGA TX-buffer/PA
slew-down радио. На Linux код-путь не активируется (буфер OS мелкий).
- Network: ClearDUCIQQueue + IsTransmitting guard в DUC sender thread,
чтобы недопереданные TX-IQ пакеты не уходили после MOX-off.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -193,6 +193,7 @@ type
|
||||
procedure SendFullHP;
|
||||
procedure SendDDCAudio(const LeftRight: array of SmallInt);
|
||||
procedure SendDUCIQ(const IData, QData: array of Integer);
|
||||
procedure ClearDUCIQQueue;
|
||||
|
||||
property Connected: Boolean read FConnected;
|
||||
property Running: Boolean read FRunning;
|
||||
@@ -493,6 +494,8 @@ begin
|
||||
|
||||
WaitUntil(NextDueUs);
|
||||
if Terminated then Break;
|
||||
if not FNet.FIsTransmitting then
|
||||
Continue;
|
||||
|
||||
FNet.PackSeqBytes(Pkt.Seq, FNet.NextSeq(FNet.FSeqDUCIQ));
|
||||
FNet.DoSendTo(FNet.FSocket, Pkt, SizeOf(Pkt), FNet.FDevice.IPAddress,
|
||||
@@ -519,6 +522,8 @@ begin
|
||||
|
||||
if Terminated then Break;
|
||||
DrainVirtualFIFO;
|
||||
if not FNet.FIsTransmitting then
|
||||
Continue;
|
||||
|
||||
FNet.PackSeqBytes(Pkt.Seq, FNet.NextSeq(FNet.FSeqDUCIQ));
|
||||
FNet.DoSendTo(FNet.FSocket, Pkt, SizeOf(Pkt), FNet.FDevice.IPAddress,
|
||||
@@ -646,6 +651,11 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure THPSDRNetwork.ClearDUCIQQueue;
|
||||
begin
|
||||
ResetDUCIQQueue;
|
||||
end;
|
||||
|
||||
procedure THPSDRNetwork.EnqueueDUCIQ(const Pkt: TDUCIQPacket);
|
||||
begin
|
||||
FDUCIQLock.Enter;
|
||||
|
||||
Reference in New Issue
Block a user