mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Phase 5 (batch 27): move Run=0 teardown (StopRunning) into the controller
Extract the graceful Run=0 teardown from BtnStartStopClick's STOP branch into TRadioController.StopRunning: UpdateState/SetRunAndFreq(False) at zero drive, clear FRunning/FTransmitting, SetTXRun(False), reset RX telemetry, emit Changed(rfTransmitting) + rfRunning. The network stays Connected so the UI wrapper can persist state before Disconnect. New OnControllerState(rfRunning) render handles the START/STOP button, BtnMOX.Enabled and sleep inhibit; the context-specific offline status text stays with the caller. FormClose reuses StopRunning (same teardown). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
452795dc59
commit
9fdfc67f65
+24
-24
@@ -1306,6 +1306,24 @@ begin
|
||||
end; // (DUC-очередь сбрасывает SetMOX)
|
||||
rfTuning:
|
||||
StyleButton(BtnTUN, FController.FTuning);
|
||||
rfRunning:
|
||||
// Run-состояние: кнопка START/STOP, доступность MOX, запрет сна.
|
||||
// Текст offline-статуса контекстно-зависим (Disconnected / Connection
|
||||
// lost / …) — его ставит вызывающий, не общий рендер.
|
||||
if FController.FRunning then
|
||||
begin
|
||||
InhibitSleep;
|
||||
BtnStartStop.Caption := 'STOP';
|
||||
StyleButton(BtnStartStop, True);
|
||||
BtnMOX.Enabled := True;
|
||||
end
|
||||
else
|
||||
begin
|
||||
UninhibitSleep;
|
||||
BtnStartStop.Caption := 'START';
|
||||
StyleButton(BtnStartStop, False);
|
||||
BtnMOX.Enabled := False;
|
||||
end;
|
||||
rfADCOverload:
|
||||
if FSpecView <> nil then
|
||||
begin
|
||||
@@ -1450,15 +1468,7 @@ begin
|
||||
// Останавливаем трансивер как при нажатии STOP
|
||||
if FController.FNetwork.Connected then
|
||||
begin
|
||||
if FController.FRunning then
|
||||
begin
|
||||
FController.FNetwork.UpdateState(XvtrTranslate(FController.FCenterFreq), XvtrTranslate(ActiveTXFreqHz), 0, False, True, True);
|
||||
FController.FNetwork.SetRunAndFreq(False, XvtrTranslate(FController.FCenterFreq), XvtrTranslate(FController.FCenterFreq), 0);
|
||||
FController.FRunning := False;
|
||||
UninhibitSleep;
|
||||
FController.FTransmitting := False;
|
||||
if FController.FWDSPReady then FController.FDSPEngine.SetTXRun(False);
|
||||
end;
|
||||
FController.StopRunning;
|
||||
FController.FNetwork.Disconnect;
|
||||
end;
|
||||
CloseAction := caFree;
|
||||
@@ -3643,18 +3653,9 @@ begin
|
||||
if FController.FNetwork.Connected then
|
||||
begin
|
||||
// --- STOP ---
|
||||
if FController.FRunning then
|
||||
begin
|
||||
FController.FNetwork.UpdateState(XvtrTranslate(FController.FCenterFreq), XvtrTranslate(ActiveTXFreqHz), 0, False, True, True);
|
||||
FController.FNetwork.SetRunAndFreq(False, XvtrTranslate(FController.FCenterFreq), XvtrTranslate(FController.FCenterFreq), 0);
|
||||
FController.FRunning := False;
|
||||
UninhibitSleep;
|
||||
FController.FTransmitting := False;
|
||||
if FController.FWDSPReady then FController.FDSPEngine.SetTXRun(False);
|
||||
StyleButton(BtnMOX, False);
|
||||
end;
|
||||
FController.FRXPacketCount := 0;
|
||||
FController.FActiveDDC := 0;
|
||||
// Движок (graceful Run=0, сброс TX/телеметрии) + рендер run-кнопки/MOX/sleep
|
||||
// — в контроллере (StopRunning + OnControllerState rfRunning/rfTransmitting).
|
||||
FController.StopRunning;
|
||||
// Сохраняем текущую частоту/настройки чтобы следующий START восстановил их
|
||||
if FController.FDevConnected then
|
||||
begin
|
||||
@@ -3672,10 +3673,9 @@ begin
|
||||
FSpecView.DrawSpectrum;
|
||||
PbSpectrum.Invalidate;
|
||||
FController.FNetwork.Disconnect;
|
||||
BtnStartStop.Caption := 'START';
|
||||
StyleButton(BtnStartStop, False);
|
||||
// Run-кнопка/MOX уже перерисованы StopRunning (rfRunning); здесь только
|
||||
// контекстный offline-статус.
|
||||
SetRadioOfflineStatus('Disconnected', True);
|
||||
BtnMOX.Enabled := False;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user