Архитектура экосистемы

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

Device Blink Firmware · STM32F103C8T6 src/main.c · LED · UART echo конфигурация платы (YAML defines) Embedded SDK Платформы · CMake · CMSIS · STM32 LL platforms/ · cmake/ · devices/ · boards/ build-system (submodule) submodule Embedded Build System Удалённая сборка в Docker remote_build.py → WS-сервер :8080 контейнер embedded-sdk-builder JWT (право build:access) Артефакты сборки firmware.elf / .bin / .hex host-бинарь (HOST_BUILD) — узел info.txt · sections.txt · CRC32 · SHA256 compile_commands.json submodule build-system исходники + параметры сборки Simulation Coordinator Сервер симуляции (Python 3.12) TCP :9000 — узлы WS :9001 — приложение TCP :9002 — UART-клиенты Simulation Application Пользовательское приложение Flutter · Web (PWA) · Android · iOS управление узлами, шины, радио логи, группы питания, UART host-бинарь — запуск узла WebSocket :9001 Authentik внешний OAuth2 / OIDC OAuth2 — вход JWT (HS256) — проверка Device Blink Firmware · STM32F103C8T6 LED · UART echo · YAML defines submodule Embedded SDK Платформы · CMake · CMSIS · STM32 LL build-system (submodule) submodule build-system Embedded Build System remote_build.py → WS :8080 → Docker JWT (право build:access) артефакты Артефакты сборки firmware.elf · .bin · .hex host-бинарь (HOST_BUILD) — узел host-бинарь — запуск узла Simulation Coordinator TCP :9000 узлы · WS :9001 приложение TCP :9002 — UART-клиенты WebSocket :9001 Simulation Application Flutter · Web (PWA) · Android · iOS узлы, шины, радио, логи OAuth2 / JWT Authentik внешний OAuth2 / OIDC · JWT HS256

Слои системы

Слой разработки — Embedded SDK и Device Blink

  • Platform
  • Firmware
  • CMake

Device Blink — прикладной проект прошивки. Код не содержит жёсткой привязки к выводам: периферия (LED, UART) задаётся на этапе сборки через compile-time defines, которые берутся из конфигурации платы.

Embedded SDK — общая инфраструктура: CMake-тулчейны, CMSIS-заголовки, startup и linker-скрипты, драйверы STM32 LL, YAML-конфигурации устройств и плат, а также клиент удалённой сборки (submodule build-system).

Проект подключает SDK как git submodule; конфигурации плат из SDK преобразуются CMake-хелпером board_defines.cmake в defines компилятора.

Слой сборки — Embedded Build System

  • Python
  • Docker
  • WebSocket

Клиент remote_build.py упаковывает исходники и передаёт параметры сборки на WebSocket-сервер. Сервер проверяет JWT-токен, запускает контейнер embedded-sdk-builder, где выполняется CMake-сборка с выбранным тулчейном.

Результат — два типа артефактов: кросс-сборка (.elf, .bin, .hex для прошивки MCU) и host-сборка (исполняемый файл для запуска прошивки на хост-машине — узла симуляции). К артефактам прилагаются info.txt с контрольными суммами и compile_commands.json.

Слой симуляции — Simulation Coordinator

  • Python
  • aiohttp
  • TCP/WS

Координатор запускает host-версии прошивок как процессы-узлы, принимает их регистрацию по TCP :9000 и моделирует среду:

  • радиоэфир — битрейт, мощность, чувствительность, RSSI по дистанции, коллизии, radio-профили;
  • шины — байтовые пакеты, объединение сигналов и коллизии;
  • питание — группы питания, отключение/включение устройств;
  • UART — мосты между виртуальными устройствами и внешними TCP-клиентами (:9002).

События (GPIO, логи, радио- и шинный трафик) транслируются подключённым клиентам через WebSocket :9001.

Слой приложения — Simulation Application

  • Flutter
  • WebSocket
  • OAuth2

Flutter-приложение подключается к координатору по WebSocket, аутентифицируется по OAuth2 через Authentik и предоставляет интерфейс управления: симуляции, узлы, шины, радио-топология, UART-монитор, логи, группы питания, администрирование.

Команды отправляются по тому же каналу, что и события — это обеспечивает синхронизацию состояния в реальном времени.

Внешние сервисы — Authentik

  • OAuth2
  • OIDC
  • JWT

Authentik — внешний сервис аутентификации. Flutter-приложение выполняет вход через OAuth2/OpenID Connect; координатор проверяет JWT-токены локально (HS256, общий секрет), а WebSocket-сервер сборки — через отдельный сервис проверки токенов.

Authentik не входит в состав репозиториев экосистемы и показан на схеме как внешний компонент.

Потоки данных

Поток сборки

Device Blink (исходники + конфигурации плат) → клиент remote_build.py → WebSocket-сервер → Docker-контейнер → артефакты: прошивка MCU (.elf/.bin/.hex) и host-бинарь для симуляции.

Поток симуляции

Host-сборка прошивки предназначена для запуска Coordinator'ом как процесс-узел с параметрами --node-id, --coordinator-host, --coordinator-port; узел регистрируется по TCP :9000, события радиоэфира, шин, GPIO и логи транслируются в UI по WebSocket :9001. Слой mock-HAL для host-сборки формируется в составе SDK.

Поток UART

Внешний TCP-клиент подключается к порту :9002, Coordinator создаёт UART-мост к указанному узлу: байты из TCP передаются в виртуальный UART прошивки и обратно.

Поток аутентификации

Simulation Application выполняет вход через OAuth2 (Authentik) и получает JWT. Coordinator проверяет токен локально (HS256); WebSocket-сервер сборки проверяет токен через сервис авторизации.

Честность описания

Диаграмма отражает связи, зафиксированные в коде и документации репозиториев. Отдельные элементы находятся в стадии разработки: слой mock-HAL для host-сборки и каталоги simulator/, tests/ в проекте Device Blink пока не заполнены.