# Аудит общего кода GUI_Android и SETGUI Дата проверки: 2026-09-04. ## Уже является общим C-ядром | Область | Каноническая реализация | |---|---| | SETProtocol v2, CAN segmentation, firmware flow, telemetry | `c/set-protocol/src/set_*.c` | | ProtoCAN ID, кадр, parser, link, CRC-CCITT | `c/set-protocol/src/pcan_*.c` | | GUI frame и каталог | `c/set-protocol/src/gui_*.c` | | CAN Бальзам | `c/set-protocol/src/balsam_can.c` | | График, тренды и спектр | `c/set-protocol/src/set_plot.c`, `set_trends.c`, `set_spectrum.c` | | ПМ35 / TMS320F28335: MODBUS-подобные запросы, CRC16/Modbus, ответы и каталог команд | `c/set-protocol/src/periph28335.c` | | ПМ67 / TMS320F2812: CMD_UPLOAD, CRC16/Modbus и проверка ответа | `c/set-protocol/src/tms2812.c` | Python вызывает это ядро через `python/protocan/native.py`, Android — через `ports/android/setprotocol_jni.c`. Файлы на Python и Kotlin являются портами и не должны содержать wire-алгоритм. В старых портах ещё встречаются fallback- реализации; они отмечены ниже и удаляются по мере включения обязательной загрузки C-ядра. ## Найденное общее, которое ещё нужно перенести | Приоритет | Android | SETGUI | Что вынести в C | |---|---|---|---| | 0 | `ports/android/.../CanBridgeProtocol.kt`, `GuiProtocol.kt` | Python transport wrappers | удалить оставшиеся алгоритмические fallback, так как codec/parser уже есть в C | | 1 | остальные команды `core/Tms2812Protocol.kt` | `core/tms_terminal.py` | оставшиеся команды и parser непрерывной телеметрии ПМ67/2812; CMD_UPLOAD уже перенесён | | 2 | `core/Ds18b20Protocol.kt` | `core/ds18b20.py` | кодеки списков/данных/EEPROM, CRC8 и значения датчиков | | 3 | `core/CanFirmwareProtocol.kt` | `core/can_firmware.py` | автомат CAN boot, статусы, окна блоков | | 4 | `core/SlCanProtocol.kt` | `adapters/slcan_adapter.py` и CAN transport | ASCII codec/parser SLCAN; доступ к COM остаётся в портах | | 5 | `core/FirmwareImage.kt` | `core/firmware.py` | Intel HEX parser, CRC32/SHA и правила диапазонов | Это очередь миграции, а не разрешение поддерживать две реализации. При первом изменении любой строки из таблицы сначала создаётся соответствующий модуль C и общие тестовые векторы. ## Что должно остаться платформенным - Compose и PySide widgets, навигация и внешний вид; - Android USB host, разрешения, foreground lifecycle; - Windows COM/MOXA/драйверы и выбор последовательного порта; - хранилище настроек, диалоги файлов и уведомления; - привязка моделей C к Kotlin/Python и локализованные сообщения UI. Таким образом, язык GUI можно менять без повторного написания протокола: новый клиент реализует только FFI и свой транспортный/UI-порт.