From bcd045a1bebc816fc47aa83177ec009cfebaabf8 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Mon, 27 Apr 2026 21:58:49 +0300 Subject: [PATCH] Fix CAT settings: load before connect, default TCP port 19090 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Settings.pas: add root-level SaveCATSettings/LoadCATSettings so CAT config is stored independently of device MAC. - MainForm.pas FormCreate: initialize CAT defaults, load from saved 'cat' JSON section, and apply immediately after InitCATEngine — so SettingsForm shows correct values before the transceiver connects. - MainForm.pas OnCATSettingsChange: always save to root 'cat' section (not only when device is connected) so changes persist immediately. - Default TCP CAT port changed from 4992 to 19090 everywhere. Co-Authored-By: Claude Sonnet 4.6 --- MainForm.pas | 20 +++++++++++++++++--- Settings.pas | 48 +++++++++++++++++++++++++++++++++++++++++++++--- SettingsForm.pas | 4 ++-- 3 files changed, 64 insertions(+), 8 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 5079b9a..ce35b63 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -1018,7 +1018,21 @@ begin FWebServer.OnDrive := WebOnDrive; FWebServer.Start; FillChar(FCATLastGlobal, SizeOf(FCATLastGlobal), 0); + FCATLastGlobal.CATTcpPort := 19090; + for i := 0 to 3 do + begin + FCATLastGlobal.CATSerialBaud[i] := 9600; + FCATLastGlobal.CATSerialDataBits[i] := 8; + FCATLastGlobal.CATSerialStopBits[i] := 1; + {$IFDEF MSWINDOWS} + FCATLastGlobal.CATSerialPort[i] := 'COM' + IntToStr(i + 1); + {$ELSE} + FCATLastGlobal.CATSerialPort[i] := '/dev/ttyS' + IntToStr(i); + {$ENDIF} + end; + FSettings.LoadCATSettings(FCATLastGlobal); InitCATEngine; + CATApplySettings(FCATLastGlobal); FSMeterPeak := -130; FSMeterMin := -130; FSMeterAvg := -130; @@ -4756,10 +4770,10 @@ begin FCATLastGlobal.CATTcpEnabled := TcpEnabled; FCATLastGlobal.CATTcpPort := TcpPort; CATApplySettings(FCATLastGlobal); - if FDevConnected then begin + FSettings.SaveCATSettings(FCATLastGlobal); + if FDevConnected then FSettings.SaveGlobal(FDevMAC, MakeGlobalSettings); - FSettings.Save; - end; + FSettings.Save; end; // --- Getters (called from CAT thread — read only, no sync needed) ----------- diff --git a/Settings.pas b/Settings.pas index 69d1525..9d31672 100644 --- a/Settings.pas +++ b/Settings.pas @@ -85,7 +85,7 @@ type CATSerialParity: array[0..3] of Integer; // 0=None, 1=Odd, 2=Even // TCP CAT сервер (один, многоклиентский) CATTcpEnabled: Boolean; - CATTcpPort: Integer; // порт, по умолчанию 4992 + CATTcpPort: Integer; // порт, по умолчанию 19090 end; TSettingsManager = class @@ -125,6 +125,9 @@ type procedure LoadWindowBounds(out L, T, W, H: Integer); procedure SaveStartupPreview(VfoA, VfoB: Double; SampleRate: Integer); function LoadStartupPreview(out VfoA, VfoB: Double; out SampleRate: Integer): Boolean; + // CAT settings — не привязаны к MAC, хранятся в корне JSON (доступны до подключения) + procedure SaveCATSettings(const G: TGlobalSettings); + procedure LoadCATSettings(var G: TGlobalSettings); end; implementation @@ -216,7 +219,7 @@ begin G.CATSerialParity[i] := 0; // None end; G.CATTcpEnabled := False; - G.CATTcpPort := 4992; + G.CATTcpPort := 19090; end; constructor TSettingsManager.Create(const FilePath: string); @@ -428,7 +431,7 @@ begin G.CATSerialParity[i] := JI(GObj,'cat_serial_parity_'+IntToStr(i), 0); end; G.CATTcpEnabled := JB(GObj,'cat_tcp_enabled', False); - G.CATTcpPort := JI(GObj,'cat_tcp_port', 4992); + G.CATTcpPort := JI(GObj,'cat_tcp_port', 19090); for i := 0 to CFG_BAND_COUNT-1 do begin @@ -579,4 +582,43 @@ begin SampleRate := JI(O, 'sample_rate', 192000); end; +procedure TSettingsManager.SaveCATSettings(const G: TGlobalSettings); +var O: TJSONObject; i: Integer; +begin + O := EnsureObj(FRoot, 'cat'); + JW(O, 'tcp_en', G.CATTcpEnabled); + JW(O, 'tcp_port', G.CATTcpPort); + for i := 0 to 3 do + begin + JW(O, 'ser_en_' +IntToStr(i), G.CATSerialEnabled[i]); + JWS(O, 'ser_port_' +IntToStr(i), G.CATSerialPort[i]); + JW(O, 'ser_baud_' +IntToStr(i), G.CATSerialBaud[i]); + JW(O, 'ser_dbits_' +IntToStr(i), G.CATSerialDataBits[i]); + JW(O, 'ser_sbits_' +IntToStr(i), G.CATSerialStopBits[i]); + JW(O, 'ser_parity_'+IntToStr(i), G.CATSerialParity[i]); + end; +end; + +procedure TSettingsManager.LoadCATSettings(var G: TGlobalSettings); +var O: TJSONObject; i: Integer; +begin + if FRoot.Find('cat') = nil then Exit; + O := EnsureObj(FRoot, 'cat'); + G.CATTcpEnabled := JB(O, 'tcp_en', False); + G.CATTcpPort := JI(O, 'tcp_port', 19090); + for i := 0 to 3 do + begin + G.CATSerialEnabled[i] := JB(O, 'ser_en_' +IntToStr(i), False); + {$IFDEF MSWINDOWS} + G.CATSerialPort[i] := JS(O, 'ser_port_' +IntToStr(i), 'COM'+IntToStr(i+1)); + {$ELSE} + G.CATSerialPort[i] := JS(O, 'ser_port_' +IntToStr(i), '/dev/ttyS'+IntToStr(i)); + {$ENDIF} + G.CATSerialBaud[i] := JI(O, 'ser_baud_' +IntToStr(i), 9600); + G.CATSerialDataBits[i] := JI(O, 'ser_dbits_' +IntToStr(i), 8); + G.CATSerialStopBits[i] := JI(O, 'ser_sbits_' +IntToStr(i), 1); + G.CATSerialParity[i] := JI(O, 'ser_parity_'+IntToStr(i), 0); + end; +end; + end. diff --git a/SettingsForm.pas b/SettingsForm.pas index ac11f71..62a39c9 100644 --- a/SettingsForm.pas +++ b/SettingsForm.pas @@ -1445,7 +1445,7 @@ begin FCATTcpEn := TCheckBox.Create(Self); FCATTcpEn.Parent := Grp; - FCATTcpEn.Caption := 'Enable TCP server (default port 4992)'; + FCATTcpEn.Caption := 'Enable TCP server (default port 19090)'; FCATTcpEn.SetBounds(PAD, R1, 300, 22); FCATTcpEn.Font.Color := CLR_TEXT; FCATTcpEn.Font.Name := UI_FONT; FCATTcpEn.Font.Size := 9; @@ -1458,7 +1458,7 @@ begin Spin.Color := CLR_INPUT; Spin.Font.Color := CLR_INPUT_TEXT; Spin.Font.Name := UI_FONT; Spin.Font.Size := 9; Spin.MinValue := 1; Spin.MaxValue := 65535; - Spin.Value := 4992; + Spin.Value := 19090; Spin.OnChange := OnCATTcpChange; FCATTcpPort := Spin; end;