mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +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:
+21
-5
@@ -339,7 +339,12 @@ type
|
||||
SupplyVoltCal: Double; // множитель напряжения питания (1.0 = без коррекции)
|
||||
AmpVoffMV: Double; // сдвиг нуля датчика тока, мВ (Thetis default 360)
|
||||
AmpSensMVA: Double; // чувствительность датчика тока, мВ/А (Thetis default 120)
|
||||
SMeterOffsetDB: Double; // офсет S-метра, дБ (прибавляется к WDSP dBm)
|
||||
// Офсет S-метра, дБ — раздельно на диапазон и на слот трансвертера (усиление
|
||||
// тракта разное на 160м и на 10м, а у XVTR своё — конвертер/LNB). Смысл
|
||||
// индекса диапазона задаёт band-план железа (HF у openHPSDR, VHF/UHF у
|
||||
// Pluto); таблицы не пересекаются, т.к. секция JSON ключуется по MAC.
|
||||
SMeterBandDB: array[0..CFG_BAND_COUNT-1] of Double;
|
||||
SMeterXvtrDB: array[0..CFG_XVTR_COUNT-1] of Double;
|
||||
end;
|
||||
|
||||
TGlobalSettings = record
|
||||
@@ -641,7 +646,7 @@ begin
|
||||
C.SupplyVoltCal := 1.0;
|
||||
C.AmpVoffMV := 360.0;
|
||||
C.AmpSensMVA := 120.0;
|
||||
C.SMeterOffsetDB := 0.0;
|
||||
// SMeterBandDB/SMeterXvtrDB — нули после FillChar (без коррекции).
|
||||
end;
|
||||
|
||||
constructor TSettingsManager.Create(const FilePath: string);
|
||||
@@ -769,7 +774,7 @@ end;
|
||||
function TSettingsManager.LoadDevice(const MAC: array of Byte;
|
||||
out G: TGlobalSettings;
|
||||
var Bands: array of TBandSettings): Boolean;
|
||||
var MacStr: string; DevObj,GObj,BObj: TJSONObject; i: Integer;
|
||||
var MacStr: string; DevObj,GObj,BObj: TJSONObject; i: Integer; SMLegacy: Double;
|
||||
begin
|
||||
MacStr := MacToStr(MAC);
|
||||
Result := FRoot.Find(MacStr) <> nil;
|
||||
@@ -891,7 +896,15 @@ begin
|
||||
G.Cal.SupplyVoltCal := EnsureRange(JD(GObj,'cal_supply_volt', 1.0), 0.1, 5.0);
|
||||
G.Cal.AmpVoffMV := EnsureRange(JD(GObj,'cal_amp_voff_mv', 360.0), 0.0, 2000.0);
|
||||
G.Cal.AmpSensMVA := EnsureRange(JD(GObj,'cal_amp_sens_mva', 120.0), 1.0, 1000.0);
|
||||
G.Cal.SMeterOffsetDB := EnsureRange(JD(GObj,'cal_smeter_db', 0.0), -30.0, 30.0);
|
||||
// S-метр: офсет на диапазон/трансвертер. Легаси-ключ (одно значение на всё
|
||||
// устройство) становится дефолтом всех слотов — показания не меняются.
|
||||
SMLegacy := EnsureRange(JD(GObj,'cal_smeter_db', 0.0), -30.0, 30.0);
|
||||
for i := 0 to CFG_BAND_COUNT-1 do
|
||||
G.Cal.SMeterBandDB[i] :=
|
||||
EnsureRange(JD(GObj,'cal_smeter_band_'+IntToStr(i), SMLegacy), -30.0, 30.0);
|
||||
for i := 0 to CFG_XVTR_COUNT-1 do
|
||||
G.Cal.SMeterXvtrDB[i] :=
|
||||
EnsureRange(JD(GObj,'cal_smeter_xvtr_'+IntToStr(i), SMLegacy), -30.0, 30.0);
|
||||
|
||||
for i := 0 to CFG_BAND_COUNT-1 do
|
||||
begin
|
||||
@@ -1008,7 +1021,10 @@ begin
|
||||
JW(O,'cal_supply_volt',G.Cal.SupplyVoltCal);
|
||||
JW(O,'cal_amp_voff_mv',G.Cal.AmpVoffMV);
|
||||
JW(O,'cal_amp_sens_mva',G.Cal.AmpSensMVA);
|
||||
JW(O,'cal_smeter_db',G.Cal.SMeterOffsetDB);
|
||||
for i := 0 to CFG_BAND_COUNT-1 do
|
||||
JW(O,'cal_smeter_band_'+IntToStr(i),G.Cal.SMeterBandDB[i]);
|
||||
for i := 0 to CFG_XVTR_COUNT-1 do
|
||||
JW(O,'cal_smeter_xvtr_'+IntToStr(i),G.Cal.SMeterXvtrDB[i]);
|
||||
end;
|
||||
|
||||
procedure TSettingsManager.SaveBand(const MAC: array of Byte; BandIdx: Integer;
|
||||
|
||||
Reference in New Issue
Block a user