v4.4.0

v4.4.0 — это крупный релиз модернизации, в котором OpenMV IDE переносится со своей давней базы Qt Creator 10.0.1 на Qt Creator 14.0.2, с повторным применением полного плагина OpenMV и всех модификаций форка поверх более новой базы. Помимо этого, данный релиз включает встроенный языковой сервер Python для автодополнения кода в офлайн-режиме, активирует GitHub Copilot на всех платформах, представляет новый пользовательский загрузчик OpenMV DFU и переводит камеры OpenMV на новый идентификатор поставщика USB 37C5. Смена базы — это масштабная внутренняя модернизация, которая не нарушает пользовательские проекты; см. Несовместимые изменения для небольшого числа заметных пользователю изменений рабочего процесса.

Основные нововведения

  • Перенос на Qt Creator 14.0.2. IDE переходит с Qt Creator 10.0.1 на 14.0.2, с повторным применением всего плагина OpenMV и всех модификаций // OPENMV-DIFF // поверх современной базы (d6c895be8, 1fa75b397).

  • Встроенный языковой сервер Python. IDE теперь поставляется со встроенным pylsp (с astroid 3.3.5) и автоматически его использует, обеспечивая офлайн-автодополнение кода Python/MicroPython без отдельной установки через pip на Windows, macOS и Linux x86_64 (257addee0, 5a2b3e72f, 94470798d).

  • GitHub Copilot на всех платформах. Copilot интегрирован и включён по умолчанию, со встроенной средой выполнения Node.js 20.18.0 для Windows, macOS и Linux, поэтому он больше не ограничен отдельными машинами, плюс добавлено стартовое диалоговое окно для его включения (bb07d582b, 1cb967c5a, b37e48040).

  • Новый загрузчик OpenMV DFU. Полностью реализованный пользовательский процесс загрузчика openmv_dfu управляет обновлениями прошивки из settings.json, включая диалоговое окно «обнаружена плата в режиме DFU», предлагающее варианты установки последнего релиза, загрузки конкретной прошивки и стирания файловой системы, плюс путь через резервный загрузчик для восстановления окирпиченных камер (08b9d0676, 6a6a9351d, 6d78d6571).

  • Поддержка новых камер. Добавлена поддержка плат OpenMV Cam N6, RT1062 и AE3, а также выполнен перевод камер на новый идентификатор поставщика USB 37C5 с обновлёнными драйверами DFU и правилами udev (000ed8a87, f453bc945, 4a16e04c2, 6d78d6571).

  • Более надёжная последовательная связь. Крупные исправления последовательной связи устраняют искажение текста в терминале и случайные разрывы соединения с камерами на основе TinyUSB (caeba6a16, 6cf122a3c).

Новые возможности

  • Загрузчик OpenMV DFU. Новая система загрузчика openmv_dfu с выделенными драйверами DFU и механизмом резервного загрузчика восстанавливает окирпиченные камеры для разных типов прошивок (6a6a9351d, 6d78d6571). Процесс управляет обновлениями прошивки из settings.json и отображает диалоговое окно «обнаружена плата в режиме DFU» с вариантами установки последнего релиза, загрузки конкретной прошивки и стирания файловой системы (08b9d0676, ef19133b6, 9c59d113c).

  • Имя платы в выборе порта. Диалоговое окно выбора последовательного порта теперь опрашивает каждый порт и показывает обнаруженное имя платы рядом с портом (например, COM3: OpenMV Cam H7) вместо простого имени порта (9837d6cb5).

  • Редактор с вкладками. Плагин редактора с вкладками восстановлен, добавляя ряд вкладок документов над областью редактора для переключения между открытыми файлами (c8519c09f), и теперь он сохраняет и восстанавливает порядок вкладок между сеансами (55ccfb207).

  • Подсветка синтаксиса Python. Добавлено выделенное определение подсветки синтаксиса Python для редактора с правилами для форматирования строк, чисел с плавающей точкой и ключевых слов (9be46c0c3).

