Прошивка получает две роли, выбираемые compile-time env; общий код
собирается в оба env, специфичный — через build_src_filter, без мёртвого
кода неактивной роли. Роль публикуется в USB product string
(CART-TX/CART-RX), по которой ПК находит нужный порт.
- app_tx.cpp: как раньше формирует SBUS на локальный провод и
дополнительно шлёт те же ch[16] по USB кадром CONTROL; отвечает на
HELLO кадром IDENT. Старый проводной функционал не изменён.
- app_rx.cpp: принимает CONTROL по USB и гонит SBUS на провод строго
каждые 50 мс из последнего состояния. FAILSAFE: нет свежего CONTROL
дольше 150 мс -> нейтраль с флагом failsafe (срабатывает и при обрыве
USB/зависании ПК); сетевой флаг failsafe транслируется в бит SBUS.
- platformio.ini: env cart_tx/cart_rx, макросы роли и USB_PRODUCT_STRING.
- удалён монолитный main.cpp (логика разнесена по модулям).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>