Единый слой связи пульт<->ПК<->тележка, одинаковый на обеих ролях и
зеркалимый на Python.
- link_protocol.h: единственный источник истины — кадрирование
(SYNC/VER/TYPE/LEN/PAYLOAD/CRC16-CCITT), типы CONTROL/IDENT/HELLO/LOG,
layout полезных нагрузок, роли, тайминги failsafe.
- usb_link.{h,cpp}: CRC16, сериализация CONTROL/IDENT, отправка кадров и
стейт-машина приёма с ресинхронизацией по синхрослову и проверкой CRC.
- device_id.h: чтение 96-битного UID чипа для IDENT.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Подготовка к ролям TX/RX: выделяю из монолитного main.cpp
переиспользуемые части без изменения поведения.
- sbus.{h,cpp}: упаковка 25-байтового SBUS-кадра, инициализация и
вывод инвертированного SBUS на USART1 (PA9) — единственный владелец
провода к драйверу, общий для будущих ролей.
- stick.{h,cpp}: калибровка стика, нормализация осей и профиль
газа/поворота, формирование ch[16]. Неиспользованные в прежнем loop
expo()/toSbus() и мёртвые константы не переносятся.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>