mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
chore: refine project documentation
This commit is contained in:
+13
-13
@@ -498,7 +498,7 @@ procedure TDUCIQSenderThread.Execute;
|
||||
const
|
||||
DUC_IQ_PAIRS_PER_PACKET = 240;
|
||||
DUC_SAMPLE_RATE = 192000; // IQ pairs per second
|
||||
// Пейсинг DUC-FIFO радио — модель dl1ycf pihpsdr (new_protocol_txiq_thread).
|
||||
// Пейсинг DUC-FIFO синхронизирован с аппаратным тактированием радио.
|
||||
// Продюсер (TTXDSPThread) mic-клочит очередь: mic-пакеты радио идут на кварце
|
||||
// радио, а mic-ADC и DUC-DAC на одном кристалле → темп прихода mic = темп
|
||||
// расхода DAC. Значит очередь пополняется ровно радиоклоком, и sender должен
|
||||
@@ -611,7 +611,7 @@ begin
|
||||
DrainVirtualFIFO;
|
||||
// Очередь пуста. НЕ инжектируем нулевые пакеты — 1.25мс тишины прямо
|
||||
// в поток сэмплов = разрыв данных = всплеск на водопаде/в эфире. Как
|
||||
// dl1ycf pihpsdr (txiq_thread: пустая очередь → просто sem_wait): ждём
|
||||
// При пустой очереди ждём сигнала о появлении данных.
|
||||
// следующий WDSP-блок продюсера. Короткий разрыв покрывает подушка
|
||||
// pre-roll в FPGA-FIFO радио; mic-клок продюсера держит очередь полной.
|
||||
// На передаче ждём коротко (быстро подхватить пришедший блок), на приёме
|
||||
@@ -668,7 +668,7 @@ begin
|
||||
Sleep(50);
|
||||
if Terminated then Break;
|
||||
if not FNet.FConnected then Continue;
|
||||
// Отправляем полный HP с частотами и ALEX — как piHPSDR
|
||||
// Отправляем полный HP-пакет с частотами и состоянием ALEX.
|
||||
FNet.SendFullHP;
|
||||
// Повторно отправляем DDC/DUC Specific первые 5 сек после Run=1 (каждые 500 мс).
|
||||
// ddc_specific_thread / duc_specific_thread на эмуляторе/железе стартуют
|
||||
@@ -1351,14 +1351,14 @@ begin
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ALEX фильтры — логика из piHPSDR new_protocol.c
|
||||
// Формирование регистра фильтров ALEX.
|
||||
// Возвращает 32-bit ALEX0 register value
|
||||
// RXFreqHz — частота приёма ADC0
|
||||
// TXFreqHz — частота передачи (или = RXFreqHz при RX)
|
||||
// Transmitting — режим передачи
|
||||
// IsOrion2 — ANAN-7000/8000 (другие BPF)
|
||||
// ---------------------------------------------------------------------------
|
||||
// Преобразует частоту в индекс диапазона 0=160m..10=6m (Thetis-compatible).
|
||||
// Преобразует частоту в протокольный индекс диапазона 0=160m..10=6m.
|
||||
function FreqToBandIndex(FreqHz: Double): Integer;
|
||||
begin
|
||||
if FreqHz >= 39850000 then Result := 10 // 6m
|
||||
@@ -1386,7 +1386,7 @@ end;
|
||||
// XVTR без усиления.
|
||||
// XvtrActive — True когда активен XVTR-диапазон; разрешает биты 8+11
|
||||
// (стандарт) или 8+14 (Orion2) из Alex.RxOnly[IF_band]=3.
|
||||
// WidebandBypass — True когда открыт raw ADC wideband. Как Thetis, раскрываем
|
||||
// WidebandBypass — True, когда открыт raw ADC wideband. В этом режиме раскрываем
|
||||
// RX front-end через HF bypass, иначе видна только полоса
|
||||
// текущего HPF/BPF, а не весь ADC span.
|
||||
function CalcAlex0(RXFreqHz, TXFreqHz: Double;
|
||||
@@ -1411,7 +1411,7 @@ begin
|
||||
if not XvtrDisablePA then
|
||||
begin
|
||||
Result := Result or $08000000; // bit 27: T/R relay
|
||||
// Bit 18 = PureSignal (ALEX_PS_BIT в pihpsdr): на TX подключает
|
||||
// Bit 18 = PureSignal: на TX подключает
|
||||
// внутренний мост обратной связи PA к RX-тракту ADC0.
|
||||
if PureSignalTX then
|
||||
Result := Result or $00040000;
|
||||
@@ -1604,8 +1604,8 @@ end;
|
||||
// Строит ЛОГИЧЕСКУЮ маску OC-пинов: бит i = пин i+1 (i = 0..OC_PIN_COUNT-1) —
|
||||
// в тех же координатах, в которых маски лежат в настройках и рисуются в UI.
|
||||
// Сдвиг в проводное представление байта 1401 делает вызывающий (SendFullHP).
|
||||
// Портировано из Thetis (Penny.UpdateExtCtrl/adjustForTXAction), урезано:
|
||||
// без PA-override и split-pins VFO A/B (см. project_oc_control память).
|
||||
// Реализация учитывает только возможности EWSDR: без PA-override и
|
||||
// раздельных пинов VFO A/B.
|
||||
// RX: маска банда/слота как есть. TX: маска банда/слота, каждый включённый
|
||||
// пин дополнительно гейтится своим TX pin action (MOX/TUNE/TWOTONE и их
|
||||
// комбинации) — тот же tx-флаг остаётся True на всём протяжении TUN/2TON
|
||||
@@ -1735,7 +1735,7 @@ begin
|
||||
if FPanDDCEnabled[ddc] then
|
||||
AddDDC(ddc, FPanDDCRateKHz[ddc], FPanDDCADC[ddc]);
|
||||
|
||||
// PureSignal feedback (как pihpsdr new_protocol_receive_specific): на время
|
||||
// PureSignal feedback: на время
|
||||
// PTT DDC0 ← ADC0 (RX-feedback с моста PA), DDC1 ← «ADC 2» = TX DAC loopback,
|
||||
// оба 192 кС/с 24 бита, DDC1 синхронизирован с DDC0 (byte 1363 bit1) —
|
||||
// его сэмплы приходят interleaved внутри потока DDC0 (порт 1035).
|
||||
@@ -1866,7 +1866,7 @@ end;
|
||||
|
||||
procedure THPSDRNetwork.SetCWXKey(Down: Boolean);
|
||||
// Каждый фронт — немедленный HP-пакет: тайминги посылки держит PC, задержка
|
||||
// доставки = один UDP-пакет (так же делает Thetis, cwx.cs setkey).
|
||||
// доставки определяется отправкой одного UDP-пакета.
|
||||
begin
|
||||
if FCWXKey = Down then Exit;
|
||||
FCWXKey := Down;
|
||||
@@ -1945,7 +1945,7 @@ begin
|
||||
Buf[12 + ddc*4] := Ph and $FF;
|
||||
end;
|
||||
|
||||
// PureSignal: feedback-DDC0/DDC1 следят за TX-частотой (pihpsdr, bytes 9..16).
|
||||
// PureSignal: feedback-DDC0/DDC1 следят за TX-частотой из байтов 9..16.
|
||||
// DDCBase=2 ⇒ с частотным словом главного DDC (bytes 17..20) не пересекаемся.
|
||||
if FPSTXActive then
|
||||
begin
|
||||
@@ -2000,7 +2000,7 @@ begin
|
||||
end;
|
||||
|
||||
// XVTR enable bit (byte 1400 bit 0) — управляет выходом VHF T/R relay платы.
|
||||
// Логика как в Thetis:
|
||||
// Правила установки бита:
|
||||
// в XVTR-режиме: бит = DisablePA (внешний T/R relay нужен только если PA подавлен)
|
||||
// в HF-режиме: бит = Alex.EnableXvtrHf (галочка "Enable XVTR HF" в Antenna tab)
|
||||
if FXvtrEnable then
|
||||
|
||||
Reference in New Issue
Block a user