Разработка прошивки
Модули, проверки, стиль кода, генерация букв заставки и правила при изменении аппаратного кода.
Модули
Проверки
bash test.sh
bash analyze.sh
bash build.shТесты C работают на хосте с AddressSanitizer и UndefinedBehaviorSanitizer. Они проверяют команды OSD1, разбиение потока между отчётами, ошибки и SYNC, USB control transfers, Full Speed и High Speed, заполнение очереди, клавиши, таймер, транзакции дисплея, заставку и игру. Тесты Python проверяют скомпилированные HID-дескрипторы, ELF, контрольные суммы и версию.
Аппаратные обращения подменяются макросами USB_HOST_TEST, KEYS_HOST_TEST, TIMEBASE_HOST_TEST и DISPLAY_HOST_TEST. В целевой сборке эти определения отсутствуют.
Тесты на хосте не проверяют электрические задержки, DMA и физическую ориентацию кнопок. После изменения аппаратного кода проверьте на устройстве запуск, USB, все кнопки и их отпускание, одновременные нажатия, цвета, яркость, заставку, игру и переподключение USB.
GitHub Actions выполняет проверку синтаксиса скриптов, форматирование, статический анализ ARM GCC, тесты и сборку при push и pull request. Результаты и файлы сборки доступны в сводке запуска.
Стиль
Целевая платформа ARMv7-M, Thumb, soft-float, C11, freestanding. Основные модули собираются с -Os, дисплей и протокол с -O2. Предупреждения компилятора считаются ошибками. CC задаёт компилятор ARM, HOST_CC компилятор тестов.
Для форматирования нужен clang-format 18:
sudo apt install clang-format-18
CLANG_FORMAT=clang-format-18 bash format.sh
CLANG_FORMAT=clang-format-18 bash format.sh --checkСтиль задают .clang-format и .editorconfig: UTF-8, LF, отступ четыре пробела. Описание протокола и аппаратных ограничений находится в docs/, а не в комментариях исходников.
При рефакторинге сохраняйте порядок volatile-доступов, повторные записи в регистры, барьеры и выравнивание буферов DMA. Изменение задержек или оптимизаций требует проверки на плате.
Версия
Версия задаётся в FIRMWARE_VERSION файла tools/version.py в формате MAJOR.MINOR.PATCH, каждое число от 0 до 255. Она используется в ответе HID, именах BIN, ELF и MAP и в firmware.json.
Буквы заставки
Для обычной сборки достаточно include/boot_glyphs.h. Чтобы изменить буквы, нужны вариативный шрифт Inter (inter-latin-wght-normal.woff2 из пакета @fontsource-variable/inter), Pillow, fontTools и brotli:
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install Pillow fontTools brotli
python3 tools/glyphs.py inter-latin-wght-normal.woff2 --weight 600 --size 68
CLANG_FORMAT=clang-format-18 bash format.shГенератор сохраняет 4-битную альфу, по два пикселя на байт. Параметр --size задаёт размер шрифта в пикселях.