mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
add trancverter
This commit is contained in:
+53
-3
@@ -136,6 +136,15 @@ type
|
||||
TWebCmdFreqA = procedure(Hz: Double) of object;
|
||||
TWebCmdAttn = procedure(Idx: Integer) of object;
|
||||
TWebCmdTun = procedure(On_: Boolean) of object;
|
||||
// XVTR-band: web клиент кликнул кнопку трансвертера (Idx 0..CFG_XVTR_COUNT-1).
|
||||
// Idx=-1 — выход в HF.
|
||||
TWebCmdXvtrBand = procedure(Idx: Integer) of object;
|
||||
// Один XVTR-слот для статуса (для отображения в web-bandSel).
|
||||
TWebXvtrInfo = record
|
||||
Idx: Integer;
|
||||
Name: string;
|
||||
end;
|
||||
TWebXvtrArray = array of TWebXvtrInfo;
|
||||
TWebMicCB = procedure(Samples: PSingle; Count: Integer) of object;
|
||||
|
||||
// ── Главный класс сервера ─────────────────────────────────────────────────
|
||||
@@ -233,6 +242,9 @@ type
|
||||
FOnTun: TWebCmdTun;
|
||||
FTuning: Boolean;
|
||||
FDuplex: Boolean;
|
||||
FXvtrBands: TWebXvtrArray; // список enabled XVTR (для web-UI)
|
||||
FCurrentXvtr: Integer; // -1 = HF, иначе индекс активного XVTR
|
||||
FOnXvtrBand: TWebCmdXvtrBand;
|
||||
|
||||
FWebClientActive: Boolean;
|
||||
|
||||
@@ -286,7 +298,9 @@ type
|
||||
property OnFilter: TWebCmdFilter read FOnFilter write FOnFilter;
|
||||
property OnAGC: TWebCmdAGC read FOnAGC write FOnAGC;
|
||||
property OnAGCTop: TWebCmdAGCTop read FOnAGCTop write FOnAGCTop;
|
||||
property OnBand: TWebCmdBand read FOnBand write FOnBand;
|
||||
property OnBand: TWebCmdBand read FOnBand write FOnBand;
|
||||
property OnXvtrBand: TWebCmdXvtrBand read FOnXvtrBand write FOnXvtrBand;
|
||||
procedure SetXvtrBands(const ABands: TWebXvtrArray; ACurrent: Integer);
|
||||
property OnSpan: TWebCmdSpan read FOnSpan write FOnSpan;
|
||||
property OnVolume: TWebCmdVolume read FOnVolume write FOnVolume;
|
||||
property OnWfAGC: TWebCmdWfAGC read FOnWfAGC write FOnWfAGC;
|
||||
@@ -405,6 +419,22 @@ begin
|
||||
FVolume := 70;
|
||||
FSMeter := -120;
|
||||
FBandIdx := 5;
|
||||
FCurrentXvtr := -1;
|
||||
SetLength(FXvtrBands, 0);
|
||||
end;
|
||||
|
||||
procedure TWebServer.SetXvtrBands(const ABands: TWebXvtrArray; ACurrent: Integer);
|
||||
var i: Integer;
|
||||
begin
|
||||
FStateLock.Enter;
|
||||
try
|
||||
SetLength(FXvtrBands, Length(ABands));
|
||||
for i := 0 to High(ABands) do
|
||||
FXvtrBands[i] := ABands[i];
|
||||
FCurrentXvtr := ACurrent;
|
||||
finally
|
||||
FStateLock.Leave;
|
||||
end;
|
||||
end;
|
||||
|
||||
destructor TWebServer.Destroy;
|
||||
@@ -946,6 +976,12 @@ begin
|
||||
FStateLock.Enter; FBandIdx := Idx; FStateLock.Leave;
|
||||
if Assigned(FOnBand) then FOnBand(Idx);
|
||||
end
|
||||
else if Cmd = 'xvtr_band' then
|
||||
begin
|
||||
// Idx 0..CFG_XVTR_COUNT-1 — активировать XVTR; -1 — выйти в HF
|
||||
Idx := JsonGetInt(Json, 'idx', -1);
|
||||
if Assigned(FOnXvtrBand) then FOnXvtrBand(Idx);
|
||||
end
|
||||
else if Cmd = 'span' then
|
||||
begin
|
||||
HzI := JsonGetInt(Json, 'hz', Round(FSpanHz));
|
||||
@@ -1170,11 +1206,23 @@ const
|
||||
('LSB','USB','DSB','CWL','CWU','FM','AM','SAM');
|
||||
var
|
||||
FS: TFormatSettings;
|
||||
XvtrJson: string;
|
||||
i: Integer;
|
||||
begin
|
||||
FS := DefaultFormatSettings;
|
||||
FS.DecimalSeparator := '.';
|
||||
FStateLock.Enter;
|
||||
try
|
||||
// Сборка массива xvtr_bands: [{"idx":0,"name":"2m"},...]
|
||||
XvtrJson := '[';
|
||||
for i := 0 to High(FXvtrBands) do
|
||||
begin
|
||||
if i > 0 then XvtrJson := XvtrJson + ',';
|
||||
XvtrJson := XvtrJson +
|
||||
Format('{"idx":%d,"name":"%s"}',
|
||||
[FXvtrBands[i].Idx, FXvtrBands[i].Name], FS);
|
||||
end;
|
||||
XvtrJson := XvtrJson + ']';
|
||||
Result := Format(
|
||||
'{"vfo_a_hz":%.0f,"vfo_b_hz":%.0f,"active_vfo":%d,' +
|
||||
'"mode":%d,"mode_name":"%s",' +
|
||||
@@ -1184,7 +1232,8 @@ begin
|
||||
'"wf_agc":%s,"wf_nf":%s,"band_idx":%d,"smeter_dbm":%.1f,' +
|
||||
'"running":%s,"mute":%s,"ctun":%s,' +
|
||||
'"nr_mode":%d,"nr":%s,"nb_mode":%d,"nb":%s,"snb":%s,"anf":%s,"connected":%s,' +
|
||||
'"transmitting":%s,"drive":%d,"attn_idx":%d,"tuning":%s,"dup":%s}',
|
||||
'"transmitting":%s,"drive":%d,"attn_idx":%d,"tuning":%s,"dup":%s,' +
|
||||
'"xvtr_current":%d,"xvtr_bands":%s}',
|
||||
[FFreq, FVfoB, FActiveVfo,
|
||||
FMode, MODE_N[FMode mod 8],
|
||||
FFilterIdx, FFilterBW,
|
||||
@@ -1207,7 +1256,8 @@ begin
|
||||
FDriveLevel,
|
||||
FAttnIdx,
|
||||
BoolToStr(FTuning, 'true', 'false'),
|
||||
BoolToStr(FDuplex, 'true', 'false')
|
||||
BoolToStr(FDuplex, 'true', 'false'),
|
||||
FCurrentXvtr, XvtrJson
|
||||
], FS);
|
||||
finally
|
||||
FStateLock.Leave;
|
||||
|
||||
Reference in New Issue
Block a user