From e87ca6b1861ee938628c4d320a6ce874e9bd6f32 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 10 Aug 2026 13:55:19 +0300 Subject: [PATCH] =?UTF-8?q?fix(hpsdr):=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20Specific-=D0=BF?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2=20=E2=80=94=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=81=D0=BE=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=B0,=20=D0=BD=D0=B5=20=D0=BD=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D1=83=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5-?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RebuildDDCSpecific сбрасывал FResendCount, а этим счётчиком keepalive-поток управляет окном повторов: пока он меньше 100, каждые 500 мс переотправляются DDC Specific и DUC Specific. Окно задумано как стартовый костыль — порты 1025/1026 на железе открываются только после Run=1. Сброс из пере-сборки делал окно рецидивирующим: любая переконфигурация на живой сессии заводила ещё десять пере-латчей DDC Specific в течение пяти секунд. Вызывают её вход и выход PureSignal из передачи (то есть каждый MOX, когда PS вооружён), добавление и удаление панадаптера, смена sample rate. Пакет конфигурирует все DDC разом, поэтому пере-латч на ходу трогает и главный приёмник — этой же операцией когда-то был получен мусорный поток на доп. панах. С PS и 2TON выходило по двадцать пере-латчей на передачу, что похоже на давний открытый пункт про всплески водопада при 2TON. Счётчик сбрасывается теперь только по Run=1. Размен: повторы заодно маскировали потерю UDP-пакета с конфигом посреди сессии, и переконфигурация стала одним пакетом. Co-Authored-By: Claude Opus 5 --- HPSDRNetwork.pas | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/HPSDRNetwork.pas b/HPSDRNetwork.pas index f5aa109..19b8424 100644 --- a/HPSDRNetwork.pas +++ b/HPSDRNetwork.pas @@ -1700,7 +1700,13 @@ begin SendDDCSpecific(Pkt); FCachedDDCSpec := Pkt; FCachedDDCValid := True; - FResendCount := 0; + // ★СЧЁТЧИК ПЕРЕ-ОТПРАВКИ ЗДЕСЬ НЕ СБРАСЫВАЕМ. Окно повторов — сугубо + // СТАРТОВЫЙ костыль (порты 1025/1026 открываются только после Run=1), и + // живёт оно от Run=1. Сброс отсюда превращал его в рецидивирующий: любая + // пере-сборка на живой сессии — вход/выход PureSignal в TX (каждый MOX!), + // добавление пана, смена rate — заводила ЕЩЁ 10 пере-латчей DDC Specific в + // течение 5 секунд. А пере-латч конфига DDC на ходу трогает и ГЛАВНЫЙ + // приёмник: ровно этим уже был получен «мусорный» поток на доп. панах. end; procedure THPSDRNetwork.SetPanDDC(DDCIdx: Integer; Enabled: Boolean; @@ -1983,7 +1989,11 @@ procedure THPSDRNetwork.SetRunAndFreq(Run: Boolean; DDC0FreqHz, DUCFreqHz: Doubl begin // При Run=1 аппаратура сбрасывает счётчик HP-последовательности. // Синхронизируем свой счётчик чтобы не получить SEQ ERROR на первом пакете. - if Run then FSeqHP := 0; + if Run then + begin + FSeqHP := 0; + FResendCount := 0; // окно повторов Specific-пакетов — только со старта + end; FRunning := Run; FCurrentRXFreq := DDC0FreqHz; FCurrentTXFreq := DUCFreqHz;