Протоколы приёмников, которые читает receiver-trust (0,38)
Везде только чтение: ничто здесь не записывает ни байта в приёмник, и никакого тракта передачи нет. Программное обеспечение консультативного характера, не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162): ответственность остаётся на операторе.
Собственные флаги спуфинга и подавления приёмника (UBX)#
| сообщение | поле | читается как |
|---|---|---|
| UBX-NAV-STATUS (0x01 0x03), 16 байт | байт flags2 со смещением 7, биты 4..3: spoofDetState |
0 неизвестно или отключено, 1 спуфинг не обозначен, 2 обозначен спуфинг, 3 несколько признаков спуфинга (протокол 18 и новее; описание интерфейса u-blox F9 HPG 1,32, раздел 3.15.20) |
| UBX-SEC-SIG (0x27 0x09) версия 1, 12 байт | jamFlags со смещением 4 (бит 0 jamDetEnabled, биты 2..1 jammingState); spfFlags со смещением 8 (бит 0 spfDetEnabled, биты 3..1 spoofingState) |
состояния читаются только там, где детектор включён; 0 неизвестно, 1 нет, 2 предупреждение или обозначено, 3 критично или подтверждено |
| UBX-SEC-SIG версия 2 | sigSecFlags со смещением 1 (бит 0 jamDetEnabled, биты 2..1 jammingState, бит 3 spfDetEnabled, биты 6..4 spoofingState); jamNumCentFreqs со смещением 3 и столько 4-байтовых групп (не используются) |
как выше |
Источник раскладки SEC-SIG. Описания интерфейсов u-blox F9 HPG 1,32 и M10 SPG 5,10, которые удалось скачать на момент написания, называют UBX-SEC-SIG, но не определяют его. Приведённые выше раскладки взяты из более поздних описаний интерфейса u-blox в том виде, как они транскрибированы в библиотеке pyubx2 (BSD-3-Clause, SEC-SIG-V1 и SEC-SIG-V2); тесты на эталонных данных в tests/receiver_trust_self_report.rs построены по этой раскладке, а не по выходным данным реального приёмника. Раскладка из открытой транскрипции, не сверена с актуальным руководством изготовителя: сверьте её с актуальным описанием интерфейса u-blox, прежде чем полагаться на SEC-SIG.
У SEC-SIG нет времени недели; он относится к текущей навигационной эпохе. Состояние, уже прочитанное в эпохе, сохраняется, если только более позднее не хуже.
Сравнение receiver-self-report#
Если журнал содержит эти флаги, у каждой эпохи результата есть self_report (два состояния, поднимает ли приёмник флаг, подала ли тревогу какая-либо из проверок Kshana, и agreement: both, receiver-only, kshana-only, neither или calibrating), а у результата есть receiver_self_report с числами и первой эпохой каждого случая. Приёмник «поднимает флаг» при состоянии 2 и выше. Это не вызывает тревоги и не меняет ни одной оценки, и ни одна из сторон не является эталоном истины: согласие — это не валидация, а расхождение говорит лишь о том, что один детектор увидел то, чего не увидел другой, и ничего о том, кто был прав. Полоса в Studio читает epochs[].self_report.
Septentrio SBF (format = "sbf")#
receiver_trust::ingest::read_sbf декодируется крейтом sbf-tools (0,4, MIT; единственная его зависимость — thiserror; разрешительная лицензия, которую допускает deny.toml). Читаемые блоки: PVTGeodetic (4007) для решения, MeasEpoch (4027) для C/N0 по каждому спутнику и сигналу (band — имя сигнала, например L1CA) и RFStatus (4092) для числа радиодиапазонов, у которых байт Info не равен нулю (rf_bands_reported, передаётся и не интерпретируется: он никогда не считается флагом). Эпохи ключуются по времени недели и номеру недели и помечаются во времени GPS (2024-09-05T00:00:00.000 GPST). Блок, не прошедший CRC или разбор, считается пропущенной записью. Этот читатель не читает АРУ или индикатор подавления, поэтому мониторы падения C/N0 и потери захвата работают, а мониторы АРУ и индикатора подавления — нет.
Источник раскладок. Справочное руководство Septentrio на момент написания скачать не удалось (сервер отклонил запрос), поэтому раскладки взяты из исходного кода sbf-tools, который ссылается на руководство, а эталонные данные в tests/receiver_trust_sbf.rs — синтетические блоки, построенные по этой раскладке и её CRC-16-CCITT. Реальный журнал SBF не использовался. Раскладка из крейта с открытым кодом, не сверена с актуальным руководством изготовителя: сверьте её со справочным руководством Septentrio, прежде чем полагаться на неё.
Прямой ввод по последовательному порту и USB (receiver-trust live --serial)#
kshana receiver-trust live session.toml --serial /dev/ttyUSB0 --baud 4800 [--gate ...]
Только Unix. Команда открывает устройство на чтение, переводит локальную линию в «сырой» режим на скорости --baud (по умолчанию 4800, скорость NMEA 0183) и читает строки NMEA, как из любого другого источника. Она никогда ничего не записывает в приёмник. --configure отклоняется с пояснением: Kshana не настраивает приёмники; задайте вывод NMEA в приёмнике штатным средством изготовителя, а затем читайте его. Поток — NMEA, как для каждого источника live (UBX и SBF читаются из файлов). Устройство, которое пропало, завершает команду как отказ (код выхода 1), чтобы супервизор перезапустил её; слой не переподключается. Проверено на петле псевдотерминала (tests/receiver_trust_live_serial.rs), включая то, что ведущая сторона не получает от команды ни одного байта.