M
MeshTRX
Все статьи

Одна нога микросхемы и пятьдесят восемь децибел

5 мин чтения

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

Усилитель, который был не при делах

Самая дорогая находка. На одной из ревизий платы приём работал, передача работала, связь была — но дальность оказывалась заметно хуже ожидаемой.

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

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

Вывод, который мы вынесли: «работает» и «работает как задумано» — разные вещи, и отличить их можно только замером.

Вифи, который глушил приём

Ретранслятор поднимает у себя веб-страницу — карту станций, статистику, настройки. Для этого ему нужен вифи, и долгое время он держал сразу два режима: свою точку доступа и подключение к домашней сети.

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

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

Поучительно здесь то, что подозрение пришло от человека, который наблюдал за устройством в работе, а не от нас. И что подтвердилось оно только цифрами.

Крестик на дошедшем сообщении

Ошибка, которая не ломает связь, но портит доверие к ней.

Сообщение уходило, доходило до адресата, тот его читал — а у отправителя стоял крестик «не доставлено». Подтверждение о доставке терялось на обратном пути или приходило позже, чем приложение готово было ждать, и оно рисовало отказ.

Исправление получилось не в том, чтобы ждать дольше, а в том, чтобы перестать врать. Теперь у сообщения три состояния вместо двух: доставлено, ушло без подтверждения и не отправлено. Второе — честное «мы не знаем»: в полудуплексном эфире потеряться может и сам ответ. Запоздавшее подтверждение ставит галочку задним числом.

Поучительно здесь то, что интерфейс, который уверенно показывает неправду, хуже интерфейса, который признаёт неопределённость.

Дубли, шум и прочая мелочь

Несколько находок помельче, но из той же серии — видно их только в живой сети.

Сообщения двоились, когда в сети появлялся ретранслятор: он честно повторял чужой пакет, в том числе пакет отправителя, и тот получал собственное сообщение обратно. В чате это выглядело как дубль. Лечится тем, что станция игнорирует пакеты со своим собственным адресом отправителя.

Недопринятое голосовое доигрывалось шипением. Если часть пакетов потерялась, на их месте оставались нули, а кодек добросовестно превращал нули в шум — и человек слушал полминуты шипения после короткой фразы. Теперь воспроизводится то, что дошло целым, а хвост с пропусками отбрасывается: короткая фраза лучше фразы с шумом.

Ретранслятор путался в собственном канале — вернее, так казалось. На странице в списке стоял один канал, в таблице другой. Разбор показал, что ошибки нет: список показывает то, что выбрал человек, а таблица — реальное состояние. Лечится не кодом, а подписью: текущий канал теперь помечен прямо в списке.

Чего стенд не находит

У проекта есть стенд: две платы, телефон, шесть десятков проверок — текст, голос, файлы, вызовы, ретранслятор, потери, нагрузка. Он ловит многое и экономит часы.

Но ни одну из описанных выше ошибок он бы сам не нашёл, и причина понятна. На стенде платы стоят в полуметре друг от друга, эфир чистый, питание от стабильного источника, а сценарии — те, которые мы придумали заранее. Дальность там не проверишь, городские помехи не воспроизведёшь, и уж точно не воспроизведёшь ситуацию «человек гуляет с рацией, а вторая станция лежит дома».

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

Поэтому самое ценное в сообщении из группы — не жалоба, а деталь. «Не работает» проверить нельзя. «На станциях канал поменялся, на ретрансляторе нет» — можно, и на это ушло двадцать минут.

Что проект умеет сегодня — в документации. Что делается сейчас и что отложено — на странице проекта. Наблюдения из поля всегда кстати в группе.