mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Add flat FM RAW transmit path
This commit is contained in:
+28
-12
@@ -1923,8 +1923,8 @@ begin
|
||||
FSlices[idx].Mode := Mode;
|
||||
if Assigned(FDSPEngine) then FDSPEngine.SetSliceMode(Id, Mode);
|
||||
// DMR is receive-only. If this slice used to be the TX source, hand TX back
|
||||
// to the main receiver as soon as it enters DMR.
|
||||
if (Mode in [MODE_DMR, MODE_FMRAW]) and (FTxSliceId = Id) then SetTxSlice(0);
|
||||
// to the main receiver as soon as it enters DMR. FM RAW supports flat TX.
|
||||
if (Mode = MODE_DMR) and (FTxSliceId = Id) then SetTxSlice(0);
|
||||
if (OldMode = MODE_DMR) and (Mode <> MODE_DMR) then
|
||||
FreeAndNil(FSlices[idx].DMR);
|
||||
end;
|
||||
@@ -2233,14 +2233,13 @@ begin
|
||||
if SliceId > 0 then
|
||||
begin
|
||||
if not GetSlice(SliceId, S) then Exit;
|
||||
// EWSDR has no DMR transmitter/AMBE encoder. Do not accidentally use the
|
||||
// analog WFM transmitter for a receive-only DMR slice.
|
||||
if S.Mode in [MODE_DMR, MODE_FMRAW] then Exit;
|
||||
// EWSDR has no DMR transmitter/AMBE encoder.
|
||||
if S.Mode = MODE_DMR then Exit;
|
||||
end;
|
||||
if FTxSliceId = SliceId then Exit;
|
||||
// Selecting main A while it is in DMR is allowed as an RX selection, but it
|
||||
// cannot inherit an active carrier from a previously selected TX slice.
|
||||
if (SliceId = 0) and (FMode in [MODE_DMR, MODE_FMRAW]) then
|
||||
if (SliceId = 0) and (FMode = MODE_DMR) then
|
||||
begin
|
||||
if FTuning then SetTune(False)
|
||||
else if FTransmitting then SetMOX(False);
|
||||
@@ -3271,7 +3270,7 @@ begin
|
||||
end;
|
||||
// Entering receive-only DMR on the selected main TX source immediately
|
||||
// releases an existing carrier. SetTune(False) also releases MOX.
|
||||
if ActiveTXMode in [MODE_DMR, MODE_FMRAW] then
|
||||
if ActiveTXMode = MODE_DMR then
|
||||
begin
|
||||
if FTuning then SetTune(False)
|
||||
else if FTransmitting then SetMOX(False);
|
||||
@@ -3282,6 +3281,17 @@ begin
|
||||
if FWDSPReady and Assigned(FDSPEngine) then
|
||||
begin
|
||||
FDSPEngine.SetMode(FMode);
|
||||
// SetMode configures the main RX/TX pair; a selected slice may still be
|
||||
// the actual TX source and therefore owns the transmitter mode.
|
||||
FDSPEngine.SetTXMode(ActiveTXMode);
|
||||
// A live mode change must also switch away from web/HW microphone when
|
||||
// entering FM RAW; normally the modem is connected through PortAudio.
|
||||
if FTransmitting and (ActiveTXMode = MODE_FMRAW) then
|
||||
begin
|
||||
FWebMicActive := False;
|
||||
FDSPEngine.SetTXMicSource(DefaultMicSource);
|
||||
if Assigned(FAudioIn) and FAudioIn.IsOpen then FAudioIn.Flush;
|
||||
end;
|
||||
// Если TUN активен — пересчитываем знак частоты под новый режим
|
||||
if FTuning then FDSPEngine.SetTXTone(True, FTXSettings.TUNFreq, TUN_TONE_MAG);
|
||||
end;
|
||||
@@ -4165,6 +4175,9 @@ begin
|
||||
FDSPEngine.SetTXWaterfallDisplay(FTXSettings.TXWfDetector,
|
||||
FTXSettings.TXWfAvgMode,
|
||||
FTXSettings.TXWfAvgTimeMS);
|
||||
// Reapply the mode overlay last: FM RAW must stay flat even when the user
|
||||
// edits and saves ordinary voice-chain settings while this mode is active.
|
||||
FDSPEngine.SetTXMode(ActiveTXMode);
|
||||
// PureSignal-параметры calcc (mox/loop/tx delay, ptol, pin/map/stbl, SetPk)
|
||||
ApplyPSSettingsToDSP;
|
||||
end;
|
||||
@@ -4174,8 +4187,8 @@ var
|
||||
WasTransmitting: Boolean;
|
||||
begin
|
||||
// DMR support is receive-only. This guard also covers CAT, web and hardware
|
||||
// PTT. A selected non-DMR TX slice remains valid while main A receives DMR.
|
||||
if On_ and (ActiveTXMode in [MODE_DMR, MODE_FMRAW]) then Exit;
|
||||
// PTT. FM RAW is a flat external-modem transmit path.
|
||||
if On_ and (ActiveTXMode = MODE_DMR) then Exit;
|
||||
// Safety: блокируем TX на бэндах с DoNotTx (Alex) и на RX-only трансвертере.
|
||||
if On_ and FDevConnected and (FCurrentXvtr < 0)
|
||||
and FAlexSettings.DoNotTx[EnsureRange(TxBandIdx, 0, 10)] then
|
||||
@@ -4222,11 +4235,14 @@ begin
|
||||
end;
|
||||
if FWDSPReady and Assigned(FDSPEngine) then
|
||||
begin
|
||||
// Mic source автоматически по источнику TX:
|
||||
// Web TX → txmsWeb; HW PTT → txmsRadio; MOX/CAT → DefaultMicSource.
|
||||
// Mic source автоматически по источнику TX. FM RAW always uses the
|
||||
// configured default input (normally a virtual PortAudio cable), even if
|
||||
// a web client is connected or hardware PTT keyed the transmitter.
|
||||
if FTransmitting then
|
||||
begin
|
||||
if FWebClientActive then
|
||||
if ActiveTXMode = MODE_FMRAW then
|
||||
FDSPEngine.SetTXMicSource(DefaultMicSource)
|
||||
else if FWebClientActive then
|
||||
begin
|
||||
FWebMicActive := True;
|
||||
FDSPEngine.SetTXMicSource(txmsWeb);
|
||||
|
||||
Reference in New Issue
Block a user