mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feature(calibration): офсет S-метра на диапазон и на трансвертер, раздельно по железу
Вместо одного офсета на всё устройство — таблицы «на диапазон» и «на слот трансвертера»; состав таблиц задаёт активное железо. - Settings: SMeterOffsetDB -> SMeterBandDB[12] / SMeterXvtrDB[8] (JSON cal_smeter_band_i / cal_smeter_xvtr_i). Легаси-ключ cal_smeter_db становится дефолтом всех слотов — показания после обновления не меняются. Разделение Pluto/openHPSDR даёт сама секция JSON: она ключуется по MAC устройства (у Pluto — synthetic MAC из serial). - Офсет убран из WDSPEngine (FSMeterCalDB): движок не знает ни диапазонов, ни трансвертеров. Теперь TRadioController.SMeterCalFor(VisibleHz) — окно включённого XVTR-слота приоритетнее диапазона, индекс диапазона по плану железа (FreqToBandIdx с IsPluto); ReadSMeterDBm для главного S-метра (MainForm + ewsdrd) и SliceSMeter по TargetHz слайса — паны N на других диапазонах считаются по своему банду, а не по главному. - SettingsForm: таблицы на 12 слотов, подписи/видимость/раскладку ставит RelayoutCalTab; SetCalibrationBackend(IsPluto) вызывается рядом с SetAntennaBackend. У openHPSDR — HF-план, у Pluto — VHF/UHF-план и скрытые группы Power/SWR detector и Supply V/A (нет Alex-моста и его телеметрии). Слоты трансвертеров показываются только включённые, с их именами. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+5
-6
@@ -451,7 +451,6 @@ type
|
||||
FTXMode: Integer; // may differ from RX when a slice is TX source
|
||||
FRawFMDeviation: Double;
|
||||
FSMeter: Double;
|
||||
FSMeterCalDB: Double; // калибровочный офсет S-метра, дБ (вкладка Calibration)
|
||||
FFilterLow: Integer;
|
||||
FFilterHigh: Integer;
|
||||
FAGCMode: TWDSPAGCMode;
|
||||
@@ -744,8 +743,6 @@ type
|
||||
property SNBEnabled: Boolean read FSNBEnabled;
|
||||
property LastError: string read FLastError;
|
||||
property SMeter: Double read FSMeter;
|
||||
// Офсет S-метра из вкладки Calibration; применяется в GetSMeterDBm/GetSliceSMeter
|
||||
property SMeterCalDB: Double read FSMeterCalDB write FSMeterCalDB;
|
||||
property FFTSize: Integer read FFFTSize;
|
||||
property WindowType: Integer read FWindowType;
|
||||
property SpecDetector: Integer read FSpecDetector;
|
||||
@@ -1248,7 +1245,6 @@ begin
|
||||
FAGCTop := -90.0;
|
||||
FVolume := 0.7;
|
||||
FSMeter := -130.0;
|
||||
FSMeterCalDB := 0.0;
|
||||
FNRMode := NR_MODE_OFF;
|
||||
FNBMode := NB_MODE_OFF;
|
||||
FSNBEnabled := False;
|
||||
@@ -2831,7 +2827,7 @@ begin
|
||||
FSliceLock.Enter;
|
||||
try
|
||||
idx := FindSliceIdx(Id);
|
||||
if idx >= 0 then Result := FSlices[idx].SMeter + FSMeterCalDB;
|
||||
if idx >= 0 then Result := FSlices[idx].SMeter;
|
||||
finally
|
||||
FSliceLock.Leave;
|
||||
end;
|
||||
@@ -3884,7 +3880,10 @@ function TWDSPEngine.GetSMeterDBm: Double;
|
||||
begin
|
||||
// НЕ вызываем GetRXAMeter здесь повторно — значение уже обновлено
|
||||
// в DSP-колбэке. Повторный вызов сбрасывает аккумулятор WDSP → 0.
|
||||
Result := FSMeter + FSMeterCalDB;
|
||||
// Калибровочный офсет здесь НЕ прибавляется: он зависит от диапазона/
|
||||
// трансвертера, о которых движок не знает — его добавляет TRadioController
|
||||
// (ReadSMeterDBm / SliceSMeter).
|
||||
Result := FSMeter;
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user