EdigE
← ЛЕНТА

CEEFAX Station оживляет телетекст в AX.25-эфире

У старого Ceefax была очень конкретная магия: телевизор показывал страницу, которую зритель не запрашивал. Передатчик непрерывно крутил сотни строк, а декодер терпеливо ждал нужный номер. CEEFAX Station переносит эту механику в любительский эфир. Компьютер готовит набор страниц, радиостанция выпускает их в канал, другой узел ловит звук и постепенно восстанавливает экран.

Экран, который крутится в радиоэфире

Название здесь стоит понимать буквально как стилизацию, а не реализацию британского телевизионного стандарта. Страницы задаются JSON-данными и компилируются в собственные текстовые кадры размером 50×23 символа. Передатчик посылает их каруселью. Поэтому получатель способен включиться посреди цикла, дождаться следующего прохода и увидеть страницу без отдельного сеанса, логина или ответа от сервера. Для локальной радиосети это неожиданно естественная модель: расписание клуба, прогноз, короткая доска объявлений или результат соревнования существуют в эфире как повторяющийся объект.

Узкое горлышко начинается сразу после экрана. Информационное поле AX.25 ограничено в проекте 240 байтами, поэтому кадр приходится дробить на фрагменты и упаковывать в UI-кадры. К ним добавляются адреса, контрольная последовательность FCS, HDLC-флаги, bit stuffing и паузы между пакетами. Номинальные 1200 бод описывают скорость символов аудиомодема; полный экран приходит существенно дольше, причём его задержка зависит ещё и от позиции в карусели. Зато протокол уже знаком радиолюбительскому железу и программным TNC.

Почему один кадр приходится рвать на пакеты

M7TJF / thaum-labs

Аудиотракт намеренно старомоден. Модулятор генерирует монофонический 16-битный PCM с частотой 48 кГц, использует 1200 Гц для mark и 2200 Гц для space, NRZI-кодирование и непрерывность фазы между символами. По умолчанию перед каждым блоком идут 150 HDLC-флагов, между кадрами вставляются два, после передачи — ещё 20. Такой WAV можно подать в аудиовход трансивера; для живого приёма проект подключается к Dire Wolf. Есть и режим декодирования уже записанного AX.25-аудио, полезный для отладки без эфира.

Самая красивая часть этой конструкции — вещание без обещания мгновенности. Страница здесь не является файлом, который гарантированно прилетит по запросу: она похожа на радиомаяк, который надо услышать целиком. Потерянный фрагмент оставит неполный кадр, а следующий оборот карусели даёт новую попытку. Официальная карта умеет показывать передающие, слушающие и принимающие узлы, включая полный либо частичный приём, однако карта сама по себе не доказывает качество эфирного тракта.

Вещание, которому разрешено опаздывать

Проект пока имеет статус alpha, и для него особенно интересны будущие полевые цифры: занятая полоса, девиация, порог SNR, доля битых пакетов и время доставки страницы. Их в открытой документации пока нет. Зато код уже хорошо показывает инженерную ставку: взять протокол, созданный для коротких пакетных сообщений, и заставить его нести маленькое общественное табло, слышимое любым узлом на частоте при соблюдении местных правил любительской службы.