mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
fix(cw): первый прогон на железе — частота, мощность, индикация, полоса
Семь дефектов, вскрытых проверкой в эфире. Общий корень у большинства: с кейером в прошивке FTransmitting не поднимается вовсе — передачей владеет FPGA, — а половина проекта считала этот флаг признаком эфира. Обрыв посылки после первого элемента. При break-in железо само поднимает T/R на каждую посылку, HPS_PTT это отражает, и разбор статуса гонял по фронту SetMOX(True/False); снятие MOX гасило CWX. Теперь в телеграфе фронт HPS_PTT не управляет передачей. Без этого и работа манипулятором пересобирала бы передающий тракт на каждой точке. Обрыв по «key hit» переведён на фронт лепестка: на плате без ключа входы могут стоять в единице, и проверка уровня убивала бы передачу сразу. Посылка уходила по центру дисплея, а не на VFO. StartRunning ставил DUC на центр DDC; до первой перестройки VFO или до первого MOX там и оставалось. Без CTUN центр совпадает с VFO, поэтому баг и дожил до телеграфа, где MOX не бывает. SetRunAndFreq получает TX-частоту, SetSliceTarget толкает кадр, когда перестраивают слайс-источник. Правило: DUC обязан стоять правильно всегда, а не только на передаче. Мощность ниже, чем на TUN: уровень (байт 345) клался в кадр только при FIsTransmitting. Введён SetCWKeyerArmed — пока кейер вооружён, уровень лежит в каждом HP-кадре. Там же пересчитывается FDriveLevel, иначе до первого касания ручки в железо уходил ноль. Индикация не показывала передачу: события rfTransmitting в телеграфе не бывает, поэтому блок рендера не выполнялся ни разу. ApplyHPStatus шлёт его сам на фронтах RadioKeyed («железо в эфире» = передача или замыкание ключа прошивкой, выдержка 8 точек и не меньше 500 мс). На RadioKeyed переведены S-метр, красная полоса главного VFO и TX-бейджи флагов вместе с красной полосой слайса на панадаптерах. Полоса на спектре рисовалась как SSB: TXSignedEdges обязана отдавать для CW голосовую боковую (через bp0 идёт тон pitch при настройке), поэтому экранные кромки развязаны в TXFilterEdgesHz — занимаемая полоса манипуляции симметрично несущей. Тот же класс, что был у ЧМ. F1..F8 молчали, пока не откроешь окно памяти: обработчик упирался в проверку лениво создаваемой формы. Текст берётся из настроек. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -184,6 +184,11 @@ type
|
||||
// передачи телеграфа — несущую по нему формирует прошивка. Пакет уходит
|
||||
// немедленно, каждый фронт (тайминги держит PC). Pluto — no-op.
|
||||
procedure SetCWXKey(Down: Boolean); virtual;
|
||||
// Кейер в прошивке вооружён: железо может замкнуть ключ САМО, без нашего
|
||||
// PTT. Пока флаг взведён, уровень мощности обязан лежать в каждом HP-кадре
|
||||
// (обычно он шлётся только на передаче — а «передачи» с точки зрения софта
|
||||
// тут не происходит вовсе). Pluto — no-op.
|
||||
procedure SetCWKeyerArmed(Armed: Boolean); virtual;
|
||||
procedure SetStepAtten(dB: Byte); virtual;
|
||||
// RX-усиление (Pluto/AD936x). ModeIdx: 0=manual, 1=fast_attack, 2=slow_attack,
|
||||
// 3=hybrid. GainDb применяется только в manual. HPSDR — no-op.
|
||||
@@ -285,6 +290,10 @@ procedure TRadioBackend.SetCWXKey(Down: Boolean);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TRadioBackend.SetCWKeyerArmed(Armed: Boolean);
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TRadioBackend.SetStepAtten(dB: Byte);
|
||||
begin
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user