mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix(hpsdr): окно повторов Specific-пакетов — только со старта, не на каждую пере-сборку
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 <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -1700,7 +1700,13 @@ begin
|
|||||||
SendDDCSpecific(Pkt);
|
SendDDCSpecific(Pkt);
|
||||||
FCachedDDCSpec := Pkt;
|
FCachedDDCSpec := Pkt;
|
||||||
FCachedDDCValid := True;
|
FCachedDDCValid := True;
|
||||||
FResendCount := 0;
|
// ★СЧЁТЧИК ПЕРЕ-ОТПРАВКИ ЗДЕСЬ НЕ СБРАСЫВАЕМ. Окно повторов — сугубо
|
||||||
|
// СТАРТОВЫЙ костыль (порты 1025/1026 открываются только после Run=1), и
|
||||||
|
// живёт оно от Run=1. Сброс отсюда превращал его в рецидивирующий: любая
|
||||||
|
// пере-сборка на живой сессии — вход/выход PureSignal в TX (каждый MOX!),
|
||||||
|
// добавление пана, смена rate — заводила ЕЩЁ 10 пере-латчей DDC Specific в
|
||||||
|
// течение 5 секунд. А пере-латч конфига DDC на ходу трогает и ГЛАВНЫЙ
|
||||||
|
// приёмник: ровно этим уже был получен «мусорный» поток на доп. панах.
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure THPSDRNetwork.SetPanDDC(DDCIdx: Integer; Enabled: Boolean;
|
procedure THPSDRNetwork.SetPanDDC(DDCIdx: Integer; Enabled: Boolean;
|
||||||
@@ -1983,7 +1989,11 @@ procedure THPSDRNetwork.SetRunAndFreq(Run: Boolean; DDC0FreqHz, DUCFreqHz: Doubl
|
|||||||
begin
|
begin
|
||||||
// При Run=1 аппаратура сбрасывает счётчик HP-последовательности.
|
// При Run=1 аппаратура сбрасывает счётчик HP-последовательности.
|
||||||
// Синхронизируем свой счётчик чтобы не получить SEQ ERROR на первом пакете.
|
// Синхронизируем свой счётчик чтобы не получить SEQ ERROR на первом пакете.
|
||||||
if Run then FSeqHP := 0;
|
if Run then
|
||||||
|
begin
|
||||||
|
FSeqHP := 0;
|
||||||
|
FResendCount := 0; // окно повторов Specific-пакетов — только со старта
|
||||||
|
end;
|
||||||
FRunning := Run;
|
FRunning := Run;
|
||||||
FCurrentRXFreq := DDC0FreqHz;
|
FCurrentRXFreq := DDC0FreqHz;
|
||||||
FCurrentTXFreq := DUCFreqHz;
|
FCurrentTXFreq := DUCFreqHz;
|
||||||
|
|||||||
Reference in New Issue
Block a user