mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
fix(cat): align Andromeda panel mapping with real G2 hardware (Thetis)
Button/encoder indices follow Thetis MakeNewAndromedaDataset (our 0-based index = Thetis Number - 1), verified against andromeda_test/AndDecode.pas. The old map assumed sequential 0,1,2.. and truncated at 32; the real panel sends sparse indices up to 47. - AndromedaMap: AND_MAX_BUTTONS 32->48, renumbered button/encoder tables; new actions abVFOAtoB/abVFOBtoA/abVFOLock/abStartStop/abShift. - RadioController: VFO Lock (FVfoLock, rfVfoLock, SetVfoLock, gate in TuneActiveBy). - AndromedaPanel: wire A>B/B>A/SDR-ON/Lock; Shift band-keypad layer (#28 latch, #29..39 -> SetBand 160m..6m, non-sticky); aiVFOLock/aiShift indicators. - Filter High/Low (#4/#5) left as width approximation per decision. - doc/ANDROMEDA.md updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -60,7 +60,7 @@ type
|
||||
|
||||
// Поле, которое изменилось — для гранулярных уведомлений наружу.
|
||||
TRadioField = (
|
||||
rfVfoA, rfVfoB, rfActiveVfo,
|
||||
rfVfoA, rfVfoB, rfActiveVfo, rfVfoLock,
|
||||
rfMode, rfFilter, rfFilterBW,
|
||||
rfAGCMode, rfAGCTop,
|
||||
rfRxGain, // Pluto: hw-gain (auto/manual dB)
|
||||
@@ -217,6 +217,7 @@ type
|
||||
FTransmitting: Boolean;
|
||||
FTuning: Boolean;
|
||||
FSplitTxB: Boolean;
|
||||
FVfoLock: Boolean; // блокировка перестройки VFO (Andromeda Lock)
|
||||
FDisplayDuplex: Boolean;
|
||||
// QO-100 full-duplex self-monitor: True — RX-аудио глушится на TX (по умолч.),
|
||||
// False — слышим свой downlink со спутника при передаче. Кнопка RX MUTE.
|
||||
@@ -515,6 +516,7 @@ type
|
||||
procedure SetMOX(On_: Boolean);
|
||||
procedure SetTune(On_: Boolean); // TUN
|
||||
procedure SetSplit(TxOnB: Boolean); // split: TX на VFO-B (иначе VFO-A)
|
||||
procedure SetVfoLock(On_: Boolean); // блокировка перестройки VFO
|
||||
|
||||
// FM
|
||||
procedure SetFMStep(Idx: Integer);
|
||||
@@ -1899,6 +1901,7 @@ end;
|
||||
|
||||
procedure TRadioController.TuneActiveBy(DeltaHz: Double);
|
||||
begin
|
||||
if FVfoLock then Exit; // VFO заблокирован — перестройку игнорируем
|
||||
if FActiveVfo = 0 then SetVfoA(FVfoA + DeltaHz)
|
||||
else SetVfoB(FVfoB + DeltaHz);
|
||||
end;
|
||||
@@ -2712,6 +2715,15 @@ begin
|
||||
Changed(rfActiveVfo);
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetVfoLock(On_: Boolean);
|
||||
// VFO Lock: пока включён, относительная перестройка (TuneActiveBy — энкодер VFO
|
||||
// панели, CAT UP/DN) игнорируется. Подсветка — индикатор aiVFOLock (#11).
|
||||
begin
|
||||
if FVfoLock = On_ then Exit;
|
||||
FVfoLock := On_;
|
||||
Changed(rfVfoLock);
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetFMRpt(Dir: Integer);
|
||||
begin
|
||||
FFMRptDir := Dir;
|
||||
|
||||
Reference in New Issue
Block a user