# Журнал изменений: `tft_manufacture_test` Репозиторий: Отслеживаемая ветка: `dev` Базовый диапазон: 2026-03-05 .. 2026-05-08, 52 коммита Базовый HEAD: `22f98c311a4564d8f18ed72d11635bf908046b1e` Версия формата: `strict-2026-05-13` Этот журнал фиксирует только смысловые инженерные изменения. Формат основан на подходе Keep a Changelog и адаптирован под embedded firmware-репозиторий, где документация, тесты, HIL, CI и изменения vendor-SDK являются важными сигналами состояния проекта. ## Политика формата Каждая будущая запись должна иметь такую структуру: ```md ## [Не выпущено] или [ГГГГ-ММ-ДД] — короткое название Диапазон: `old_sha..new_sha` Сравнение: https://github.com/OSabuser/tft_manufacture_test/compare/old_sha...new_sha ### Кратко - Один-два содержательных пункта о том, что изменилось и почему это важно. ### Добавлено - Новые возможности, модули, тесты, документы или инструменты. ### Изменено - Поведение, архитектура, сборка, интерфейсы или крупные переработки документации. ### Исправлено - Исправления ошибок, сборки, тестов и регрессий. ### Тесты - Host-тесты, HIL-тесты, firmware-test модули, фикстуры, test runners и изменения покрытия. ### CI - GitHub Actions, локальные CI-скрипты, self-hosted/HIL runners и изменения статуса workflow. ### Документация - README и изменения архитектурных/protocol/how-to документов, которые влияют на понимание проекта. ### Удалено - Удаления, имеющие практический смысл. ### Отфильтрованный шум - Форматирование, чистые перемещения, vendor-импорты или generated churn, которые намеренно не считаются продуктовым изменением. ``` Пустую категорию можно опускать, если в ней нет смысловой информации. Не добавлять raw commit spam, статистику строк, длинные списки файлов или переименования, если они не меняют сборку, тестирование, документацию или использование проекта. ## [Не выпущено] ### Что отслеживать - Проверять, остаётся ли `.github/workflows/ci.yml` только сборочным workflow через `just ci::build` или начинает запускать host-тесты. - Отслеживать появление self-hosted runner, регулярных аппаратных прогонов или отчётов по HIL. - Проверять новые firmware-test модули в `firmware/test/src/tests/` и синхронные обновления протокола/документации. - Следить за развитием BSP: RGB (частично закрыто display-тестом), bootloader или `tft_app` — обе директории всё ещё не заведены. - Отслеживать локальные патчи поверх vendor SDK, которые нужно вести отдельным patch log. - Отслеживать мерж ветки `feature-tui-monolith` в `dev` — после мержа эту запись нужно закрыть датой и финальным диапазоном SHA. ## [Не выпущено] — service-tui: монолитный spsdk-бэкенд, устойчивость к обрыву USB, упаковка PyInstaller Диапазон: `1801f1beb959d610d31ee3dcd1f91046953117d4..22c40779ef0ec9911031d7a5272c4611b596d3e8` + незакоммиченные изменения рабочего дерева (документация) Сравнение: > Ветка `feature-tui-monolith` (от `dev`, поверх мержа `feature-tui-python`). > **Полностью заменяет предыдущую версию этой записи**: прошивка сторонних > бинарников через subprocess (`tools/host/flash_usb.py --fcb-path` + > `nxpimage`) была реализацией на момент Фазы 0/раннего мержа и с тех пор > заменена прямыми вызовами `spsdk` Python API — ничего из старой записи > больше не описывает текущий код. ### Кратко - Прошивка в `service-tui` переведена с subprocess-обёртки над `nxpimage`/`sdphost`/`blhost` на прямые вызовы `spsdk` Python API (`McuBoot`/`SDP`/`HabImage`) — `app/flash_backend.py`, провалидировано byte-exact на живом железе (macOS + Windows). `tools/host/flash_usb.py` остаётся отдельным dev-CLI для `just host::flash*`, TUI его больше не вызывает ни субпроцессом, ни как библиотеку. - Обрыв USB во время прошивки/chip erase теперь надёжно типизируется во всех трёх наблюдавшихся на железе сценариях (`SPSDKConnectionError`, `SPSDKTimeoutError`, `False`-по-таймауту без исключения) и даёт оператору единое понятное сообщение вместо «Непредвиденная ошибка». - Собран первый standalone-бандл (PyInstaller, onedir) — alpha, вручную протестирован на macOS и Windows. - Документация (`tools/production/README.md`+`docs/DEV_ARCH.md`, корневые `docs/*`, все `bsp/*/README.md`, корневой `README.md`) синхронизирована с фактическим состоянием кода после всех фаз миграции. ### Добавлено - `tools/production/app/flash_backend.py` — синхронное ядро прошивки на spsdk: `detect_sdp`/`detect_cdc`, `load_flashloader`, `flash`, `erase_chip`, `build_custom_hab` (`HabImage` вместо `nxpimage` CLI), `write_fcb_explicit`/`write_fcb_auto`. Zero Textual/asyncio импортов, тестируется без event loop. - `tools/production/app/usb_ports.py` — `resolve_serial_port()` по VID:PID (имя порта не переносимо между перевтыкиваниями). - Иерархия `FlashBackendError`/`ConnectionLostError`/`DeviceNotFoundError`/ `FlashLoaderTimeoutError`/`HabBuildError` с полем `connection_lost` — различает физический обрыв USB от логической ошибки прошивки без парсинга текста сообщения. - `tools/production/tests/test_flash_backend.py` — вырос до 45 unit-тестов backend'а, включая обе ветки обрыва USB (`SPSDKTimeoutError`, `False`-по-таймауту + вариант B через `detect_sdp()`) и golden-тест byte-exact сборки HAB. - Кнопка «✕ Выйти из приложения» на `WaitingScreen`. - `tools/production/service_tui.spec` — PyInstaller spec (onedir). - `tools/production/docs/RELEASE_ROADMAP.md` — дорожная карта Фаз 4a→4b→5→6 с принятыми решениями (Р10–Р12) и статусом гейтов. ### Изменено - `tools/production/app/flasher.py` — переведён с subprocess (`flash_usb.py` через `uv run`) на `asyncio.to_thread`-обёртку над `flash_backend.py`; сборка кастомного HAB — через `HabImage` в отдельном потоке, а не subprocess `nxpimage`. - `tools/production/app/main.py` — логирование: root по умолчанию `INFO` (было `DEBUG`), `spsdk`/`libusbsio` принудительно приглушены до `WARNING` независимо от root; полный DEBUG — через `SERVICE_LOG_LEVEL=DEBUG`. - `tools/production/app/screens/flash.py` — троттлинг записи в `#flash-log` для фазы `write` (раз на 10%, ~10 строк вместо ~135) без потери плавности прогресс-бара. - `bsp/sd/src/sd.c` — `bsp_sd_init()`/`bsp_sd_deinit()` теперь делают аппаратный `USDHC_Reset()` + полный `memset(&g_sd, ...)` перед повторной инициализацией: без этого non-blocking host driver SDK мог оставаться в состоянии ожидания транзакции от предыдущей diagnostic-сессии, и следующий `f_mount()` в тесте `usd` блокировался навсегда. ### Исправлено - Обёртка обрыва USB расширена с `SPSDKConnectionError` на `(SPSDKConnectionError, SPSDKTimeoutError)` — второй тип не наследует первый, но реально прилетает на read-фазе после write. - Вариант B для команд, возвращающих `False` без исключения (`flash_erase_all`/`flash_erase_region`/`write_memory`): при `False` выполняется быстрый `detect_sdp()` — устройство пропало с шины → `ConnectionLostError`, устройство на месте → обычная `FlashBackendError`. - Баг «File not found» для bootloader/app/firmware_test при резолве путей прошивки (Фаза 4a). - Unit-тест моки (`test_cli.c`, `test_bsp_can.c`, `test_firmware_runner.c`, stub-хедеры `fsl_clock.h`/`version.h`) — фиксы после рефакторинга `cli.c`/`test_runner.c`. ### Тесты - `test_flash_backend.py` — вырос до 45 тестов, включая гейт по `SPSDKTimeoutError` и переклассификации erase-таймаута (вариант B). ### Документация - `tools/production/README.md`/`tools/production/docs/DEV_ARCH.md` — полностью пересмотрены под факт: убраны все следы subprocess/`nxpimage`/ `flash_usb.py` из описания архитектуры прошивки; добавлены §6.2 (обработка обрыва USB), §14 (PyInstaller/frozen-резолв путей), §15 (логирование); зафиксирован разрыв между закоммиченным `service_tui.spec` (`datas` только `../shared`) и фактическим содержимым уже собранных релизных бандлов в `dist/`. - `docs/testing/PROTOCOL.md` — версия `0.1.0`→`0.1.2`, добавлена команда `get_version` и события `test_list`/`uid_response`/`version_response`, матрица тестов исправлена (убраны никогда не существовавшие `uart_ttl`/ `uart_iso`, добавлен реальный `mqs`), поток Display дополнен шагами ротации (`display_rot0`/`display_rot_base`). - `docs/testing/host/HOST_CREATE_TEST.md` — был байт-в-байт дубликатом `docs/HOW_TO_DEBUG.md` (копипаст-баг, минимум с 2026-06-23); переписан как реальный гайд по добавлению host-теста. - `docs/HOW_TO_FLASH.md` (§1.5 под факт spsdk-конвейера), `docs/DEV_ARCH.md` (в дереве `tools/hil/` недоставало `04_test_button.py`), `docs/testing/hil/HIL_CREATE_TEST.md` (пример `loaded_` без `m5` вводил в заблуждение — питание таргета всегда идёт через M5, не только сигнальные реле) — актуализированы. - `bsp/usb_cdc/README.md` (VID/PID был заявлен как заглушка `0x1234:0x0001`, реально прошит `0x1996:0x00AD`), `bsp/uart_host/README.md` (в списке API отсутствовали реальные `bsp_uart_host_deinit/rx_available/rx_flush`), `bsp/can/README.md` (несуществующие в коде `bsp_can.c`/`can_mock.h`/ `bsp_can_rx_cb_t`) — исправлены по сверке с заголовками. - `bsp/mqs/{mqs.c,mqs.h,mqs_amp.c}` — докстринги приведены в соответствие с кодом (были «SAI1»/«16 кГц», реально SAI3/12 кГц — подтверждено сверкой с `bsp/generated/clock_config.c`); `bsp/provisioning/provisioning.h` — докстринг порядка байт UID исправлен на соответствующий реализации (`provisioning.c` пишет CFG0 первым, докстринг утверждал обратное). - Корневой `README.md` — `firmware/bootloader/`/`firmware/tft_app/` помечены как запланированные, а не готовые (директорий не существует, `add_subdirectory()` закомментирован в корневом `CMakeLists.txt`); добавлен ранее отсутствовавший раздел «Инструменты (`tools/`)» — `tools/production/` (service-tui) нигде не упоминался. ### Известные ограничения - Auto-config Flashloader для W25Q256/512 не проверялся напрямую — решили не полагаться на него вообще, FCB для кастомных бинарей всегда пишется явно. - Массовое программирование (авто-прошивка по факту детекта SDP, без подтверждения оператора) рассмотрено и отклонено — в SDP/Flashloader-режиме нет способа прочитать UID платы для идентификации. ## [2026-06-29] — Этапы 6г–7: MQS, HIL pytest firmware_test, Provisioning ### Кратко - `firmware_test` получил MQS audio-тест, полный HIL pytest-стек для firmware_test (opto + CAN через CDC) и команду `get_uid` для чтения OCOTP UID. - Завершён Этап 6 целиком. Этап 7 (Provisioning draft) реализован. ### Добавлено - `bsp/mqs/` + `bsp_mqs` — SAI3 + eDMA + MQS периферия, управление громкостью через PWM4 SM0 + LM4875M. API: `bsp_mqs_init/deinit`, `bsp_mqs_play`, `bsp_mqs_is_busy`, `bsp_mqs_amp_init/deinit`, `bsp_mqs_amp_set_volume`. - `firmware/test/src/tests/test_mqs.c` — интерактивный тест: мелодия ~4 с (A4 + E5, целочисленная LUT-синусоида), async-воспроизведение с USB keepalive, `confirm_request("mqs_tone")` → PASS/FAIL оператором. - `tools/hil/conftest.py` — класс `FirmwareCdcClient` и фикстура `firmware_cdc`: подключение к firmware_test по USB CDC ACM, проверка живости через `ping→pong`. - `tools/hil/06_test_firmware_opto.py` — HIL pytest для opto-теста через CDC: автоматический оркестратор M5 реле → confirm, без участия оператора. - `tools/hil/06_test_firmware_can.py` — HIL pytest для CAN-теста через CDC: RX (M5→таргет) и TX (таргет→M5) направления независимо. - `bsp/provisioning/` + `bsp_provisioning` — чтение OCOTP UID (8 байт) через прямой доступ к `OCOTP->CFG0/CFG1` (паттерн `fsl_silicon_id_soc.c`). - Команда `get_uid` в протоколе v2: `{"type":"cmd","cmd":"get_uid"}` → `{"type":"uid_response","uid":"<16 hex символов>"}`. ### Изменено - `protocol.h/c` — добавлена `protocol_send_uid_response()`. - `cli.c` — добавлена ветка `strcmp(cmd_name, "get_uid")` в `handle_cmd()`; исправлен порядок: `strstr` заменён на `strcmp` по аналогии с остальными командами. - `bsp/README.md` — добавлены `bsp_mqs` и `bsp_provisioning` в таблицу и дерево. ### Исправлено - MQS: отсутствие `.pwmchannelenable = true` в `pwm_signal_param_t` (NXP SDK ≥ 2.13) приводило к тому что `PWM_SetupPwm()` не выставлял `OUTEN` → ШИМ не выходил на пин. Маскировалось отладчиком (оставлял `OUTEN` от прошлой сессии), воспроизводилось только при cold reset. - OCOTP: `OCOTP_Init()` вызывал зависание при чтении UID (контроллер занят после USB CDC init). Исправлено переходом на прямое чтение `OCOTP->CFG0/CFG1` без инициализации контроллера — shadow registers доступны сразу после сброса. ### Тесты - `06_test_firmware_opto.py` hardware-verified: тайминги `RELAY_ON_S=0.15`, `RELAY_OFF_S=0.5`; финальное чтение через `bsp_opto_force_read()` обходит race condition чётного числа ISR при дребезге реле. - `06_test_firmware_can.py` hardware-verified: два направления (RX + TX), `disableSelfReception=true` на таргете. - `test_mqs` hardware-verified: async-воспроизведение + USB keepalive работает корректно; blocking-вариант голодал USB за ~4 с. ### Документация - `bsp/provisioning/README.md` — новый компонент: API, аппаратура, особенности прямого чтения OCOTP. - `PROTOCOL.md` — добавлена команда `get_uid` / событие `uid_response`. ## [2026-06-23] — Buttons/display test modules и полный рефакторинг документации Диапазон: `22f98c311a4564d8f18ed72d11635bf908046b1e..` Сравнение: ... ### Кратко - Manufacturing-test firmware получил два новых test module (`test_buttons`, `test_display`), оба hardware-verified на таргете. - Вся проектная документация прошла полный рефакторинг: единый шаблон для BSP README, Mermaid-диаграммы вместо ASCII, структурные README для `utils/` и `port/`. ### Добавлено - `firmware/test/src/tests/test_buttons.c` — интерактивный тест двух тактовых кнопок (GPIO_B1_14/GPIO2[30], GPIO_B1_15/GPIO2[31]); non-blocking polling 5 мс, таймаут даёт `TEST_STATUS_SKIP`; `bsp_button_init()` вызывается внутри init-фазы модуля. - `firmware/test/src/tests/test_display.c` — интерактивный тест дисплея (два этапа: заливка цветом R/G/B/W с confirm-запросами, проверка ротации LR/UD через `bsp_display_set_rotation()`). - `port/fatfs/README.md` — новый документ, описывает INTERFACE-архитектуру `port_fatfs_sd` и причину per-binary компиляции `diskio_sd.c`. - `utils/prio_queue/README.md` — новый документ (модуль существовал, документация отсутствовала). ### Изменено - Все 11 BSP README (`led`, `tick`, `uart_host`, `opto`, `can`, `button`, `usb_cdc`, `sdram`, `qspi_flash`, `sd`, `display`) приведены к единому шаблону: Аппаратура (с номерами корпуса из pin_mux) → Архитектура → API → Быстрый старт → Тестирование → Интеграция → CMake. - `bsp/README.md` — исправлена таблица компонентов (ранее отсутствовали 6 из 11 модулей), ASCII-диаграмма концепции заменена Mermaid. - `docs/DEV_ARCH.md` — шесть ASCII-диаграмм заменены Mermaid (`graph TB`, `flowchart`, `sequenceDiagram`); §2 разбит на две отдельные диаграммы (физические связи + состав инструментов). - `docs/HOW_TO_FLASH.md` — ASCII bash-поток USB SDP заменён Mermaid `flowchart TD`. - `docs/HOW_TO_DEBUG.md` — ASCII топология хост/devcontainer заменена Mermaid `flowchart LR`. - `docs/testing/PROTOCOL.md` — четыре ASCII-блока (стенд, жизненный цикл, три интерактивных теста, state machine) заменены Mermaid (`flowchart`, `sequenceDiagram`, `stateDiagram-v2`). - `docs/testing/host/HOST_CREATE_TEST.md` — ASCII стек заменён Mermaid. - `docs/testing/hil/HIL_CREATE_TEST.md` — ASCII стек и цепочка фикстур заменены Mermaid. - `README.md` (корневой) — убрана устаревшая таблица BSP с 5 из 11 модулями, заменена ссылкой на `bsp/README.md`; исправлено описание `tft_app`. - `utils/README.md` — добавлен пропущенный модуль `prio_queue`, добавлен раздел CMake. - `port/README.md` — переработан с Mermaid-диаграммой архитектуры слоёв. - `port/log/README.md` — добавлена Mermaid-диаграмма потока, раздел FreeRTOS с реальным кодом. ### Тесты - `test_buttons` hardware-verified: обнаружен и исправлен баг `cli.c` — `g_s_line_len` должен сбрасываться в `0` до вызова `process_line()`, иначе входящие байты корруптят буфер команды в blocking confirm-wait цикле. - `test_display` hardware-verified: уточнена семантика ротации — `SHLR` управляет горизонтальным направлением (LR пин), `UPDN` — вертикальным (UD пин); enum использует семантические имена (`BSP_DISPLAY_ROTATE_0`, `BSP_DISPLAY_FLIP_VERTICAL` и др.). ### Отфильтрованный шум - Нормализация форматирования внутри уже существующих документов без изменения содержания. - Перестановки в порядке разделов там, где смысл не менялся. ## Базовый срез — 2026-05-13 Диапазон: вся история репозитория от initial commit до `22f98c311a4564d8f18ed72d11635bf908046b1e` ### Кратко - Репозиторий представляет собой firmware-монорепозиторий для платы на базе NXP MIMXRT1052CVJ5B. Он охватывает manufacturing-test firmware, планируемые bootloader/application firmware, BSP-модули, host tooling, HIL tooling и документацию. - К базовому срезу в проекте уже есть полноценный BSP-слой, двухуровневая стратегия тестирования, USB-CDC архитектура тестовой прошивки, GitHub Actions CI и обширная инженерная документация. ### Текущая архитектура - BSP-модули на момент базового среза: `led`, `tick`, `uart_host`, `opto`, `can`, `button`, `usb_cdc`, `sdram`, `qspi_flash`, `sd`, `display`. - Host-тесты используют Unity/fff-подобные моки и инструменты, рассчитанные на devcontainer. - HIL-тесты используют pyOCD, pyserial, pytest и поддержку M5StampPLC. - Командный путь firmware-test состоит из USB-CDC ACM CLI, бинарного протокола, `test_runner` и отдельных firmware-side test modules. - Документация покрывает архитектуру разработки, прошивку, отладку, HAB, HIL, host-тесты и поведение протокола. ### Состояние CI - GitHub Actions уже есть и собирает проект внутри devcontainer. - Видимый пробел: host unit tests и HIL tests пока не входят в GitHub Actions workflow. ## [2026-05-08] — Display test module и выравнивание документации ### Кратко - Базовый срез заканчивается тем, что поддержка display становится частью и BSP, и manufacturing-test firmware. - README и инженерные документы были синхронизированы между несколькими модулями, поэтому это documentation-heavy, но смысловое изменение состояния проекта. ### Добавлено - Реализован `bsp/display` с API, исходниками и интеграцией в сборку. - Добавлен `firmware/test/src/tests/test_display.c` как firmware-side test module для display. ### Изменено - README нескольких BSP-модулей и manufacturing-test firmware приведены к более единому стилю. - `docs/DEV_ARCH.md`, документы по прошивке/отладке и HIL-гайды обновлены под актуальную структуру проекта. - `just/ci_workflow.md` расширен дополнительными деталями CI workflow. ### Документация - Документация по display, SD, CAN, button, USB-CDC и firmware-test получила содержательные обновления, а не только форматирование. ### Удалено - Удалён `bsp/qspi_flash/REFACTORING.md`, так как временный план потерял актуальность. ### Отфильтрованный шум - Чистая нормализация стиля в документации не учитывалась как отдельная feature, если она не меняла содержание или проектные инструкции. ## [2026-05-07] — USD/SD test flow ### Кратко - SD/MMC testing перешёл от BSP/middleware-работ к firmware-test module с обновлением протокола и тестовой документации. ### Добавлено - Добавлен `firmware/test/src/tests/test_usd.c`, затем доведён до usable SD/MMC test module. ### Изменено - `firmware/test/src/main.c` упрощён по мере модульного оформления test modules. - `docs/testing/PROTOCOL.md`, `firmware/test/src/tests/README.md` и `firmware/test/PLAN.md` обновлены под USD/SD test coverage. ### Тесты - Firmware-side SD/MMC testing стал видимым отдельным модулем, хотя базовый срез всё ещё требует отслеживать стабильное HIL-покрытие SD. ## [2026-05-06] — SD card и FatFS integration ### Кратко - Поддержка SD card и FatFS вошла в BSP и firmware-test stack. - NXP SD middleware был пропатчен, что создаёт будущую точку контроля для vendor SDK drift. ### Добавлено - Добавлен `bsp/sd` с API, реализацией, README и CMake-интеграцией. - Добавлены `firmware/test/fatfs` и `port/fatfs/sd` для подключения FatFS к SD BSP. - Добавлены generated SDMMC configuration files. ### Изменено - SDK SD middleware и SDMMC host code изменены для поддержки smoke-test path. - Clock и pin configuration скорректированы под SD/MMC. ### Тесты - Появился SD smoke-test, но стабильное HIL regression coverage ещё не закреплено в базовом срезе. ### Отфильтрованный шум - `project_tree.txt` и `sdk/sdk_tree.txt` рассматривались как artifacts состояния репозитория, а не как функциональные изменения. ## [2026-04-23] — Добавлен GitHub Actions CI ### Кратко - CI стал реальным: проект получил GitHub Actions workflow, который собирает проект внутри devcontainer. - Workflow ориентирован на сборку; host tests и HIL tests остаются будущей работой. ### Добавлено - Добавлен `.github/workflows/ci.yml` с triggers на push, PR и manual dispatch. - Workflow собирает devcontainer image, запускает `just ci::build` и загружает build tree как artifact. - Добавлен `just/ci_workflow.md` с описанием CI flow. ### Изменено - `just/ci.just` скорректирован под CI build path. ### CI - CI покрывает воспроизводимость containerized build. - CI пока не запускает host unit tests. - CI пока не запускает HIL tests, которым требуется подключённое железо или self-hosted runner. ### Удалено - Удалён `.clang-tidy` override для generated code из `bsp/generated`. ## [2026-04-20 .. 2026-04-22] — SDRAM и QSPI firmware-test modules ### Кратко - Manufacturing-test firmware получил memory-oriented test modules для SDRAM и QSPI Flash. - QSPI support появился и как BSP module, и как firmware-side test. ### Добавлено - Добавлены API и реализация `bsp/sdram`. - Добавлен `firmware/test/src/tests/test_sdram.c`. - Добавлен `bsp/qspi_flash` с API, реализацией и README. - Добавлен `firmware/test/src/tests/test_qspi.c`. - Добавлен `firmware/test/src/tests/README.md` с описанием firmware-side test modules. ### Изменено - `firmware/test/src/main.c` обновлён для интеграции новых test modules. ### Тесты - SDRAM и QSPI вошли в firmware-test command model. ### Документация - Документация по test modules начала описывать растущий firmware-test suite. ## [2026-04-17] — Binary protocol, test runner и hardware documentation ### Кратко - Manufacturing-test firmware перешёл от простого CLI к protocol-driven test runner architecture. - Hardware reference documentation существенно расширилась. ### Добавлено - `protocol.c/.h` ввели binary protocol для управления тестами. - `test_module.h` и `test_runner.c/.h` ввели modular firmware-test runner. - Добавлены host tests для protocol и runner behavior. - `docs/testing/PROTOCOL.md` описал binary protocol. - Добавлены hardware PDFs и board/display reference materials в документацию. ### Изменено - `firmware/test/README.md` сильно переписан под новую архитектуру. - Existing CLI host tests были расширены. ### Тесты - Host coverage расширился на protocol, runner и CLI behavior. ### Удалено - Старые planning/architecture artifacts в `firmware/test` и HIL refactor notes удалены после замены новой структурой. ### Отфильтрованный шум - Большие добавления hardware PDF сведены по назначению, без перечисления каждого файла. ## [2026-04-07 .. 2026-04-09] — USB-CDC CLI и priority queue ### Кратко - Test firmware получил modular USB-CDC CLI. - Добавлен priority queue utility и host coverage для него. ### Добавлено - `firmware/test/src/cli.c` и `cli.h` ввели отдельный CLI module. - `tests/host/cli/test_cli.c` добавил host coverage для CLI behavior. - Добавлен `utils/prio_queue` с README и большим host test. - Появилась placeholder structure для `bsp/display`. ### Изменено - Старый monolithic `firmware/test/main.c` path заменён на modular source layout. - Добавлены firmware-test planning docs вокруг CLI/protocol roadmap. ### Тесты - Host tests покрыли CLI и priority queue. ## [2026-04-03 .. 2026-04-06] — USB-CDC stack и HIL coverage ### Кратко - USB-CDC ACM стал реальной BSP capability и был подключён к HIL validation. - HIL configuration и documentation были уточнены вокруг нового USB path. ### Добавлено - Реализован `bsp/usb_cdc` с API, descriptors, Chapter 9 handling и hardware wrappers. - SDK USB middleware integration добавлена в сборку. - `tests/target/hil_usb_cdc` и `tools/hil/05_test_usb_cdc.py` добавили USB-CDC HIL coverage. ### Изменено - Обработка HIL configuration была отрефакторена, `.env.example` получил новые переменные. - `bsp/usb_cdc/README.md` переписан с фокусом на API documentation. ### Тесты - USB-CDC вошёл в numbered HIL suite после UART, opto, CAN и button. ### Документация - HIL docs, включая bench, creation guide, fixtures и how-to, были обновлены. ## [2026-04-01 .. 2026-04-02] — Clock, pin и MPU setup ### Кратко - Board generated files стали полнее: в firmware base вошли clock, pin и MPU configuration. ### Добавлено - Добавлены generated clock и pin-mux configuration files. - Добавлен `TFT_Board.mex` как project state NXP Config Tools. - Появились initial empty `bsp/sdram` placeholders. ### Изменено - Board startup/configuration получил MPU initialization. - Linker scripts скорректированы для FlexSPI NOR и RAM layout. - `firmware/test/main.c` упрощён вокруг нового initialization path. ## [2026-03-30 .. 2026-03-31] — CAN и button BSP с host/HIL tests ### Кратко - CAN и button support стали полноценными BSP modules с host и HIL validation. - HIL tests были пронумерованы в ordered suite. ### Добавлено - Добавлен `bsp/can` с API, реализацией, README и mocks. - Добавлены host tests и HIL target/test code для CAN. - Добавлен `bsp/button` с API, реализацией и README. - Добавлены host tests и HIL target/test code для button. ### Изменено - HIL pytest files переименованы в ordered sequence: UART, opto, CAN, button. - HIL documentation обновлена по мере конкретизации test suite. ### Тесты - CAN и button получили host test coverage. - CAN и button получили HIL coverage. ### Удалено - Удалён `bsp/can/PLAN.md` после переноса полезного содержания в README. ## [2026-03-26 .. 2026-03-28] — M5StampPLC HIL bench и fixture documentation ### Кратко - HIL стал больше чем pyOCD prototype: появились M5StampPLC support, power/control helpers и fixture documentation. ### Добавлено - Добавлена поддержка M5StampPLC в `tools/hil`, включая agent/CLI logic и MicroPython firmware assets. - HIL support code реорганизован в M5-specific helpers. - `tests/target/hil_opto` и `tools/hil/test_opto.py` добавили opto HIL coverage. - `docs/testing/hil/HIL_FIXTURES.md` описал pytest fixtures для HIL. ### Изменено - `just/host.just` и `tools/hil/conftest.py` существенно расширены под HIL workflows. - Документация реорганизована в более понятные иерархии hardware, MIMXRT1052 и testing. ### Тесты - Opto inputs получили HIL-level validation. ### Удалено - Старые locations CMake/test guides заменены новой иерархией `docs/testing`. ### Отфильтрованный шум - Перемещения PDF и документов учтены как изменение структуры документации, а не как отдельное content change для каждого файла. ## [2026-03-23] — Logging infrastructure и BSP opto ### Кратко - Появились logging infrastructure и opto input BSP вместе с host coverage. ### Добавлено - `port/log` и `utils/log` ввели logging abstractions и UART-oriented logging support. - Добавлены host tests для logging behavior. - Добавлен `bsp/opto` с API, реализацией, README, GPIO mocks и host tests. ### Тесты - Host coverage расширился на logging и opto behavior. ### Удалено - Корневой `TODO.md` удалён после переноса планирования в другие места. ## [2026-03-18 .. 2026-03-20] — Первый HIL skeleton и flashing/debug docs ### Кратко - Проект получил первый HIL skeleton и target-side UART validation path. - Flashing и debugging tooling стали документированными и scriptable. ### Добавлено - Добавлен `tools/hil` с pytest/pyOCD/pyserial-oriented utilities. - `tests/target/host_uart` предоставил target firmware для UART HIL validation. - `tools/host/flash_swd.py` добавил SWD flashing support. - Добавлены `docs/HOW_TO_DEBUG.md`, расширенные flash docs и tool README. ### Изменено - Main README и development architecture docs расширены вокруг host/container workflow и testing. - Добавлены host и HIL test creation guides. ### Тесты - Появился первый UART HIL path. ### Удалено - Temporary flash logs удалены после окончания диагностической пользы. ## [2026-03-16 .. 2026-03-17] — Первые BSP modules и host test infrastructure ### Кратко - Репозиторий получил первые concrete BSP modules и host-test layout. ### Добавлено - Добавлены `bsp_led` и `bsp_tick` с API, реализацией и README files. - `bsp/uart_host` добавил LPUART1/MCU-Link VCOM support с API, реализацией, README, mocks и host tests. - Введены shared BSP status codes. - Добавлен `utils/ring_buffer`. - Добавлен `tests/host` с mocks и tests для LED, ring buffer и timeout behavior. - `TODO-HIL.md` зафиксировал initial HIL plan. ### Тесты - Host testing начался с Unity/fff-style mocks и isolated test directories. ## [2026-03-13 .. 2026-03-15] — Draft архитектуры manufacturing-test firmware ### Кратко - Архитектура manufacturing-test firmware была задокументирована до последующей реализации protocol/runner. ### Добавлено - `firmware/test/README.md` и `firmware/test/arch.svg` описали первый architecture concept. - BSP и USB-CDC README зафиксировали early design intent. ### Изменено - `bootstrap.sh` был упрощён. ### Удалено - Ранняя VS Code launch configuration удалена при cleanup bootstrap. ## [2026-03-10 .. 2026-03-12] — Project environment, BSP base и HAB flow ### Кратко - Проект перешёл от пустого scaffold к buildable embedded workspace с generated board support, HAB assets и containerized tooling. ### Добавлено - Добавлен board support для MIMXRT1052: startup code, generated config, linker scripts и FlexSPI NOR-related assets. - Добавлен HAB signing/configuration flow для app, bootloader и firmware-test images. - Добавлены formatting/lint/editor configuration. - Добавлены devcontainer, Dockerfile, CMake presets, VS Code tasks и bootstrap scripts. - `Justfile` стал entry point для build и host automation. - Добавлена development architecture и CMake hints documentation. ### Изменено - Generated NXP Config Tools content перенесён из `bsp/board` в `bsp/generated`. - Логика `Justfile` разделена на modules под `just/`. - Добавлена flashing documentation, bootstrap logic переработана. ### Документация - Early docs явно отмечали, что CI и tests ещё не покрыты. ## [2026-03-05] — Initial repository scaffold ### Кратко - Репозиторий инициализирован с базовой metadata и README placeholder. ### Добавлено - Добавлены `.gitattributes`, `.gitignore` и начальный `README.md`. ## Отфильтрованный шум базового среза Следующие классы изменений были просмотрены, но намеренно не развёрнуты в подробные записи changelog: - Merge commits без смысловых content changes. - Дублирующиеся или неинформативные commit subjects, где значимость определялась по diff, а не по title. - Чистое форматирование или переносы строк в документации. - Перенумерация HIL tests, когда поведение не менялось. - Bulk vendor SDK imports и generated code churn, кроме случаев, где они влияли на локальные patches или build effects. - Перемещения PDF и datasheets, кроме случаев изменения структуры документации. ## Контракт еженедельного мониторинга Регулярная еженедельная проверка должна: - Сравнивать предыдущий сохранённый SHA с текущим HEAD ветки `dev`. - Обновлять блок `[Не выпущено]` или создавать новый датированный блок наверху при наличии смысловых изменений. - Предпочитать строгие русскоязычные категории из этого файла. - Упоминать изменения README только тогда, когда они влияют на onboarding, понимание API, инструкции сборки/тестирования или архитектуру проекта. - Упоминать изменения тестовой инфраструктуры, когда они затрагивают host tests, HIL tests, firmware-side test modules, fixtures, runners, protocol commands или expected coverage. - Упоминать CI changes, когда меняются workflows, local CI tasks, artifacts, triggers, status или self-hosted runner strategy. - Молчать, если новых коммитов нет или найден только отфильтрованный шум.