mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 04:47:35 +00:00
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:
+16
-2
@@ -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;
|
||||
end;
|
||||
|
||||
// --- Getters (called from CAT thread — read only, no sync needed) -----------
|
||||
|
||||
+45
-3
@@ -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.
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user