Прочие изменения и улучшения

  • Рефакторинг загрузки прошивки. Код загрузки прошивки был разделён на отдельные обработчики загрузчика для каждого типа (OpenMV DFU, Arduino DFU, BOSSAC, i.MX, picotool), добавлена обработка PID касания-для-сброса для плат Arduino DFU и явные варианты плат «Legacy» для устройств с альтернативными VID/PID (9f465f9f8).

  • Защитные меры для ROM-загрузчика STM32. IDE теперь предупреждает или блокирует загрузку firmware.dfu/openmv.dfu в ROM-загрузчик восстановления STM32, рекомендуя только bootloader.dfu, чтобы избежать окирпичивания плат STM32H7, затронутых ошибкой ROM-загрузчика чипа (c5ce0ae1a, e7cde1ec1).

  • Автоматическая, бесшумная настройка Python LSP. Языковой сервер Python теперь устанавливается и обновляется автоматически без запросов в информационной панели или спама сообщений в консоли (d89f5985f), а система автодополнения и всплывающей документации Python была переработана в выделенный движок документации OpenMV, который разбирает встроенную HTML-документацию библиотек для подсветки ключевых слов и подсказок (47e02873b, 4f9853f21, 82cefc931).

  • Обнаружение интерпретатора Python в Linux. Обнаружение интерпретатора в Linux теперь автоматическое: учитываются только интерпретаторы Python 3 из PATH с выбором новейшего как единственного по умолчанию (214fdc758).

  • Очистка настроек Python. Группа управления отдельными интерпретаторами и страница Interpreters скрыты, конфигурация языкового сервера помещена в категорию Python, а неиспользуемые кнопки панели инструментов REPL и выбора интерпретатора скрыты в редакторе Python (d89f5985f). В Windows IDE теперь автоматически регистрирует встроенный python.exe как интерпретатор по умолчанию, при этом встроенный языковой сервер считается уже установленным (1d9ca003e, d89f5985f).

  • Более чистый каталог профиля. IDE больше не записывает неиспользуемые файлы настроек Qt Creator (устройства, наборы, цепочки инструментов, версии Qt) и открывает файлы напрямую в редакторе (3771b0107), больше не сканирует систему на наличие qmake/версий Qt (42807f25f) и избегает загрузки неиспользуемого механизма устройств/цепочек инструментов/наборов и лишнего шума при запуске (902a357de, b2666a35b).

  • Более безопасные обновления. Обновление IDE больше не затирает пользовательские ресурсы; удаляются и копируются заново только управляемые папки ресурсов (examples, firmware, html, models), при этом micropython-headers дополнительно удаляется (он устанавливается отдельно, а не копируется заново этим путём), а также добавлено более понятное сообщение об ошибке, если firmware/settings.json отсутствует или недействителен (b4b8c208d, 3255ba4fb).

  • Более быстрое подключение DFU. Время ожидания подключения DFU было сокращено, благодаря чему прошивка и подключение выполняются быстрее (11d8c9fe3, 4700bf678).

  • Восстановленное меню OpenMV и настройки интерфейса. Упрощённая компоновка меню OpenMV применена повторно, скрывая меню Build и Debug и удаляя действия управления проектами (7503f2bec); движок автодополнения кода вновь получает осведомлённость о классах/методах и области видимости ключевых слов public/private для автодополнения MicroPython (55fc348ea); рендеринг ANSI-цветов терминала применён повторно с учётом темы для значений яркости/затемнённости и поддержкой escape-последовательности возврата курсора (c6787a27a); а панель инструментов просмотрщика изображений настроена с подсказками разрешения/масштаба и перемещённым действием Fit-to-Screen (734fec693).

  • Восстановленные встроенные ресурсы. Инструменты прошивки, драйверы DFU, прошивка и полное дерево примеров/скриптов восстановлены в общих ресурсах после удаления в ходе переноса базы (33c8354bc), а пользовательская логика запуска приложения OpenMV применена повторно: она жёстко требует плагин TextEditor (проверки плагинов OpenMV и TabbedEditor присутствуют, но отключены), устанавливает пользовательский обработчик сообщений Qt, удаляет параметры командной строки -client/-pid/-block и принудительно включает режим единственного экземпляра (06c788f3d).

  • Сбой при отсутствии плагина. Приложение теперь жёстко завершается с понятной ошибкой, если требуемые плагины отсутствуют или отключены, плагин OpenMV получил зависимость от Copilot, а несколько параметров текстового редактора (Prefer single line comments и селектор положения комментария в настройках Behavior, а также Highlight selection в настройках Display) скрыты (1bc02b1f3).

  • Более короткие таймауты последовательной связи. Таймауты последовательного протокола были сокращены (чтение с 10000 до 5000 мс, запись с 6000 до 3000 мс) для более быстрой обратной связи об ошибках, при этом документированное значение по умолчанию -override_read_timeout обновлено соответствующим образом (641385af4).

  • Восстановление зависшего порта. Последовательные порты, зависшие в середине команды, теперь восстанавливаются с помощью запроса GET_STATE (настраивается через параметр get-state) вместо запроса о выполнении скрипта (a8598f550).

  • Порядок в диалоге настроек. Диалог настроек скрывает флажок алфавитной сортировки категорий, чтобы список страниц оставался в задуманном OpenMV порядке (1cb967c5a).

  • Упрощённые настройки Copilot. Страница настроек Copilot сведена только к элементам входа/аутентификации и управления прокси, скрывая параметры включения Copilot, пути Node.js, пути dist и автодополнения (1cb967c5a).

