feature(settings): вкладка Calibration — детектор мощности/КСВ, V/A, S-метр

Паритет с Thetis-Enhanced (Det. Cal. / Volts&Amps правки):
- TCalibration в TGlobalSettings (JSON cal_*): модель детектора Alex-моста,
  per-band множитель FWD/REV 0.5..2.0, множитель напряжения, Voff/Sens
  датчика тока, офсет S-метра.
- AlexDetToWatts: константы Thetis computeAlexFwdPower/computeRefPower по
  моделям (ANAN-100 / 200D / 7000DLE-Anvelina Pro 3 / 8000DLE-Orion MkII,
  6m-спецкейс REV). Дефолт = прежняя формула ANAN-100 (поведение не меняется).
- OnHPStatus: FWD и REV через модельную формулу x множитель банда;
  КСВ = (1+p)/(1-p), p=sqrt(RevW/FwdW) (Thetis) вместо отношения сырых ADC;
  напряжение x SupplyVoltCal; ток с калибруемыми Voff/Sens.
- WDSPEngine.SMeterCalDB: офсет в GetSMeterDBm/GetSliceSMeter (главный
  S-метр, slice-флаги, web).
- Выбор модели в комбо подставляет модельные дефолты датчика тока
  (Anvelina Pro 3/7000DLE: 340 мВ / 88 мВ/А — Thetis GetDefaultVoltCalibration).
- Фиксы: гард FLoading при постройке вкладки (SetItemIndex стреляет OnChange
  на программном присвоении -> AV на nil-контролах), FPageCalib/FNavCalib
  в списках SelectPage (вкладка была невидимой).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 14:35:34 +03:00
co-authored by Claude Fable 5
parent a7e154b959
commit c645b0d1e6
6 changed files with 381 additions and 20 deletions
+9
View File
@@ -698,6 +698,7 @@ type
function DefaultMicSource: TTXMicSource;
procedure ApplyMOX(Active: Boolean);
procedure OnPASettingsChange(MaxPower: Double; const BandCal: array of Double);
procedure OnCalibrationSettingsChange(const C: TCalibration);
procedure OnPlutoTxMaxAttChange(MaxAttDb: Double);
procedure OnAnt936xChange(const A: TAD936xAnt); // разъёмы AD936x (Antenna)
procedure OnVHFCalSettingsChange(const VHFCal: array of Double);
@@ -7413,6 +7414,12 @@ begin
UpdateDriveLabel; // изменился потолок → пересчитать дБ-подпись drive
end;
procedure TMainForm.OnCalibrationSettingsChange(const C: TCalibration);
begin
// Логика (санитизация/офсет S-метра в DSP/persist) — в контроллере.
FController.SetCalibration(C);
end;
procedure TMainForm.OnAnt936xChange(const A: TAD936xAnt);
// Вкладка Antenna (AD936x): таблица «диапазон → разъём». Контроллер сохраняет её
// и сразу применяет разъёмы текущего диапазона/трансвертера.
@@ -8226,6 +8233,7 @@ begin
SF.OnVisibilityChange := ApplyVisibility;
SF.OnFPSChange := ApplyFPS;
SF.OnPAChange := OnPASettingsChange;
SF.OnCalibrationChange := OnCalibrationSettingsChange;
SF.OnPlutoTxChange := OnPlutoTxMaxAttChange;
SF.OnAnt936xChange := OnAnt936xChange;
SF.OnVHFCalChange := OnVHFCalSettingsChange;
@@ -8251,6 +8259,7 @@ begin
SF.LoadAnt936x(FController.Ant936x, FController.FXvtrSettings);
SF.LoadXvtrSettings(FController.FXvtrSettings);
SF.LoadPASettings(FController.FPAMaxPower, FController.FPABandCal);
SF.LoadCalibration(FController.FCal);
SF.LoadPlutoTxMaxAtt(FController.FPlutoTxMaxAttDb);
SF.LoadVHFCalSettings(FController.FVHFBandCal);
SF.LoadCATSettings(