chore(tx): детектор голодания снят — всплесков не видно, вернём при нужде

Прибор из b173b7f отработал своё на этом заходе: всплески не появляются, и
держать его в тракте нет причин. Снято ровно то, что тот коммит поставил:
юнит TxHealth.pas, замеры простоев в отправителе DUC (обе ветки), публикация
контекста пейсинга из планировщика TCI, счёт бита HPS_FIFO_EMPTY, вызовы
TxHealthService в таймере UI и цикле демона, индикатор «·сухо N» в статусной
строке и секция G стенда.

Вернуть — реверсом этого коммита; опора детектора и правило его устройства
(в тракте передачи ничего, кроме записи в память) записаны в
test/hpsdr/README.md, чтобы не восстанавливать рассуждение заново.

Проверено: test/tci 262/262, test/cat 50/50, GUI (--ws=qt6) и демон собираются.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bkwwyj7xVRrqnSVEseTRfV
This commit is contained in:
2026-08-24 19:25:57 +03:00
co-authored by Claude Opus 5
parent b173b7f542
commit 867da5921e
8 changed files with 30 additions and 553 deletions
+5 -17
View File
@@ -40,7 +40,7 @@ uses
PanZoomBar, PanafallPanel, PanDisplayPopup, PureSignalPopup, FlatPopupMenu,
WidebandView,
StatusBar,
PlatformUtils, TxHealth,
PlatformUtils,
RadioModes,
WinFirewall,
BoardUtils, WisdomBuilder, UISync,
@@ -3822,14 +3822,9 @@ var
PeakTarget, MinTarget: Double;
PeakDiff, MinDiff: Double;
PeakAlpha, MinAlpha: Double;
TxhSuffix: string;
begin
// Затухание спотов не зависит от того, крутится ли приём.
ServiceDXCluster;
// Детектор голодания очереди TX: сводки за прошедшие передачи → журнал.
// ★Это ЕДИНСТВЕННОЕ место, где прибор трогает диск, и оно намеренно вынесено
// из тракта передачи в таймер UI (см. TxHealth.pas).
TxHealthService;
if not FController.FRunning then
begin
@@ -3882,24 +3877,17 @@ begin
if FController.FWDSPReady then
begin
// Опасные простои очереди TX за сеанс: столько раз очередь пустела дольше
// подушки отправителя, то есть столько раз в эфир могла уйти голая несущая.
// Ноль — значит всплеск, если он был виден, родился НЕ в нашем тракте.
if TxHealthDangerTotal > 0 then
TxhSuffix := Format(' ·сухо %d', [TxHealthDangerTotal])
else
TxhSuffix := '';
if FController.FTransmitting then
begin
case FController.FDSPEngine.TXMicSource of
txmsSoundCard: SetStatusText(5, 'TX sound card' + TxhSuffix);
txmsWeb: SetStatusText(5, 'TX web mic' + TxhSuffix);
txmsSoundCard: SetStatusText(5, 'TX sound card');
txmsWeb: SetStatusText(5, 'TX web mic');
else
SetStatusText(5, 'TX radio mic' + TxhSuffix);
SetStatusText(5, 'TX radio mic');
end;
end
else
SetStatusText(5, 'TX idle' + TxhSuffix);
SetStatusText(5, 'TX idle');
end;
end;