Исправления ошибок

  • Исправлены серьёзные проблемы последовательной связи путём увеличения таймаута зависания чтения в 10 раз и отключения механизма восстановления на основе GET_STATE, который искажал текст в последовательном терминале (caeba6a16).

  • Исправлены случайные разрывы последовательного соединения с камерами на основе TinyUSB путём отправки команды разблокировки сброса кадра и переработки обработки зависания чтения вместо разрыва соединения (6cf122a3c).

  • Обработка get_state камеры стала устойчивой к коротким/неполным ответам, и обеспечен сброс буферизованного текста последовательного терминала во время восстановления после ошибки, чтобы вывод журнала не терялся (c8b4248a6, 247a779dd).

  • Исправлены номера раздела флеш-памяти/alt-setting DFU-загрузчика для загрузки прошивки OpenMV Cam (a8700d12d).

  • Восстановлены все загрузчики путём учёта нового флага платы hidden, переключения фильтрации серийных номеров на инверсные фильтры и предоставления рабочей конфигурации picotool для UF2-записи Arduino Nano RP2040 Connect (63cee629b).

  • Исправлен диалог выбора типа платы загрузчика, запоминавший неверное значение, путём использования отдельных ключей истории для удобочитаемых выборов типа платы и выборов типа платы IMX (a3325af32).

  • Исправлен расчёт временных меток/частоты кадров при перекодировании видео (Save Video) путём вычисления среднего интервала между кадрами в микросекундах, добавления поддержки нового формата времени v21 ImageWriter и защиты от нулевых pixmap во время преобразования (f5c75c749, f8f762b3e).

  • Исправлен сбой в представлении гистограммы/буфера кадра при получении пустого (нулевого) pixmap путём защиты pixmapUpdate() от нулевых данных (622cf5ea8).

  • Восстановлены всплывающие подсказки аннотаций в текстовом редакторе, поэтому наведение на текстовые метки снова показывает всплывающую подсказку аннотации (1852d18e1).

  • Предотвращено появление информационных диалогов GitHub Copilot и цветов светодиодов, пока IDE занята подключением или прошивкой (f8f762b3e).

  • Добавлена защита от сбоев в языковом клиенте, поэтому обработка изменения содержимого документа больше не приводит к сбою IDE в граничных случаях (7926ffe4c).

  • Исправлены проверки языкового сервера Python, мешавшие чистому завершению работы IDE, путём асинхронного ожидания плагином Python текущих проверок перед выходом (9ff6c7936).

  • Исправлено автодополнение Python в Linux: языковой клиент укореняется во встроенном micropython-headers, а избыточное действие всплывающего автодополнения на панели инструментов редактора скрыто (d37f66a9a, 56e748f9d, 016fa73eb).

  • Исправлена обработка временных/несохранённых файлов, поэтому Save As использует начальный каталог файлового диалога, а диалог Save Items и редактор Diff больше не показывают внутренние пути временных файлов (b7f0bb378, c8e7b6b8f, 6b128c34c).

  • Сохранение безымянного/временного буфера теперь по умолчанию предлагает в диалоге Save-As корректное имя файла .py вместо пустого имени (3001fdfff).

  • Временные/безымянные документы теперь предлагаются для сохранения при изменении, исключаются из автосохранения и корректно направляются через Save-As (f87b71cf0).

  • Исправлен порядок в меню Recent Files, поэтому повторное открытие уже перечисленного файла больше не меняет его порядок, а файловый диалог теперь по умолчанию открывает каталог проектов (d49c0c993).

  • Исправлен рендеринг текста в окнах сообщений путём отказа от принудительного формата rich-text для окон сообщений с флажками, поэтому необработанный текст отображается корректно (0c565502f).

  • Исправлены цвета всплывающих подсказок, поэтому подсказки корректно отображаются в светлой теме (35cbf077b).

  • Общие исправления стабильности и очистки Qt Creator в основных настройках, языковом клиенте, цепочке инструментов MSVC, проводнике проектов и плагинах Python (836b163dc, 134f43cb8).

  • Исправлено имя папки встроенной прошивки Arduino Nano 33 BLE Sense (b1d8ac227) и исправлено правило udev в Linux для идентификатора продукта DFU-загрузчика AE3, изменив 96E3 на строчное 96e3, чтобы работало регистрозависимое сопоставление idProduct в udev (2cd43c96b). Правило udev в Linux для DFU-загрузчика AE3 также было обновлено до идентификатора продукта 37c5:afe3 для символьной ссылки openmvdfu (b99555637).

