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:
2026-05-19 20:32:19 +03:00
co-authored by Claude Sonnet 4.6
parent 1016fa7a05
commit 6932022177
4 changed files with 152 additions and 105 deletions
+22 -22
View File
@@ -44,16 +44,14 @@ type
// TX-настройки per-device. Хранятся в JSON-секции "tx" под MAC,
// отдельно от global/bands. Применяются к WDSP через SetTX* методы.
// (Тип TTXMicSource живёт в WDSPEngine — здесь храним как Integer,
// чтобы не тащить циклическую зависимость с WDSPEngine.)
TTXSettings = record
// Mic source select
MicSource: Integer; // 0=Radio, 1=SoundCard
// Radio mic options (DUC Specific byte 50 bits)
MicBoost: Boolean; // bit0: +20 dB
MicBias: Boolean; // bit4: электретный bias
MicLineIn: Boolean; // bit1: 1=Line in, 0=Mic in
MicPTTEnabled: Boolean; // bit2: Mic PTT enable
// Radio mic options (DUC Specific byte 50/51)
MicLineIn: Boolean; // bit0: 1=Line In, 0=Mic In
MicBoost: Boolean; // bit1: +20 dB preamp (только когда Mic In)
MicPTTEnabled: Boolean; // bit2: Mic PTT enable (Orion)
MicTipRing: Boolean; // bit3: False=Tip, True=Ring (Orion/OrionMkII)
MicBias: Boolean; // bit4: электретный +5V bias (Orion)
LineInGainDB: Double; // byte51: -34.5..+12 dB (шаг 1.5; только когда Line In)
// Mic gain (dB, применяется в WDSP PanelGain1)
MicGainDB: Double; // -10..+30
// ATT on TX — ослабление RX-ADC во время передачи (защита от утечки TX).
@@ -854,12 +852,12 @@ const
100, 200, 400, 700, 1100, 1500, 2000, 2500, 3000, 3500);
begin
FillChar(T, SizeOf(T), 0);
// Mic source — Radio (HW). 0=Radio, 1=SoundCard (синхронно с TTXMicSource в WDSPEngine).
T.MicSource := 0;
T.MicBoost := False;
T.MicBias := True;
T.MicLineIn := False;
T.MicBoost := False;
T.MicPTTEnabled := False;
T.MicTipRing := False; // Tip (mic at Tip, PTT at Ring)
T.MicBias := True;
T.LineInGainDB := 0.0; // 0 dB
T.MicGainDB := 10.0;
// ATT on TX — Thetis default 31 dB (полная защита RX-ADC во время передачи)
T.AttOnTX := 31;
@@ -933,11 +931,12 @@ begin
if DevObj.Find('tx') = nil then Exit;
O := EnsureObj(DevObj, 'tx');
T.MicSource := JI(O,'mic_source', T.MicSource);
T.MicBoost := JB(O,'mic_boost', T.MicBoost);
T.MicBias := JB(O,'mic_bias', T.MicBias);
T.MicLineIn := JB(O,'mic_line_in', T.MicLineIn);
T.MicBoost := JB(O,'mic_boost', T.MicBoost);
T.MicPTTEnabled := JB(O,'mic_ptt_enabled', T.MicPTTEnabled);
T.MicTipRing := JB(O,'mic_tip_ring', T.MicTipRing);
T.MicBias := JB(O,'mic_bias', T.MicBias);
T.LineInGainDB := EnsureRange(JD(O,'line_in_gain_db', T.LineInGainDB), -34.5, 12.0);
T.MicGainDB := JD(O,'mic_gain_db', T.MicGainDB);
T.AttOnTX := EnsureRange(JI(O,'att_on_tx', T.AttOnTX), 0, 31);
T.TUNLevel := EnsureRange(JI(O,'tun_level', T.TUNLevel), 0, 100);
@@ -990,12 +989,13 @@ procedure TSettingsManager.SaveTX(const MAC: array of Byte;
var O: TJSONObject; i: Integer;
begin
O := EnsureObj(GetDevObj(MacToStr(MAC)), 'tx');
JW(O,'mic_source', T.MicSource);
JW(O,'mic_boost', T.MicBoost);
JW(O,'mic_bias', T.MicBias);
JW(O,'mic_line_in', T.MicLineIn);
JW(O,'mic_ptt_enabled', T.MicPTTEnabled);
JW(O,'mic_gain_db', T.MicGainDB);
JW(O,'mic_line_in', T.MicLineIn);
JW(O,'mic_boost', T.MicBoost);
JW(O,'mic_ptt_enabled', T.MicPTTEnabled);
JW(O,'mic_tip_ring', T.MicTipRing);
JW(O,'mic_bias', T.MicBias);
JW(O,'line_in_gain_db', T.LineInGainDB);
JW(O,'mic_gain_db', T.MicGainDB);
JW(O,'att_on_tx', T.AttOnTX);
JW(O,'tun_level', T.TUNLevel);
JW(O,'tun_freq', T.TUNFreq);