mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
feat(dmr): add receive frontend and AMBE adapter
This commit is contained in:
+46
-3
@@ -40,7 +40,7 @@ uses
|
||||
WinFirewall,
|
||||
BoardUtils, WisdomBuilder, UISync,
|
||||
FlatEdit, FMRepeater,
|
||||
ChannelStore, ChannelsForm, BeaconScopeForm,
|
||||
ChannelStore, ChannelsForm, BeaconScopeForm, DMRDecoder,
|
||||
PowerInhibit,
|
||||
DeviceStore,
|
||||
RadioBackend, PlutoBackend,
|
||||
@@ -67,7 +67,7 @@ const
|
||||
WDSP_WISDOM_FILE = 'wdspWisdom00';
|
||||
|
||||
BAND_COUNT = 12; // макс. слотов среди планов (Pluto VHF/UHF = 12, HF = 11)
|
||||
MODE_COUNT = 11;
|
||||
MODE_COUNT = 12;
|
||||
// Полосы/дефолты фильтров (FILT_COUNT, FILT_*_BW, FILT_*_DEF, FILT_FM_*)
|
||||
// перенесены в Settings.pas — нужны TRadioController. Здесь остаются только
|
||||
// UI-подписи кнопок (NAMES).
|
||||
@@ -105,7 +105,7 @@ const
|
||||
'160m','80m','60m','40m','30m','20m','17m','15m','12m','10m','6m','');
|
||||
|
||||
MODE_NAMES: array[0..MODE_COUNT-1] of string = (
|
||||
'LSB','USB','DSB','CWL','CWU','FM','AM','SAM','DIGU','DIGL','WFM');
|
||||
'LSB','USB','DSB','CWL','CWU','FM','AM','SAM','DIGU','DIGL','WFM','DMR');
|
||||
MODE_ROWS = 3; // 4 колонки; последний ряд неполный
|
||||
|
||||
SMETER_WIDTH_RATIO = 0.32;
|
||||
@@ -419,6 +419,7 @@ type
|
||||
procedure UpdateStatusField7; // поле 7: PLL (HPSDR) или beacon (Pluto)
|
||||
procedure UpdateStatusField3; // поле 3: Supply (HPSDR) или Temp/RSSI (Pluto)
|
||||
function BeaconStatusText: string; // компактный статус QO-100 beacon lock
|
||||
function DMRStatusText: string; // sync/type/polarity DMR front-end
|
||||
procedure DoUpdateDDCSeq(DDCIdx: Integer; Seq: LongWord);
|
||||
|
||||
// Event handlers
|
||||
@@ -3583,10 +3584,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMainForm.DMRStatusText: string;
|
||||
var
|
||||
S: TDMRStatus;
|
||||
Inv: string;
|
||||
begin
|
||||
if not FController.GetDMRStatus(S) then Exit('DMR unavailable');
|
||||
if not S.Enabled then Exit('DMR off');
|
||||
if not S.Synced then Exit(Format('DMR sync... %.3f', [S.SignalRMS]));
|
||||
if S.Inverted then Inv := ' INV' else Inv := '';
|
||||
Result := Format('DMR %s%s #%d',
|
||||
[TDMRDecoder.SyncKindName(S.SyncKind), Inv, S.SyncCount]);
|
||||
end;
|
||||
|
||||
procedure TMainForm.UpdateStatusField7;
|
||||
// Поле 7 статус-бара. openHPSDR — PLL-lock (как прежде). Pluto в трансвертере —
|
||||
// статус QO-100 beacon lock (у Pluto нет PLL-телеметрии); Pluto без XVTR — пусто.
|
||||
begin
|
||||
if FController.FMode = MODE_DMR then
|
||||
begin
|
||||
SetStatusText(7, DMRStatusText);
|
||||
Exit;
|
||||
end;
|
||||
if FController.IsPluto then
|
||||
begin
|
||||
if FController.FCurrentXvtr >= 0 then SetStatusText(7, BeaconStatusText)
|
||||
@@ -4203,6 +4222,24 @@ begin
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if FController.FMode = MODE_DMR then
|
||||
begin
|
||||
CloseCTCSSPopup;
|
||||
FController.FFilter := 0;
|
||||
FController.FFilterBW := FILT_DMR_BW;
|
||||
FController.FFMDeviation := DMR_FM_DEV;
|
||||
BtnFilter[0].Caption := '12.5k';
|
||||
BtnFilter[0].Left := LeftPanelButtonLeft(PanelFilter.Width, 1, 0);
|
||||
BtnFilter[0].Width := LeftPanelButtonWidth(PanelFilter.Width, 1, 0);
|
||||
BtnFilter[0].Top := 16;
|
||||
BtnFilter[0].Visible := True;
|
||||
StyleButton(BtnFilter[0], True);
|
||||
for i := 1 to FILT_COUNT - 1 do BtnFilter[i].Visible := False;
|
||||
PanelFilter.Height := BtnFilter[0].Top + BtnFilter[0].Height + 4;
|
||||
RelayoutBelowBands;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
for i := 0 to FILT_COUNT - 1 do
|
||||
begin
|
||||
BtnFilter[i].Left := LeftPanelButtonLeft(PanelFilter.Width, 5, i mod 5);
|
||||
@@ -5323,6 +5360,12 @@ begin
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
MODE_DMR:
|
||||
begin
|
||||
FController.FFilter := 0;
|
||||
FController.FFilterBW := FILT_DMR_BW;
|
||||
FController.FFMDeviation := DMR_FM_DEV;
|
||||
end;
|
||||
end;
|
||||
if FController.FWDSPReady then
|
||||
begin
|
||||
|
||||
Reference in New Issue
Block a user