Плагин и патчи#
Два артефакта живут в репозитории как исходники под версионным контролем и задокументированы здесь. Они остаются кодом — сайт их описывает, репозиторий их хранит.
sovol_codes — плагин кодов экрана-крутилки#
Вендорский форк Klipper показывает числовые коды на экране-крутилке (101, 103, диапазон shutdown 60+), редактируя upstream-файлы ядра на месте — klippy/extras/homing.py, klippy/klippy.py, klippy/kinematics/corexy.py. Это связывает продуктовый UI с ядром Klipper, и поэтому принтер застрял на сквошнутом вендорском снапшоте вместо трекинга upstream.
Плагин sovol_codes.py воспроизводит те же коды экрана с нулём правок в ядре, используя только публичные точки расширения Klipper:
gcode.register_output_handler(cb)видит каждое сообщение, которое выдаёт Klipper, так что описательный текст маппится в свой код (101 x) без вмешательства в путь, который его породил.register_event_handler("klippy:shutdown", …)ловит причину shutdown для кодов60+(плагин регистрирует и переименованное вендором событие).- Совпадение пишется прямо в
display_status.message— то же поле, что задаётM117, но без прогона gcode-команды через диспетчер, так что это работает и в состоянии ready, и в shutdown.
Таблица message → code — это официальный список кодов экрана SOVOL ZERO, реализованный как чистая функция lookup_code(), полностью покрытая юнит-тестами без нужды в рантайме Klipper (python3 -m unittest test_sovol_codes -v). Установка и включение — на странице плагинов.
Пределы точности против вендорского экрана#
Референсный список описывает экран вендорской прошивки; часть кодов идёт из сообщений, которые существуют только в модифицированном Klipper от Sovol, а текст экрана не всегда совпадает с буквальным сообщением Klipper. Плагин намеренно честен насчёт пробелов, а не подгоняет выдуманные строки:
- Покрытие сток против вендора. Коды, чья якорная строка есть в стоковом upstream (большинство
101–124плюс причины shutdown60–72), срабатывают на чистом чекаутеKlipper3d/klipper. Коды73,109,110,117,123,125идут из вендор-онли кода и срабатывают только на вендорском / коммьюнити-форке, который несёт эти сообщения. - Код 109 использует реальную формулировку, а не текст из списка — аддон поднимает “Toolhead probe more than ten times”, так что правило якорится на этой строке.
- Коды 104 и 105 выдаются без буквы оси — upstream формирует их как статические строки только с координатами, так что индекс оси теряется ещё до появления строки.
- Коды 112 и 113 (LDC1612 I2C bus busy / error) не матчатся вообще — такой строки на стороне хоста не существует; LDC1612 репортит ошибки как числовые перечисления от MCU, а не как стабильный текст.
Это не кандидат в mainline Klipper: числовые коды — продукто-специфичный UI для тачскрина Sovol, а Klipper намеренно держит человекочитаемые сообщения и оставляет презентацию верхнему слою. Опциональный плагин в extras/ на немодифицированном upstream — ровно правильный дом: принтер может одновременно следовать mainline и сохранять свои коды экрана.
Происхождение вендорских патчей#
Директория klipper-patches/ держит содержательные (не version-bump) вендорские коммиты, извлечённые как файлы git format-patch. Они существуют как запись того, что вендор изменил — полезно, когда решаешь, что будет потеряно при прошивке стокового Klipper или коммьюнити-форка.
Klipper на принтере — вендорский форк Sovol на 1.4.5 (8a8b5e8) со сквошнутой upstream-историей: авторства Kevin O'Connor не осталось, так что базовую upstream-версию из git не восстановить. Это непрозрачный снапшот, а не чистый ребейз.
| Коммит | Что делает | Релевантность для upstream |
|---|---|---|
503f61d | Заново включает все типы input-shaper; добавляет 15 мм запаса по Z в процедуре контактного пробинга | Никакой — восстанавливает upstream-дефолт |
36d4468 | Переделывает путь Z prompt-кода “105” во время калибровки | Только вендорский UI |
e88b61c | Добавляет подъём по оси Z в поток калибровки стола по eddy-current | Только вендорский поток |
9366ec4 | Дорабатывает проприетарные prompt-коды “101”/“103” | Только вендорский UI |
Ничего из этого не является фиксом, которого upstream не хватает. «Разблокировка» input-shaper лишь возвращает в коде закомментированный upstream-дефолтный список AUTOTUNE_SHAPERS, который Sovol заменил на ['mzv'] (MZV-онли лок, на который жаловались в обзорах). Остальное вшивает проприетарные экранные prompt-коды Sovol в прошивку — инструментовка вендорского UI, привязанная к тачскрину, а не багфиксы. Реальная забота обратна: сквошнутый форк — скорее всего устаревшая upstream-база, несущая вендорский мусор, так что этот принтер скорее недосчитывается upstream-фиксов, чем держит хоть один.