feat: add unified SET protocol v2

This commit is contained in:
2026-08-24 19:19:32 +03:00
parent 033c7ab9e8
commit 085eb3c8bd
15 changed files with 1953 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
# Переход на SET protocol v2
Цель перехода — не поддерживать два развивающихся протокола. GUI protocol v1
и ProtoCAN после начала миграции получают только исправления критических ошибок;
новые команды добавляются исключительно в SETP v2.
## Этап 1. Транспорт и обнаружение
1. Подключить `set_protocol.c` к прошивке.
2. Реализовать v2 `PING`, `DEVICE_INFO` и `CAPABILITIES`.
3. В SETGUI при подключении отправлять v2 PING.
4. Только после полного тайм-аута пробовать v1 PING для старого оборудования.
5. После первого ответа фиксировать версию до закрытия соединения.
Нельзя разбирать v1 и v2 одним header после поля version: их размеры различны.
## Этап 2. Одна карта данных
Все измерения, уставки и состояния получают стабильный 32-битный адрес и
описание в `CATALOG`. Обычные операции изделия переводятся на:
- `READ` — разовое получение;
- `WRITE` — изменение конфигурации;
- `SUBSCRIBE/PUBLISH` — значения для экранов и графиков.
Команды изделия из диапазона `0x1000..0x7FFF` остаются только для действий,
которые не являются чтением или записью данных: поиск 1-Wire, нажатие экранной
кнопки, запуск самотеста и аналогичные операции.
## Этап 3. Real-time
SETGUI получает каталог, строит подписку из реально видимых сигналов и обновляет
графики по `timestamp_ms` устройства. Полные снимки всего прибора по таймеру не
передаются. При перегрузке устройство отбрасывает старую телеметрию, сохраняя
ответы на команды.
## Этап 4. Загрузчик
1. Реализовать staging/A-B backend и `FW_STATUS`.
2. Проверить resume после обрыва на каждом допустимом offset.
3. Проверить битый CRC блока и битый SHA-256 образа.
4. Для серийной прошивки включить обязательную подпись и закрепить public key в
bootloader/защищённой области.
5. Проверить rollback при reset до подтверждения успешного старта приложения.
До выполнения этих пунктов кнопка удалённой активации не считается безопасной.
## Этап 5. Носители
- UART/RS-232/RS-485 и USB CDC используют один stream parser.
- Ethernet TCP подключается к тому же parser без новой логики команд.
- Ethernet UDP использует `setp_frame_decode_datagram()`.
- CAN использует `set_can.c`; после reassembly кадр передаётся тому же router.
## Этап 6. Завершение
Когда все поддерживаемые изделия отвечают на v2:
1. убрать fallback v1 из штатного режима SETGUI;
2. оставить отдельную legacy-утилиту только для обслуживания старых приборов;
3. удалить дублирующиеся карты регистров и device-specific сообщения, которые
заменены общей картой;
4. зафиксировать v2 test vectors в CI прошивок и SETGUI.