Поддержка платформ и инструментов

  • База Qt Creator: 14.0.2 (перенесена с 10.0.1).

  • OpenMV Cam N6 теперь поддерживается (VID:PID 37C5:1206, DFU-загрузчик 37C5:9206), включая настройки прошивки, драйвер DFU для Windows и правило udev для Linux (000ed8a87, 1b950c8c6).

  • OpenMV Cam RT1062 теперь поддерживается с новыми пользовательскими USB VID/PID (37C5:1060), включая драйверы DFU, правила udev и сохранённые устаревшие записи 1209:ABD1 для более старых устройств (f453bc945, d55d6441f).

  • OpenMV Cam AE3 теперь поддерживается, включая драйверы DFU для Windows, дерево образов прошивки/конфигурации и USB VID/PID (обновлены до 37C5:16E3 для среды выполнения / 37C5:96E3 для загрузчика) (4a16e04c2, cc52e76f5, 3f75e7de4, 8eb80b129).

  • Новая система USB VID/PID: камеры OpenMV переходят на идентификатор поставщика 37C5 с новыми идентификаторами загрузчика/DFU (например, 37C5:1202/9202 M4, 1203/9203 M7, 1204/9204 H7, 124A/924A H7 Plus, 1205/9205), переименовывая старые платы 1209:ABD1 в Legacy, при этом по-прежнему поддерживая как старую, так и новую прошивку (6d78d6571, 6a6a9351d, 500b1a0bf).

  • В список распознаваемых датчиков добавлен датчик изображения PAG7936 (f9e3f3461).

  • Встроенный интерпретатор Python 3.13 включён для macOS, Linux x86_64, Linux arm64 и Linux arm (9133b1516), с нативными разделяемыми библиотеками libpython3.13 и ujson (d3aa663d8, a2cb24e74).

  • Встроенный языковой сервер: pylsp с astroid 3.3.5 на Windows, macOS и Linux x86_64 (257addee0). Сборка для Windows поставляется со встроенным CPython, включающим python-lsp-server 1.12.0, jedi 0.17.2, docstring_to_markdown 0.15, pip 24.2 и distlib 0.3.9 (9b6434602, 069807cd3, 5f2e45196, 3b6c6c312).

  • Встроенная среда выполнения Node.js 20.18.0 «Iron» LTS для Windows, macOS, Linux arm64, Linux x64 и Linux armv7 для включения GitHub Copilot на всех платформах (bb07d582b, 6db78bf45, 1cb967c5a).

  • Alif Security Toolkit с подписанными двоичными файлами загрузки/системного пакета и руководством пользователя, включён для Windows, macOS и Linux x86_64 для подготовки камер OpenMV на основе Alif (например, AE3) (f63851be3).

  • Интеграция с рабочим столом Linux восстановлена: устанавливается элемент рабочего стола приложения и метаданные AppStream, а также регистрируется MIME-тип Python (.py) (3fa25f571).

Несовместимые изменения

Скриптовый API не изменился. Могут быть замечены следующие заметные пользователю изменения рабочего процесса и поведения:

  • Новый идентификатор поставщика USB. Камеры OpenMV переходят на идентификатор поставщика 37C5 с новыми идентификаторами продукта и DFU-загрузчика; платы со старым VID 1209:ABD1 теперь помечаются как «Legacy». IDE поддерживает старую и новую прошивку одновременно, но пользователям Linux необходимо переустановить обновлённые правила udev, чтобы новые идентификаторы распознавались.

  • Устаревшие записи плат скрыты. Устаревшие варианты плат OpenMV Cam M4/M7/H7/H7 Plus/Pure Thermal теперь подавляются в списке выбора прошивки/платы с помощью нового флага платы legacy (отличного от ранее существовавшего флага hidden), поэтому пользователи, которым специально нужна запись устаревшей платы, больше не увидят её в выпадающем списке (6d78d6571).

  • Более короткие таймауты последовательной связи. Таймаут чтения ответа по умолчанию снижается с 10000 мс до 5000 мс, а таймаут записи — с 6000 мс до 3000 мс (значение по умолчанию -override_read_timeout теперь документировано как 5000). Медленные платы/каналы, полагавшиеся на более длинные значения по умолчанию, могут истечь по таймауту раньше.

Перенос на Qt Creator 14.0.2 — это масштабная внутренняя модернизация, но он не нарушает работу пользовательских проектов.