mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat(oc): OC Control — Open Collector выходы Penny/Alex (эталон Thetis)
Byte 1401 High Priority packet: per-band (HF 160m-6m) и per-slot (XVTR) RX/TX-маски на 7 пинов + TX pin action (MOX/TUNE/2TON и комбинации). Только openHPSDR — у Pluto/AD936x такого выхода нет, вкладка Settings скрывается на этом бэкенде. Настройки — вкладка "OC Control" в SettingsForm. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+12
-7
@@ -407,6 +407,7 @@ type
|
||||
// ---- Конфиги / устройство (per-MAC) ----
|
||||
FTXSettings: TTXSettings;
|
||||
FAlexSettings: TAlexSettings;
|
||||
FOCSettings: TOCSettings; // OC Control (Open Collector, openHPSDR-only)
|
||||
// Антенные разъёмы AD936x (Pluto/LibreSDR) на диапазон/трансвертер.
|
||||
FAnt936x: TAD936xAnt;
|
||||
FXvtrSettings: TXvtrSettings;
|
||||
@@ -1187,7 +1188,7 @@ begin
|
||||
if Assigned(FNetwork) and FNetwork.Connected and FNetwork.Running then
|
||||
begin
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz),
|
||||
FDriveLevel, FTransmitting, True, True);
|
||||
FDriveLevel, FTransmitting, True, True, FTuning, FTwoTone);
|
||||
FNetwork.SendFullHP;
|
||||
end;
|
||||
end;
|
||||
@@ -4273,7 +4274,8 @@ begin
|
||||
En := False; DisablePA := False; RxAnt := 0;
|
||||
end;
|
||||
if Assigned(FNetwork) and FNetwork.Connected then
|
||||
FNetwork.SetXvtrMode(En, DisablePA, RxAnt);
|
||||
if En then FNetwork.SetXvtrMode(En, DisablePA, RxAnt, FCurrentXvtr)
|
||||
else FNetwork.SetXvtrMode(En, DisablePA, RxAnt, -1);
|
||||
end;
|
||||
|
||||
procedure TRadioController.ActivateXvtr(Idx: Integer);
|
||||
@@ -4903,7 +4905,7 @@ begin
|
||||
begin
|
||||
FNetwork.ClearDUCIQQueue;
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz),
|
||||
FDriveLevel, True, True, True);
|
||||
FDriveLevel, True, True, True, FTuning, FTwoTone);
|
||||
FNetwork.SendFullHP; // 1й пакет: Alex bit27=1 (T/R relay), drive — без PTT
|
||||
FNetwork.SendPTT(True); // 2й пакет: PTT=1 после переключения реле
|
||||
// PureSignal: перевести feedback-DDC0/1 в TX-конфигурацию (частоты = TX,
|
||||
@@ -4982,7 +4984,7 @@ begin
|
||||
// PureSignal: вернуть DDC0/1 в RX-конфигурацию (убрать feedback-DDC).
|
||||
FNetwork.SetPureSignalTX(False);
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz),
|
||||
FDriveLevel, False, True, True);
|
||||
FDriveLevel, False, True, True, FTuning, FTwoTone);
|
||||
FNetwork.ClearDUCIQQueue;
|
||||
FNetwork.SendFullHP; // 2й пакет: Alex bit27=0 (T/R relay RX)
|
||||
end;
|
||||
@@ -5023,7 +5025,7 @@ begin
|
||||
if Assigned(FNetwork) and FNetwork.Connected and FNetwork.Running then
|
||||
begin
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz),
|
||||
FDriveLevel, FTransmitting, True, True);
|
||||
FDriveLevel, FTransmitting, True, True, FTuning, FTwoTone);
|
||||
FNetwork.SendFullHP;
|
||||
end;
|
||||
end;
|
||||
@@ -5506,7 +5508,7 @@ begin
|
||||
// Сначала отправляем Run=1 — эмулятор/железо создают ddc_specific_thread
|
||||
// (порт 1025) и rx_thread (порт 1035+) только после получения HP Run=1.
|
||||
// DDC Specific и DUC Specific отправляем ПОСЛЕ, иначе порты ещё не открыты.
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz), FDriveLevel, False, True, True);
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz), FDriveLevel, False, True, True, FTuning, FTwoTone);
|
||||
FNetwork.SetRunAndFreq(True, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), FDriveLevel);
|
||||
FRunning := True;
|
||||
FRXStartTime := GetTickCount64;
|
||||
@@ -5557,7 +5559,7 @@ begin
|
||||
// (3.3 UI пересоздаст по персисту при следующем старте).
|
||||
for p := 1 to MAX_PANS - 1 do
|
||||
RemovePanDDC(p);
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz), 0, False, True, True);
|
||||
FNetwork.UpdateState(XvtrTranslate(FCenterFreq), XvtrTranslateTX(ActiveTXFreqHz), 0, False, True, True, FTuning, FTwoTone);
|
||||
FNetwork.SetRunAndFreq(False, XvtrTranslate(FCenterFreq), XvtrTranslate(FCenterFreq), 0);
|
||||
FRunning := False;
|
||||
FTransmitting := False;
|
||||
@@ -5744,6 +5746,8 @@ begin
|
||||
FSettings.LoadAlex(FDevMAC, FAlexSettings);
|
||||
FSettings.LoadAnt936x(FDevMAC, FAnt936x);
|
||||
FNetwork.SetAlexConfig(FAlexSettings);
|
||||
FSettings.LoadOC(FDevMAC, FOCSettings);
|
||||
FNetwork.SetOCConfig(FOCSettings); // no-op на Pluto (base-класс)
|
||||
FSettings.LoadXvtr(FDevMAC, FXvtrSettings);
|
||||
FCurrentXvtr := -1;
|
||||
ApplyXvtrToNetwork;
|
||||
@@ -5914,6 +5918,7 @@ begin
|
||||
SaveGlobalSettings;
|
||||
FSettings.SaveAlex(FDevMAC, FAlexSettings);
|
||||
FSettings.SaveAnt936x(FDevMAC, FAnt936x);
|
||||
FSettings.SaveOC(FDevMAC, FOCSettings);
|
||||
// XVTR LastFreq → актуальная видимая частота в момент остановки.
|
||||
if (FCurrentXvtr >= 0) and (FCurrentXvtr < CFG_XVTR_COUNT) then
|
||||
FXvtrSettings.Entries[FCurrentXvtr].LastFreq := FVfoA;
|
||||
|
||||
Reference in New Issue
Block a user