В прошивке добавлена функция configureNarrowbandRxOptions(), которая автоматически подтягивает критичные настройки для полосы 7.81 кГц и близких значений:
- переводит радиомодуль в непрерывный
SetRx(timeout = 0) для тестов без окон, либо держит окно не менее 2.15 с, если нужно ограничение; - включает остановку RX-таймера по преамбуле (
SetStopRxTimerOnPreamble(true)), чтобы окно не закрывалось посреди пакета; - увеличивает преамбулу до 16–24 символов, давая запас на CAD→RX и прогрев TCXO;
- принудительно активирует LDRO, когда длительность символа превышает 16 мс;
- расширяет
LoRaSymbNumTimeout, чтобы поиск заголовка покрывал преамбулу; - ведёт журнал таймингов с префиксом
[RX t=…], фиксируя командыSetRx,PreambleDetected,SyncWordValid,HeaderValid,RxDoneи задержку относительно последнегоSetRx.
По умолчанию диагностика держит флаг state.rxTiming.forceContinuousRx = true. Для боевого режима его можно отключить в коде, чтобы вернуть оконный приём.
Журналы доступны в веб-интерфейсе и по GET /api/log.
- В веб-интерфейсе добавлен выпадающий список для выбора любого фактора расширения SF5–SF12. Выбранное значение отправляется на
POST /api/sfс параметромsf. - Реализован программный частотный прыжковый режим (FHSS) по всем каналам банка HOME. Переключение осуществляется чекбоксом в вебе или
POST /api/fhssс параметромenable(1/0). - Длительность стоянки на частоте задаётся в коде (
state.fhss.dwellTimeMs, по умолчанию 250 мс), а автоматический перебор используется и в передаче, и в приёме. - Для узкополосных экспериментов FHSS теперь удерживает прыжки в пределах ±5 кГц от выбранного канала HOME (общая ширина 10 кГц), синхронно смещая частоты RX и TX. Это позволяет укладываться в жёсткий спектральный бюджет без ручной перенастройки.
- Окна подтверждений теперь используют динамический тайм-аут, вычисляемый из текущих настроек LoRa (BW, SF, преамбула) и статистики RTT. Это ускоряет подтверждение при хорошем канале и автоматически расширяет ожидание при ухудшении условий.
- Пауза между кадрами также рассчитывается на основе времени эфирной передачи, что сокращает межкадровые задержки без увеличения числа коллизий.
- При активном HARQ передаётся XOR-паритет всего окна DATA-блоков, что позволяет автоматически восстановить один потерянный кадр без переотправки. Приёмник отслеживает наличие паритета и проводит реконструкцию перед отправкой ACK.
- Если приёмнику всё ещё требуются избыточные данные, он отмечает это в ACK, и передатчик повторно отправляет паритет, после чего выполняет повторное ожидание подтверждения.
- В код добавлена функция
formatWindowReceptionStatus(), формирующая строку вида|✅|⛔️|✅|для отображения состояния каждого пакета окна в журнале событий, чтобы сразу видеть доставленные и потерянные кадры.
- В папке
src/libs/fecдобавлен модульfec_rs.h/.cppс таблицами поля GF(2^8) на примитивном полиноме0x11Dи шаблонными функциямиencode_window<K,P>()/decode_window<K,P>()для формирования и восстановления RS-пакетов длиной 8 байт. - Кодер использует систематическую матрицу Вандермонда и формирует
Pпаритетных блоков, совместимых с профилямиK=8,P=2,K=8,P=4,K=10,P=6. - Декодер решает систему линейных уравнений методом Гаусса в GF(256) по любому набору из
Kпринятых пакетов и возвращаетfalse, если доступных столбцов меньшеK. - Для верификации добавлен утилитарный тест
tests/test_rs.cpp, который перебирает все допустимые комбинации стираний, а также проверяет восстановление бурстов длиной доK/2с использованием новых функций.