Fix CAT settings: load before connect, default TCP port 19090

- 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 <noreply@anthropic.com>
This commit is contained in:
2026-04-27 21:58:49 +03:00
co-authored by Claude Sonnet 4.6
parent 1a264b684e
commit bcd045a1be
3 changed files with 64 additions and 8 deletions
+45 -3
View File
@@ -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.