From 3115b2b5bf67d55486a64ce927b346701221d776 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 23 Jun 2026 12:06:07 +0300 Subject: [PATCH] feat: add LO Error field to QO-100 settings tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Expose the QO-100 slot's LOError (Hz) on the QO-100 settings page, placed right after LNB LO. Maps to Entries[QO100_SLOT].LOError — the live LNB-drift calibration that the beacon lock folds its correction into. Group height extended to 8 rows and the info label shifted down. Co-Authored-By: Claude Opus 4.8 --- SettingsForm.pas | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SettingsForm.pas b/SettingsForm.pas index 19f7a1f..c2fa71c 100644 --- a/SettingsForm.pas +++ b/SettingsForm.pas @@ -248,6 +248,7 @@ type FNavQO: TFlatButton; FQoEn: TFlatCheckBox; FQoLnbLO: TFlatFloatSpinEdit; // МГц — LNB LO (= LOOffset, RX) + FQoLoErr: TFlatFloatSpinEdit; // Гц — LO Error (= LOError, живая калибровка LNB / beacon-lock) FQoTxLO: TFlatFloatSpinEdit; // МГц — транспондер-offset (= TxLOOffset) FQoBegin: TFlatFloatSpinEdit; // МГц — downlink begin FQoEnd: TFlatFloatSpinEdit; // МГц — downlink end @@ -3480,7 +3481,7 @@ begin L.Font.Name := UI_FONT; L.Font.Size := 9; L.Font.Color := CLR_TEXTDIM; L.WordWrap := True; - Grp := MakeGroupPanel(FPageQO, 'Transponder', MARGIN, 100, 560, GRP_TITLE_H + 7 * 30 + 16); + Grp := MakeGroupPanel(FPageQO, 'Transponder', MARGIN, 100, 560, GRP_TITLE_H + 8 * 30 + 16); Y := GRP_TITLE_H + 8; FQoEn := TFlatCheckBox.Create(Self); @@ -3493,6 +3494,11 @@ begin FQoLnbLO := QoFloat(Y, 0.0, 50000.0, 0.001, 6); FQoLnbLO.Value := 9750.0; + // LO Error (Гц): живая калибровка дрейфа LNB; beacon-lock складывает сюда + // свою коррекцию. Диапазон ±10 МГц — LNB без опоры уходит на сотни кГц. + Inc(Y, 30); QoLabel('LO Error (Hz)', Y); + FQoLoErr := QoFloat(Y, -9999999.0, 9999999.0, 1.0, 0); + Inc(Y, 30); QoLabel('Transponder offset = downlink - uplink (MHz)', Y); FQoTxLO := QoFloat(Y, 0.0, 50000.0, 0.001, 6); FQoTxLO.Value := 8089.5; @@ -3518,7 +3524,7 @@ begin FQoInfo := TLabel.Create(Self); FQoInfo.Parent := FPageQO; - FQoInfo.SetBounds(MARGIN, 100 + GRP_TITLE_H + 7 * 30 + 28, 700, 52); + FQoInfo.SetBounds(MARGIN, 100 + GRP_TITLE_H + 8 * 30 + 28, 700, 52); FQoInfo.Font.Color := CLR_TEXTDIM; FQoInfo.Font.Name := 'Courier New'; FQoInfo.Font.Size := 9; FQoInfo.WordWrap := True; finally @@ -3545,6 +3551,7 @@ begin FXvtrConfig.Entries[QO100_SLOT].FullDuplexTx := True; // слот всегда QO-100 FXvtrConfig.Entries[QO100_SLOT].ButtonText := 'QO-100'; FXvtrConfig.Entries[QO100_SLOT].LOOffset := FQoLnbLO.Value * 1.0e6; + FXvtrConfig.Entries[QO100_SLOT].LOError := FQoLoErr.Value; FXvtrConfig.Entries[QO100_SLOT].TxLOOffset := FQoTxLO.Value * 1.0e6; FXvtrConfig.Entries[QO100_SLOT].FreqBegin := FQoBegin.Value * 1.0e6; FXvtrConfig.Entries[QO100_SLOT].FreqEnd := FQoEnd.Value * 1.0e6; @@ -3559,6 +3566,7 @@ begin E := FXvtrConfig.Entries[QO100_SLOT]; FQoEn.Checked := E.Enabled; FQoLnbLO.Value := E.LOOffset / 1.0e6; + FQoLoErr.Value := E.LOError; FQoTxLO.Value := E.TxLOOffset / 1.0e6; FQoBegin.Value := E.FreqBegin / 1.0e6; FQoEnd.Value := E.FreqEnd / 1.0e6;