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:
+22
-22
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user