mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Mic settings: auto PTT source, Mic In/Line In, Line In gain, Tip/Ring
- Remove manual "Mic Source" (Radio/SoundCard) setting from UI and storage; source is now determined automatically in ApplyMOX: HW PTT → txmsRadio, MOX button/CAT → txmsSoundCard if audio device configured, else txmsRadio - Replace "Line in" checkbox with "Mic jack" combo (Mic In / Line In); when Line In is selected, Mic Boost is hidden and Line In Gain (-34.5..+12 dB, step 1.5 dB) is shown and sent as DUC Specific byte 51 - Add Tip/Ring connector selector (Orion/OrionMkII boards 4/5 only, byte 50 bit 3); control is hidden for other board types - Fix byte 50 bit 1 (Mic Boost) suppressed when Line In is active - Fix byte 51 comment polarity (was reversed: 0=+12dB; correct: 0=-34.5dB) - New JSON fields: mic_line_in, mic_tip_ring, line_in_gain_db; mic_source removed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+79
-38
@@ -129,12 +129,14 @@ type
|
||||
// ---- Transmit tab controls ----
|
||||
// Текущее состояние, отдаётся в OnTXChange целиком при любой правке.
|
||||
FTX: TTXSettings;
|
||||
// Mic source / options
|
||||
FCmbTXMicSource: TComboBox;
|
||||
FChkTXMicBoost: TCheckBox;
|
||||
FCmbTXMicJack: TComboBox; // "Mic In" / "Line In"
|
||||
FChkTXMicBoost: TCheckBox; // +20 dB (только Mic In)
|
||||
FLblLineInGain: TLabel; // метка "Line In gain" (только Line In)
|
||||
FEdLineInGain: TFloatSpinEdit; // -34.5..+12 dB, шаг 1.5 (только Line In)
|
||||
FChkTXMicBias: TCheckBox;
|
||||
FChkTXMicLineIn: TCheckBox;
|
||||
FChkTXMicPTT: TCheckBox;
|
||||
FCmbTXMicTR: TComboBox; // "Tip" / "Ring" (только Orion)
|
||||
FLblTipRing: TLabel; // метка (только Orion)
|
||||
FEdTXMicGain: TFloatSpinEdit;
|
||||
FEdTXAttOnTX: TSpinEdit;
|
||||
// Tune (TUN button)
|
||||
@@ -296,6 +298,8 @@ type
|
||||
procedure CollectTXFromUI;
|
||||
procedure FireTXChange;
|
||||
procedure OnTXAnyChange(Sender: TObject);
|
||||
procedure OnMicJackChange(Sender: TObject);
|
||||
procedure UpdateMicJackVisibility;
|
||||
procedure ApplyTheme(const T: TAppTheme);
|
||||
procedure NavClick(Sender: TObject);
|
||||
procedure SelectPage(APage: TWinControl; ANav: TFlatButton);
|
||||
@@ -374,7 +378,7 @@ type
|
||||
const SerPort: array of string;
|
||||
const SerBaud, SerDataBits, SerStopBits, SerParity: array of Integer;
|
||||
TcpEnabled: Boolean; TcpPort: Integer);
|
||||
procedure LoadTXSettings(const T: TTXSettings);
|
||||
procedure LoadTXSettings(const T: TTXSettings; BoardType: Integer = 0);
|
||||
procedure LoadAlexSettings(const A: TAlexSettings; BoardType: Integer);
|
||||
procedure LoadXvtrSettings(const X: TXvtrSettings);
|
||||
procedure LoadWfAGCNF(AGC, NF: Boolean);
|
||||
@@ -1083,31 +1087,43 @@ begin
|
||||
Font.Color := CLR_TEXTDIM;
|
||||
end;
|
||||
|
||||
// ---- Mic source / options ----
|
||||
// ---- Mic options ----
|
||||
// Mic source (Radio vs SoundCard) определяется автоматически по источнику PTT.
|
||||
Y := 86;
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Microphone', MARGIN, Y, 700, 220);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Microphone', MARGIN, Y, 700, 188);
|
||||
|
||||
MakeLbl(Grp, 'Mic source', PAD, R1 + 5, LW);
|
||||
FCmbTXMicSource := MkCmb(Grp, CX, R1, CMB_W);
|
||||
FCmbTXMicSource.Items.Add('Radio (HW mic)');
|
||||
FCmbTXMicSource.Items.Add('Sound card');
|
||||
FCmbTXMicSource.ItemIndex := 0;
|
||||
// Row 0: Mic jack selector | Boost (Mic In) или LineInGain (Line In) | Bias | PTT
|
||||
MakeLbl(Grp, 'Mic jack', PAD, R1 + 5, 65);
|
||||
FCmbTXMicJack := MkCmb(Grp, PAD + 68, R1, 110);
|
||||
FCmbTXMicJack.Items.Add('Mic In');
|
||||
FCmbTXMicJack.Items.Add('Line In');
|
||||
FCmbTXMicJack.ItemIndex := 0;
|
||||
FCmbTXMicJack.OnChange := OnMicJackChange;
|
||||
|
||||
FChkTXMicBoost := MkChk(Grp, PAD, R1 + STEP, 200, 'Mic boost +20 dB');
|
||||
FChkTXMicBias := MkChk(Grp, PAD + 200, R1 + STEP, 200, 'Mic bias');
|
||||
FChkTXMicLineIn := MkChk(Grp, PAD + 400, R1 + STEP, 160, 'Line in');
|
||||
FChkTXMicPTT := MkChk(Grp, PAD, R1 + 2 * STEP, 220, 'Mic-jack PTT');
|
||||
FChkTXMicBoost := MkChk(Grp, PAD + 190, R1, 165, 'Mic boost +20 dB');
|
||||
FLblLineInGain := MakeLbl(Grp, 'Line In gain', PAD + 190, R1 + 5, 80);
|
||||
FEdLineInGain := MkFloat(Grp, PAD + 190 + 82, R1, 0.0, -34.5, 12.0, 1.5);
|
||||
FEdLineInGain.DecimalPlaces := 1;
|
||||
FChkTXMicBias := MkChk(Grp, PAD + 375, R1, 105, 'Mic bias');
|
||||
FChkTXMicPTT := MkChk(Grp, PAD + 490, R1, 160, 'Mic-jack PTT');
|
||||
|
||||
MakeLbl(Grp, 'Mic gain (dB)', PAD, R1 + 3 * STEP + 5, LW);
|
||||
FEdTXMicGain := MkFloat(Grp, CX, R1 + 3 * STEP, 10.0, -20.0, 60.0, 0.5);
|
||||
// Row 1: Connector Tip/Ring (только Orion boards 4 и 5)
|
||||
FLblTipRing := MakeLbl(Grp, 'Connector', PAD, R1 + STEP + 5, 70);
|
||||
FCmbTXMicTR := MkCmb(Grp, PAD + 73, R1 + STEP, 90);
|
||||
FCmbTXMicTR.Items.Add('Tip'); // MicTipRing=False, bit3=0
|
||||
FCmbTXMicTR.Items.Add('Ring'); // MicTipRing=True, bit3=1
|
||||
FCmbTXMicTR.ItemIndex := 0;
|
||||
FLblTipRing.Visible := False;
|
||||
FCmbTXMicTR.Visible := False;
|
||||
|
||||
// ATT on TX — RX-ADC ослабление во время передачи (DUC Specific bytes 57/58/59).
|
||||
// Thetis-style default 31 dB. Помещаем на той же строке, что и Mic gain.
|
||||
MakeLbl(Grp, 'ATT on TX (dB)', PAD + 320, R1 + 3 * STEP + 5, 110);
|
||||
FEdTXAttOnTX := MkSpin(Grp, PAD + 320 + 120, R1 + 3 * STEP, 0, 31, 31);
|
||||
// Row 2: Mic gain | ATT on TX
|
||||
MakeLbl(Grp, 'Mic gain (dB)', PAD, R1 + 2 * STEP + 5, LW);
|
||||
FEdTXMicGain := MkFloat(Grp, CX, R1 + 2 * STEP, 10.0, -20.0, 60.0, 0.5);
|
||||
MakeLbl(Grp, 'ATT on TX (dB)', PAD + 320, R1 + 2 * STEP + 5, 110);
|
||||
FEdTXAttOnTX := MkSpin(Grp, PAD + 320 + 120, R1 + 2 * STEP, 0, 31, 31);
|
||||
|
||||
// ---- Tune (TUN button) ----
|
||||
Inc(Y, 220 + 12);
|
||||
Inc(Y, 188 + 12);
|
||||
Grp := MakeGroupPanel(FPageTransmit, 'Tune (TUN)', MARGIN, Y, 700, 100);
|
||||
|
||||
MakeLbl(Grp, 'Tune level (%)', PAD, R1 + 5, LW);
|
||||
@@ -1287,12 +1303,12 @@ end;
|
||||
procedure TSettingsForm.CollectTXFromUI;
|
||||
var i: Integer;
|
||||
begin
|
||||
if FCmbTXMicSource <> nil then
|
||||
FTX.MicSource := Max(0, FCmbTXMicSource.ItemIndex);
|
||||
if FChkTXMicBoost <> nil then FTX.MicBoost := FChkTXMicBoost.Checked;
|
||||
if FChkTXMicBias <> nil then FTX.MicBias := FChkTXMicBias.Checked;
|
||||
if FChkTXMicLineIn <> nil then FTX.MicLineIn := FChkTXMicLineIn.Checked;
|
||||
if FCmbTXMicJack <> nil then FTX.MicLineIn := FCmbTXMicJack.ItemIndex = 1;
|
||||
if FChkTXMicBoost <> nil then FTX.MicBoost := FChkTXMicBoost.Checked;
|
||||
if FEdLineInGain <> nil then FTX.LineInGainDB := FEdLineInGain.Value;
|
||||
if FChkTXMicBias <> nil then FTX.MicBias := FChkTXMicBias.Checked;
|
||||
if FChkTXMicPTT <> nil then FTX.MicPTTEnabled := FChkTXMicPTT.Checked;
|
||||
if FCmbTXMicTR <> nil then FTX.MicTipRing := FCmbTXMicTR.ItemIndex = 1;
|
||||
if FEdTXMicGain <> nil then FTX.MicGainDB := FEdTXMicGain.Value;
|
||||
if FEdTXAttOnTX <> nil then FTX.AttOnTX := FEdTXAttOnTX.Value;
|
||||
if FEdTUNLevel <> nil then FTX.TUNLevel := FEdTUNLevel.Value;
|
||||
@@ -1368,20 +1384,45 @@ begin
|
||||
FireTXChange;
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.LoadTXSettings(const T: TTXSettings);
|
||||
var i: Integer;
|
||||
procedure TSettingsForm.UpdateMicJackVisibility;
|
||||
var LineIn: Boolean;
|
||||
begin
|
||||
if FCmbTXMicJack = nil then Exit;
|
||||
LineIn := FCmbTXMicJack.ItemIndex = 1;
|
||||
if FChkTXMicBoost <> nil then FChkTXMicBoost.Visible := not LineIn;
|
||||
if FLblLineInGain <> nil then FLblLineInGain.Visible := LineIn;
|
||||
if FEdLineInGain <> nil then FEdLineInGain.Visible := LineIn;
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.OnMicJackChange(Sender: TObject);
|
||||
begin
|
||||
UpdateMicJackVisibility;
|
||||
FireTXChange;
|
||||
end;
|
||||
|
||||
procedure TSettingsForm.LoadTXSettings(const T: TTXSettings; BoardType: Integer = 0);
|
||||
var i: Integer; IsOrion: Boolean;
|
||||
begin
|
||||
FLoading := True;
|
||||
try
|
||||
FTX := T;
|
||||
if FCmbTXMicSource <> nil then
|
||||
FCmbTXMicSource.ItemIndex := EnsureRange(T.MicSource, 0, FCmbTXMicSource.Items.Count - 1);
|
||||
if FChkTXMicBoost <> nil then FChkTXMicBoost.Checked := T.MicBoost;
|
||||
if FChkTXMicBias <> nil then FChkTXMicBias.Checked := T.MicBias;
|
||||
if FChkTXMicLineIn <> nil then FChkTXMicLineIn.Checked := T.MicLineIn;
|
||||
if FChkTXMicPTT <> nil then FChkTXMicPTT.Checked := T.MicPTTEnabled;
|
||||
if FEdTXMicGain <> nil then FEdTXMicGain.Value := T.MicGainDB;
|
||||
if FEdTXAttOnTX <> nil then FEdTXAttOnTX.Value := EnsureRange(T.AttOnTX, 0, 31);
|
||||
if FCmbTXMicJack <> nil then
|
||||
FCmbTXMicJack.ItemIndex := IfThen(T.MicLineIn, 1, 0);
|
||||
UpdateMicJackVisibility;
|
||||
if FChkTXMicBoost <> nil then FChkTXMicBoost.Checked := T.MicBoost;
|
||||
if FEdLineInGain <> nil then FEdLineInGain.Value := EnsureRange(T.LineInGainDB, -34.5, 12.0);
|
||||
if FChkTXMicBias <> nil then FChkTXMicBias.Checked := T.MicBias;
|
||||
if FChkTXMicPTT <> nil then FChkTXMicPTT.Checked := T.MicPTTEnabled;
|
||||
// Tip/Ring (Orion boards 4 и 5)
|
||||
IsOrion := BoardType in [4, 5];
|
||||
if FLblTipRing <> nil then FLblTipRing.Visible := IsOrion;
|
||||
if FCmbTXMicTR <> nil then
|
||||
begin
|
||||
FCmbTXMicTR.Visible := IsOrion;
|
||||
FCmbTXMicTR.ItemIndex := IfThen(T.MicTipRing, 1, 0);
|
||||
end;
|
||||
if FEdTXMicGain <> nil then FEdTXMicGain.Value := T.MicGainDB;
|
||||
if FEdTXAttOnTX <> nil then FEdTXAttOnTX.Value := EnsureRange(T.AttOnTX, 0, 31);
|
||||
if FEdTUNLevel <> nil then FEdTUNLevel.Value := EnsureRange(T.TUNLevel, 0, 100);
|
||||
if FEdTUNFreq <> nil then FEdTUNFreq.Value := EnsureRange(T.TUNFreq, 100, 5000);
|
||||
if FEdTXFiltLow <> nil then FEdTXFiltLow.Value := T.FilterLow;
|
||||
|
||||
Reference in New Issue
Block a user