mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feat(cat): wire split/FM/CTUN/AGC-T CAT commands to controller
Реализованы команды, ранее бывшие заглушками — функционал уже был в TRadioController, но не пробрасывался в CAT: - Split TX: ZZSP/FT/FR + split-байт в IF (новый RadioController.SetSplit) - FM Squelch: SQ (0–255), ZZSQ (0–100%), ZZSO (on/off) - FM CTCSS: CT/ZZTA (on), CN (1-based)/ZZTB (0-based тон) - FM-репитер: OF (offset), OS (направление, с трансляцией Kenwood↔RPT_*) - FM step: ZZST (00–03) - CTUN: ZZCN; AGC-T/RF gain: ZZAR - ANF: ZZNT (раньше ошибочно алиас NB) - Шаги VFO: ZZAU/ZZBP (исправлен баг — были алиасы ZZFA/ZZAP), ZZSU TCATContext расширен callback'ами (split, squelch, CTCSS, repeater, step, AGC-T, CTUN); CATAdapter — геттеры/сеттеры/sync с маршалингом через Invoke. Добавлен doc/CAT_STATUS.md — полный статус CAT и план работ. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+121
@@ -52,6 +52,16 @@ type
|
||||
function GetRunning: Boolean;
|
||||
function GetSMeter: Double;
|
||||
function GetBand: Integer;
|
||||
function GetSplit: Boolean;
|
||||
function GetSquelchOn: Boolean;
|
||||
function GetSquelchLevel: Integer;
|
||||
function GetCTCSSOn: Boolean;
|
||||
function GetCTCSSTone: Integer;
|
||||
function GetFMRptDir: Integer;
|
||||
function GetFMRptOffset: Double;
|
||||
function GetFMStep: Integer;
|
||||
function GetAGCTop: Integer;
|
||||
function GetCTun: Boolean;
|
||||
|
||||
// ── Сеттеры/команды (из CAT-потока → Invoke в поток контроллера) ──
|
||||
procedure SetVfoA(V: Double);
|
||||
@@ -72,6 +82,16 @@ type
|
||||
procedure DoTuneUp;
|
||||
procedure DoTuneDown;
|
||||
procedure DoBandByIndex(Idx: Integer);
|
||||
procedure SetSplit(V: Boolean);
|
||||
procedure SetSquelchOn(V: Boolean);
|
||||
procedure SetSquelchLevel(V: Integer);
|
||||
procedure SetCTCSSOn(V: Boolean);
|
||||
procedure SetCTCSSTone(V: Integer);
|
||||
procedure SetFMRptDir(V: Integer);
|
||||
procedure SetFMRptOffset(V: Double);
|
||||
procedure SetFMStep(V: Integer);
|
||||
procedure SetAGCTop(V: Integer);
|
||||
procedure SetCTun(V: Boolean);
|
||||
|
||||
// ── Sync-методы (выполняются в потоке контроллера) ──
|
||||
procedure SyncVfoA;
|
||||
@@ -92,6 +112,16 @@ type
|
||||
procedure SyncTuneUp;
|
||||
procedure SyncTuneDown;
|
||||
procedure SyncBandByIndex;
|
||||
procedure SyncSplit;
|
||||
procedure SyncSquelchOn;
|
||||
procedure SyncSquelchLevel;
|
||||
procedure SyncCTCSSOn;
|
||||
procedure SyncCTCSSTone;
|
||||
procedure SyncFMRptDir;
|
||||
procedure SyncFMRptOffset;
|
||||
procedure SyncFMStep;
|
||||
procedure SyncAGCTop;
|
||||
procedure SyncCTun;
|
||||
public
|
||||
constructor Create(AController: TRadioController);
|
||||
destructor Destroy; override;
|
||||
@@ -144,6 +174,26 @@ begin
|
||||
Ctx.DoTuneUp := @DoTuneUp;
|
||||
Ctx.DoTuneDown := @DoTuneDown;
|
||||
Ctx.DoBandByIndex := @DoBandByIndex;
|
||||
Ctx.GetSplit := @GetSplit;
|
||||
Ctx.SetSplit := @SetSplit;
|
||||
Ctx.GetSquelchOn := @GetSquelchOn;
|
||||
Ctx.SetSquelchOn := @SetSquelchOn;
|
||||
Ctx.GetSquelchLevel := @GetSquelchLevel;
|
||||
Ctx.SetSquelchLevel := @SetSquelchLevel;
|
||||
Ctx.GetCTCSSOn := @GetCTCSSOn;
|
||||
Ctx.SetCTCSSOn := @SetCTCSSOn;
|
||||
Ctx.GetCTCSSTone := @GetCTCSSTone;
|
||||
Ctx.SetCTCSSTone := @SetCTCSSTone;
|
||||
Ctx.GetFMRptDir := @GetFMRptDir;
|
||||
Ctx.SetFMRptDir := @SetFMRptDir;
|
||||
Ctx.GetFMRptOffset := @GetFMRptOffset;
|
||||
Ctx.SetFMRptOffset := @SetFMRptOffset;
|
||||
Ctx.GetFMStep := @GetFMStep;
|
||||
Ctx.SetFMStep := @SetFMStep;
|
||||
Ctx.GetAGCTop := @GetAGCTop;
|
||||
Ctx.SetAGCTop := @SetAGCTop;
|
||||
Ctx.GetCTun := @GetCTun;
|
||||
Ctx.SetCTun := @SetCTun;
|
||||
|
||||
FEngine := TCATEngine.Create(Ctx);
|
||||
FSerial := TCATSerialManager.Create(FEngine);
|
||||
@@ -203,6 +253,16 @@ function TCATAdapter.GetTX: Boolean; begin Result := FController.FTransm
|
||||
function TCATAdapter.GetRunning: Boolean; begin Result := FController.FRunning; end;
|
||||
function TCATAdapter.GetSMeter: Double; begin Result := FController.FLastSMeter; end;
|
||||
function TCATAdapter.GetBand: Integer; begin Result := FController.FCurrentBand; end;
|
||||
function TCATAdapter.GetSplit: Boolean; begin Result := FController.FSplitTxB; end;
|
||||
function TCATAdapter.GetSquelchOn: Boolean; begin Result := FController.FFMSQOn; end;
|
||||
function TCATAdapter.GetSquelchLevel: Integer; begin Result := FController.FFMSQLevel; end;
|
||||
function TCATAdapter.GetCTCSSOn: Boolean; begin Result := FController.FFMCTCSSOn; end;
|
||||
function TCATAdapter.GetCTCSSTone: Integer; begin Result := FController.FFMCTCSSToneIdx; end;
|
||||
function TCATAdapter.GetFMRptDir: Integer; begin Result := FController.FFMRptDir; end;
|
||||
function TCATAdapter.GetFMRptOffset: Double; begin Result := FController.FFMRptOffsetHz; end;
|
||||
function TCATAdapter.GetFMStep: Integer; begin Result := FController.FFMStepIdx; end;
|
||||
function TCATAdapter.GetAGCTop: Integer; begin Result := FController.FAGCTop; end;
|
||||
function TCATAdapter.GetCTun: Boolean; begin Result := FController.FCTun; end;
|
||||
|
||||
// ── Сеттеры (маршалинг) ──────────────────────────────────────────────────────
|
||||
procedure TCATAdapter.SetVfoA(V: Double);
|
||||
@@ -321,4 +381,65 @@ begin FSyncInt := Idx; FController.Invoke(@SyncBandByIndex); end;
|
||||
procedure TCATAdapter.SyncBandByIndex;
|
||||
begin FController.SetBand(FSyncInt); end;
|
||||
|
||||
// ── Split / FM (squelch, CTCSS, repeater, step) ───────────────────────────────
|
||||
procedure TCATAdapter.SetSplit(V: Boolean);
|
||||
begin FSyncBool := V; FController.Invoke(@SyncSplit); end;
|
||||
|
||||
procedure TCATAdapter.SyncSplit;
|
||||
begin FController.SetSplit(FSyncBool); end;
|
||||
|
||||
procedure TCATAdapter.SetSquelchOn(V: Boolean);
|
||||
begin FSyncBool := V; FController.Invoke(@SyncSquelchOn); end;
|
||||
|
||||
procedure TCATAdapter.SyncSquelchOn;
|
||||
begin FController.SetFMSquelch(FSyncBool); end;
|
||||
|
||||
procedure TCATAdapter.SetSquelchLevel(V: Integer);
|
||||
begin FSyncInt := V; FController.Invoke(@SyncSquelchLevel); end;
|
||||
|
||||
procedure TCATAdapter.SyncSquelchLevel;
|
||||
begin FController.SetFMSquelchLevel(FSyncInt); end;
|
||||
|
||||
procedure TCATAdapter.SetCTCSSOn(V: Boolean);
|
||||
begin FSyncBool := V; FController.Invoke(@SyncCTCSSOn); end;
|
||||
|
||||
procedure TCATAdapter.SyncCTCSSOn;
|
||||
begin FController.SetFMCTCSS(FSyncBool); end;
|
||||
|
||||
procedure TCATAdapter.SetCTCSSTone(V: Integer);
|
||||
begin FSyncInt := V; FController.Invoke(@SyncCTCSSTone); end;
|
||||
|
||||
procedure TCATAdapter.SyncCTCSSTone;
|
||||
begin FController.SetFMCTCSSTone(FSyncInt); end;
|
||||
|
||||
procedure TCATAdapter.SetFMRptDir(V: Integer);
|
||||
begin FSyncInt := V; FController.Invoke(@SyncFMRptDir); end;
|
||||
|
||||
procedure TCATAdapter.SyncFMRptDir;
|
||||
begin FController.SetFMRpt(FSyncInt); end;
|
||||
|
||||
procedure TCATAdapter.SetFMRptOffset(V: Double);
|
||||
begin FSyncFreq := V; FController.Invoke(@SyncFMRptOffset); end;
|
||||
|
||||
procedure TCATAdapter.SyncFMRptOffset;
|
||||
begin FController.SetFMRptOffset(FSyncFreq); end;
|
||||
|
||||
procedure TCATAdapter.SetFMStep(V: Integer);
|
||||
begin FSyncInt := V; FController.Invoke(@SyncFMStep); end;
|
||||
|
||||
procedure TCATAdapter.SyncFMStep;
|
||||
begin FController.SetFMStep(FSyncInt); end;
|
||||
|
||||
procedure TCATAdapter.SetAGCTop(V: Integer);
|
||||
begin FSyncInt := V; FController.Invoke(@SyncAGCTop); end;
|
||||
|
||||
procedure TCATAdapter.SyncAGCTop;
|
||||
begin FController.SetAGCTop(FSyncInt); end;
|
||||
|
||||
procedure TCATAdapter.SetCTun(V: Boolean);
|
||||
begin FSyncBool := V; FController.Invoke(@SyncCTun); end;
|
||||
|
||||
procedure TCATAdapter.SyncCTun;
|
||||
begin FController.SetCTun(FSyncBool); end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user