mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 22:37:32 +00:00
feat: Pluto TX path — attenuation-based power, full-duplex IQ stream
TX path for Pluto/AD936x (RX was already working): - PlutoBackend: continuous full-duplex TX stream (cf-ad9361-dds-core-lpc) with FIFO + push thread; SendDUCIQ upsamples WDSP 192k -> device rate (integer, linear interp), 24->16 bit, Q inverted; zeros on underrun. - Power via output attenuator (ADI-recommended): SetTxAtten writes hardwaregain on voltage0(out). Controller maps drive% -> dB (PlutoTxAttForDrive/ApplyPlutoTxAtten); -89.75 dB on RX (~off), ceiling PlutoTxMaxAttDb on 100% drive. - Configurable max-att (default -10 dB, ADI-linear) for external amp: persisted in global settings, UI spin on PA page, routed through controller SetPlutoTxMaxAtt (UI stays decoupled from logic). - RadioBackend: virtual SetTxAtten (no-op for HPSDR). - Update doc/PLUTO_INTEGRATION_PLAN.md: phases 3/4/5 + risks. Builds clean (headless + qt6 GUI). Not yet verified on hardware. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -498,6 +498,7 @@ type
|
||||
function DefaultMicSource: TTXMicSource;
|
||||
procedure ApplyMOX(Active: Boolean);
|
||||
procedure OnPASettingsChange(MaxPower: Double; const BandCal: array of Double);
|
||||
procedure OnPlutoTxMaxAttChange(MaxAttDb: Double);
|
||||
procedure OnVHFCalSettingsChange(const VHFCal: array of Double);
|
||||
procedure OnTXSettingsChange(const T: TTXSettings);
|
||||
procedure BtnAGCModeClick(Sender: TObject);
|
||||
@@ -5053,6 +5054,12 @@ begin
|
||||
FController.FNetwork.UpdateState(XvtrTranslate(FController.FCenterFreq), XvtrTranslate(ActiveTXFreqHz), FController.FDriveLevel, FController.FTransmitting, True, True);
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnPlutoTxMaxAttChange(MaxAttDb: Double);
|
||||
begin
|
||||
// Логика (clamp/apply/persist) — в контроллере; UI лишь передаёт значение.
|
||||
FController.SetPlutoTxMaxAtt(MaxAttDb);
|
||||
end;
|
||||
|
||||
procedure TMainForm.OnVHFCalSettingsChange(const VHFCal: array of Double);
|
||||
var i: Integer;
|
||||
begin
|
||||
@@ -5708,6 +5715,7 @@ begin
|
||||
SF.OnVisibilityChange := ApplyVisibility;
|
||||
SF.OnFPSChange := ApplyFPS;
|
||||
SF.OnPAChange := OnPASettingsChange;
|
||||
SF.OnPlutoTxChange := OnPlutoTxMaxAttChange;
|
||||
SF.OnVHFCalChange := OnVHFCalSettingsChange;
|
||||
SF.OnCATChange := OnCATSettingsChange;
|
||||
SF.OnThemeChange := SetLightTheme;
|
||||
@@ -5726,6 +5734,7 @@ begin
|
||||
IfThen(FController.FNetwork.Connected, FController.FNetwork.Device.BoardType, FPendingBoardType));
|
||||
SF.LoadXvtrSettings(FController.FXvtrSettings);
|
||||
SF.LoadPASettings(FController.FPAMaxPower, FController.FPABandCal);
|
||||
SF.LoadPlutoTxMaxAtt(FController.FPlutoTxMaxAttDb);
|
||||
SF.LoadVHFCalSettings(FController.FVHFBandCal);
|
||||
SF.LoadCATSettings(
|
||||
FCATLastGlobal.CATSerialEnabled,
|
||||
|
||||
Reference in New Issue
Block a user