feat(node): push USB changes and preserve sensor setup across sessions
This commit is contained in:
@@ -110,5 +110,76 @@ UTC/monotonic timestamps, счётчики и SHA-256 завершённого
|
||||
нужно остановить.
|
||||
|
||||
Первый тест исходной записи обнаружил отказ SDK от расширения .bag; это
|
||||
исправлено в профиле 0.6.6 и требует повторной аппаратной проверки. SDK
|
||||
исправлено в профиле 0.6.6 и аппаратно проверено в 0.6.7. SDK
|
||||
[документирует формат .db3](https://github.com/realsenseai/librealsense/blob/master/doc/record-and-playback.md).
|
||||
|
||||
Обновление приёмки: запись .db3 и её RGB/depth-воспроизведение проверены в
|
||||
общем локальном UI Node. В 0.6.7 исправлен автоматический JSX runtime для
|
||||
общего модуля вне tsconfig приложения. 0.6.8 выносит подсчёт SHA-256 за mutex
|
||||
инвентаризации: состояние остаётся stopping/finalizing и запрещает новый захват,
|
||||
но системные сведения и heartbeat продолжают отвечать. Отдельный тест удерживает
|
||||
хеширование и проверяет свободный inventory-lock и отказ нового START.
|
||||
|
||||
Последняя визуальная корректировка владельца: после успешной подготовки
|
||||
отображается только одна лампочка (StatusBadge indicator), без галочки и
|
||||
дублирующего текста. Доступное название и подсказка сохраняют смысл состояния.
|
||||
|
||||
Полная аппаратная приёмка в нативном GTK/WebKit-окне, работа через tailnet вне
|
||||
LAN, смена USB-топологии/перезагрузка и чистая система не объявлены пройденными.
|
||||
На момент этой записи применение нового replay action в работающем Core
|
||||
ожидает отдельного разрешения на перезапуск: автоматическая проверка
|
||||
интерпретировала просьбу «не прерывать процесс» как запрет останавливать сервер.
|
||||
|
||||
Корректировка владельца 06.09.2026: кнопка первой подготовки удаляется из
|
||||
строки после успешной инициализации. Повторное действие находится в настройках:
|
||||
«Конфигурация на БК → Обновить» и вызывает тот же профиль, без произвольных
|
||||
команд или сетевого скачивания. Результат первой подготовки сохраняется
|
||||
независимо от текущей связи/сеанса драйвера. По следующему уточнению владельца отключённый сенсор исчезает из списка
|
||||
подключённых устройств в обоих UI. Его приватная запись, имя и настройки сохраняются;
|
||||
действие подготовки требует подключения. Перезапуск службы не возвращает
|
||||
первичную кнопку. Проверка перехода restart/offline добавлена в Go-тест.
|
||||
|
||||
|
||||
## Подключение и отключение USB: уточнение 06.09.2026
|
||||
|
||||
Оператору не нужен Refresh. Первичное перечисление даёт полный снимок Linux
|
||||
sysfs и SDK. События udev add/remove/change для USB device запускают сверку:
|
||||
событие — только сигнал, его поля никогда не являются командой или готовым
|
||||
описанием устройства. Серия событий интерфейсов объединяется; один физический
|
||||
D455 имеет одну аппаратную идентичность, USB-адрес/порт могут измениться.
|
||||
|
||||
Node слушает фиксированный `udevadm monitor --udev --subsystem-match=usb
|
||||
--property` без root, через уже разрешённый AF_NETLINK. Событие будит
|
||||
существующий исходящий mTLS-канал и локальные подписки. Node и Core отправляют
|
||||
снимки своим интерфейсам по SSE: одно соединение, новые состояния приходят от
|
||||
сервера. Core ничего не опрашивает в USB на операторском компьютере. LAN или
|
||||
Tailscale переносит управляющие сообщения; USB не пробрасывается. SDK драйвера
|
||||
остаётся единственным владельцем камеры и потоков на БК.
|
||||
|
||||
Heartbeat раз в 5 секунд сохранён для связи, доставки команд и восстановления
|
||||
пропущенных событий, поэтому обнаружение не зависит исключительно от monitor.
|
||||
Локальный SSE пересылает контрольный снимок раз в 15 секунд, при операции — раз
|
||||
в 2 секунды. При потере SSE UI временно использует опрос раз в 3 секунды и
|
||||
автоматически возвращается на push. Новое соединение всегда получает полный
|
||||
снимок: потерянная последовательность событий не оставляет фантомные строки.
|
||||
Нет обещания атомарного обновления двух экранов: локальный экран обновляется
|
||||
первым, Core — после передачи того же состояния по действующему доверию.
|
||||
|
||||
Подключение: строка появляется автоматически; имя и факт первой подготовки
|
||||
берутся из сохранённой аппаратной идентичности. Новый сеанс не выдаётся за
|
||||
новую установку. Лампочка готовности требует актуальных данных, а старый успех
|
||||
проверки не выдаётся за действующий захват. Сама установка и подготовка не
|
||||
запускаются просто от появления USB.
|
||||
|
||||
Отключение: строка исчезает из списка подключённых. Открытый экран сохраняет
|
||||
контекст с сообщением об отключении; старые кадры очищаются. Живой захват
|
||||
останавливается, незавершённая исходная запись получает failed/interrupted;
|
||||
она не удаляется и не возобновляется сама. Просмотр уже сохранённого файла
|
||||
не зависит от USB. Повторное подключение открывает новый сеанс; прежние команды
|
||||
START с предыдущим сеансом отвергаются. Вторая физическая D455 с другим serial
|
||||
не наследует имя и подготовку первой.
|
||||
|
||||
Потеря связи с БК не означает отключение USB. Core сохраняет последние сведения,
|
||||
отмечает недоступность БК и запрещает аппаратные команды до свежего подтверждения.
|
||||
Физические unplug/replug и смена USB-порта требуют отдельной аппаратной приёмки;
|
||||
автоматическое пересоздание sandbox IIO при смене путей пока не подтверждено.
|
||||
|
||||
Reference in New Issue
Block a user