# SETProtocol Единое переносимое протокольное ядро SET для `SETGUI`, Android GUI, устройств и сервисных утилит. В одном C99-проекте собраны: - SET protocol v2 для управления, карты данных, телеметрии и firmware flow; - совместимый ProtoCAN transport для существующих CAN-мостов; - SETGUI transport v1 для приборов переходного периода; - стабильный host ABI для Python/JNI/других FFI; - GAS, кольцевые буферы, CRC и потоковые parser. Ядро не зависит от HAL, ОС или конкретного адаптера, не использует динамическую память и не открывает COM/CAN само. SLCAN, SocketCAN, USB CDC, TCP, UART/DMA и аппаратный CAN подключаются портами. ## Структура | Каталог | Назначение | |---|---| | `include/set_*.h` | публичный SET protocol v2 | | `include/pcan_*.h`, `gui_*.h` | совместимые ProtoCAN/GUI v1 модули | | `include/setprotocol.h` | единая C99-точка включения | | `include/setprotocol_abi.h` | стабильная FFI-точка включения ABI v1 | | `src/` | общая реализация всех протокольных модулей | | `ports/android` | JNI и Kotlin facade | | `ports/stm32f4` | UART/DMA port для legacy byte stream | | `docs/SETPROTOCOL.md` | архитектура, ABI, память и переносимость | | `docs/legacy` | нормативные документы ProtoCAN/SETGUI v1 | | `PROTOCOL.md` | нормативный wire contract SET protocol v2 | | `MIGRATION.md` | переход с v1/ProtoCAN на v2 | | `PORTING.md` | подключение новых транспортов и платформ | ## Сборка ```bash cmake -S c/set-protocol -B build/setprotocol -DSETP_BUILD_TESTS=ON cmake --build build/setprotocol --config Release ctest --test-dir build/setprotocol -C Release --output-on-failure ``` CMake создаёт: - `setprotocol_static` — статическое C99-ядро; - совместимую CMake-цель `set_protocol`; - `setprotocol.dll`, `libsetprotocol.so` или `libsetprotocol.dylib`; - тесты SET v2, ProtoCAN transport, GUI v1 и ABI. Упрощённая host-сборка: ```powershell python c/set-protocol/tools/build_host.py --output native/setprotocol.dll ``` ```bash python3 c/set-protocol/tools/build_host.py --output native/libsetprotocol.so ``` ## Подключение в C Для всего ядра: ```c #include "setprotocol.h" ``` Для минимальной прошивки можно подключать только нужные заголовки и исходники. Например, новый v2 stream parser использует `set_protocol.*`, а legacy CAN-мост — `pcan_frame.*`, `pcan_crc.*` и `pcan_id.*`. FFI-клиенты подключают `setprotocol_abi.h`. Имена функций `pcan_abi_*` сохраняются в ABI v1 для бинарной совместимости; переименование символов без повышения версии ABI запрещено. ## Версии wire format - SET protocol v2 — основной формат новых устройств. - SETGUI v1 и ProtoCAN bridge остаются поддерживаемыми на время миграции. - Одинаковый SOF `A5 5A` у GUI v1 и SET v2 различается полем версии. - Изменение wire contract требует новой версии и тестовых векторов. Полная интерактивная документация: [`../../doc/setprotocol.html`](../../doc/setprotocol.html).