Ender3-V2-BLTouch-<date>.bin - FAQ and common problems
Mainboard Version 4.2.2

 - Enabled BLTouch - Use BLTouch port [Wiring Diagram]
 - High Speed BLTouch Profile
 - Default probe offset for Jovan Kostenov's Mount - Change offset using M851 command and save to EEPROM with M500 if you use a different mount.
 - Bed set to 225 x 225
 - Adds M048 Probe Accuracy Test
 - Adds G002 / G003 Arc support
 - Adds G010 / G011 Firmware based retraction (Use M207, M208, M209 to configure)
 - Adds M600 - Filament Change
 - Adds M603 - Set Filament Load / Unload length
 - Adds M701 - Load Filament
 - Adds M702 - Unload Filament
 - Enabled Advanced OK
 - Enabled CLASSIC_JERK
 - Enabled Linear Advance (2022-07-22 onwards) Use this tool to calibrate. Use this video as a guide.
 - Enabled Smart Filament Runout Sensor (Add M412 S0 in your Start G-Code if you do not have a filament sensor).
 - Uses hardware EEPROM, not emulated on SD Card.
 - Added support for Meatpack (2020-01-27 onwards)

You will need to print a BLTouch mount such as this one by Jovan Kostenov

KNOWN ISSUES:
- If icons are missing in your screen, follow this forum thread
Name Downloads Size Modified
.. (Parent Directory) -- -- --
DWIN_SET.zip 7993 993.20 KB Membership Required
Ender3-V2-BLTouch-MarlinUI-20261113.bin 0 184.44 KB Membership Required
Changelog
commit 2ee67a7737fd243f75a60b9da86331c1ecc10c66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:31:51 2026 -0600

    ✨ Mixing Extruder with FT Motion (#28829)

commit 37d06314fe53085d1d2252364fd8db007ed122cb
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:22:50 2026 -0600

    🐛 Fix M166 S0, I, J and the report of every mixing component (#28831)
    
    * 🐛 Fix M166 S0, and report every mixing component
    * 🐛 M166: I and J are limited to the last V-tool

commit 05eab9b0232b4595a802c51dbac3a3b5f4181c50
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 00:31:08 2026 +0000

    [cron] Bump distribution date (2026-11-12)

commit 773f63553d49264f2ac73d9acfed75abb89b6f01
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 18:23:25 2026 -0600

    🐛 Preserve MMU3 load-to-nozzle distance compensation (#28828)
    
    Apply the extra-load offset directly to the first extrusion segment.\n\nPlanner-relative E moves no longer honor the logical E-position shift\npreviously used to shorten that segment. Keep the remaining load steps\nand the ramming sequence unchanged.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ender3-V2-BLTouch-20261113.bin 0 193.34 KB Membership Required
Changelog
commit 2ee67a7737fd243f75a60b9da86331c1ecc10c66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:31:51 2026 -0600

    ✨ Mixing Extruder with FT Motion (#28829)

commit 37d06314fe53085d1d2252364fd8db007ed122cb
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:22:50 2026 -0600

    🐛 Fix M166 S0, I, J and the report of every mixing component (#28831)
    
    * 🐛 Fix M166 S0, and report every mixing component
    * 🐛 M166: I and J are limited to the last V-tool

commit 05eab9b0232b4595a802c51dbac3a3b5f4181c50
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 00:31:08 2026 +0000

    [cron] Bump distribution date (2026-11-12)

commit 773f63553d49264f2ac73d9acfed75abb89b6f01
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 18:23:25 2026 -0600

    🐛 Preserve MMU3 load-to-nozzle distance compensation (#28828)
    
    Apply the extra-load offset directly to the first extrusion segment.\n\nPlanner-relative E moves no longer honor the logical E-position shift\npreviously used to shorten that segment. Keep the remaining load steps\nand the ramming sequence unchanged.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ender3-V2-BLTouch-MarlinUI-20261112.bin 0 184.44 KB Membership Required
Changelog
commit 58fa15c50682e1c632218d6e9cea670af427b50b
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 14:16:07 2026 -0600

    🐛 Fix MMU3 E moves with UBL (#28783)

commit 54197a8f4c8f46bfd7f1f329b13383639fc92391
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 18:30:53 2026 +1300

    🔨 Reduce flash size 2k on STM32F103RE_creality / GD32F303RE_creality_mfl (#28530)

commit 06a5000e5054e637a84121176bf94dbc20f08bf4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 22:39:53 2026 -0600

    🐛 Ender-5 S1: Reserve the bootloader's EEPROM bytes (#28822)

commit a4524489455eeac6d8472bef06dad2746fa627b4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:54:53 2026 -0600

    ✨ LEVELING_HEAT_SOAK_TIME (2)
    
    Followup to #28520

commit 343043032bcd380c8a3729f1889bfcae714673a3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:13:47 2026 -0600

    🐛 CREALITY_RTS build without PID heating (#28815)

commit d33131f4dde908ef140306a8fc1417de52c40fd5
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:12:24 2026 +0900

    🐛 Fix MKS WiFi dropping G-code lines without an ok (#28820)
    
    wifi_gcode_exec() copies a G-code line from the MKS WiFi module into espGcodeFifo only when espGcodeFifo.wait_tick > 5. get_wifi_commands() sets wait_tick to 0 each time it moves data from espGcodeFifo into the command queue, then adds 1 per call. A line that arrives before six more calls is dropped: it isn't stored, no ok is sent and need_ok_later isn't set. A host that waits for ok before each line stops there, and a host that doesn't wait loses the line.
    
    Store the line whenever espGcodeFifo has room for it. The space check and the deferred ok (need_ok_later) are unchanged. get_wifi_commands() still uses wait_tick to pace moving the buffer into the queue. There a line that waits stays in the buffer, so nothing is lost.

commit def0a6088ab67a29dd120a571f6f05b47c8e0526
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:11:19 2026 +0900

    🐛 Fix MKS WiFi M27 always reporting 0% (#28821)
    
    The MKS WiFi module asks the board for the print progress with M27. wifi_gcode_exec() answers with MKSW_TOTAL_SEND (uiCfg.totalSend with the LVGL UI, mksWifi.totalSend without it). Nothing writes that field, so the module always shows 0%.
    
    Answer with card.percentDone() instead, and remove the unused totalSend field.

commit a58929e474ffc9a357f4aa26e02d22402018047b
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 11 00:30:03 2026 +0000

    [cron] Bump distribution date (2026-11-11)

commit df842e1159f4f63db73f8469f34e6c72e44a9145
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 09:29:08 2026 +0900

    🐛 Fix MarlinSPI leaving SPI DMA requests enabled (#28819)
    
    MarlinSPI::dmaTransfer() and dmaSend() set RXDMAEN/TXDMAEN in SPI CR2. When the transfer is done they abort and deinit the DMA channel but leave the request bits set.
    
    On STM32F1 a DMA channel serves the requests of every peripheral mapped to it. An idle SPI2 has TXE set, so it keeps requesting on DMA1 Channel 5, which the MKS WiFi module also uses for USART1 RX. When a WiFi file upload starts, that DMA transfer completes at once with no data: the ESP answers "ERROR 500: NO DATA RECEIVED" and the board stops answering the module. With TFT_LVGL_UI on an MKS Robin Nano the UI reads its images from the SPI flash on SPI2 with dmaTransfer(), so every upload fails.
    
    Clear the request bits after the transfer, as TFT_SPI::abort() already does for the TFT.

commit 5bbd466a7b20a770f06a87742388641059b0fda7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 17:26:03 2026 -0600

    🧑‍💻 Tweak STM32 TFT BaudRatePrescaler save/restore

commit dc81c9f7422d230f17648f53110d1f9998072854
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 12:15:18 2026 +1300

    ✅ Fix MKS Robin Nano V2 MKS WiFi test (#28818)
Ender3-V2-BLTouch-20261112.bin 0 193.33 KB Membership Required
Changelog
commit 58fa15c50682e1c632218d6e9cea670af427b50b
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 14:16:07 2026 -0600

    🐛 Fix MMU3 E moves with UBL (#28783)

commit 54197a8f4c8f46bfd7f1f329b13383639fc92391
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 18:30:53 2026 +1300

    🔨 Reduce flash size 2k on STM32F103RE_creality / GD32F303RE_creality_mfl (#28530)

commit 06a5000e5054e637a84121176bf94dbc20f08bf4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 22:39:53 2026 -0600

    🐛 Ender-5 S1: Reserve the bootloader's EEPROM bytes (#28822)

commit a4524489455eeac6d8472bef06dad2746fa627b4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:54:53 2026 -0600

    ✨ LEVELING_HEAT_SOAK_TIME (2)
    
    Followup to #28520

commit 343043032bcd380c8a3729f1889bfcae714673a3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:13:47 2026 -0600

    🐛 CREALITY_RTS build without PID heating (#28815)

commit d33131f4dde908ef140306a8fc1417de52c40fd5
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:12:24 2026 +0900

    🐛 Fix MKS WiFi dropping G-code lines without an ok (#28820)
    
    wifi_gcode_exec() copies a G-code line from the MKS WiFi module into espGcodeFifo only when espGcodeFifo.wait_tick > 5. get_wifi_commands() sets wait_tick to 0 each time it moves data from espGcodeFifo into the command queue, then adds 1 per call. A line that arrives before six more calls is dropped: it isn't stored, no ok is sent and need_ok_later isn't set. A host that waits for ok before each line stops there, and a host that doesn't wait loses the line.
    
    Store the line whenever espGcodeFifo has room for it. The space check and the deferred ok (need_ok_later) are unchanged. get_wifi_commands() still uses wait_tick to pace moving the buffer into the queue. There a line that waits stays in the buffer, so nothing is lost.

commit def0a6088ab67a29dd120a571f6f05b47c8e0526
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:11:19 2026 +0900

    🐛 Fix MKS WiFi M27 always reporting 0% (#28821)
    
    The MKS WiFi module asks the board for the print progress with M27. wifi_gcode_exec() answers with MKSW_TOTAL_SEND (uiCfg.totalSend with the LVGL UI, mksWifi.totalSend without it). Nothing writes that field, so the module always shows 0%.
    
    Answer with card.percentDone() instead, and remove the unused totalSend field.

commit a58929e474ffc9a357f4aa26e02d22402018047b
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 11 00:30:03 2026 +0000

    [cron] Bump distribution date (2026-11-11)

commit df842e1159f4f63db73f8469f34e6c72e44a9145
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 09:29:08 2026 +0900

    🐛 Fix MarlinSPI leaving SPI DMA requests enabled (#28819)
    
    MarlinSPI::dmaTransfer() and dmaSend() set RXDMAEN/TXDMAEN in SPI CR2. When the transfer is done they abort and deinit the DMA channel but leave the request bits set.
    
    On STM32F1 a DMA channel serves the requests of every peripheral mapped to it. An idle SPI2 has TXE set, so it keeps requesting on DMA1 Channel 5, which the MKS WiFi module also uses for USART1 RX. When a WiFi file upload starts, that DMA transfer completes at once with no data: the ESP answers "ERROR 500: NO DATA RECEIVED" and the board stops answering the module. With TFT_LVGL_UI on an MKS Robin Nano the UI reads its images from the SPI flash on SPI2 with dmaTransfer(), so every upload fails.
    
    Clear the request bits after the transfer, as TFT_SPI::abort() already does for the TFT.

commit 5bbd466a7b20a770f06a87742388641059b0fda7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 17:26:03 2026 -0600

    🧑‍💻 Tweak STM32 TFT BaudRatePrescaler save/restore

commit dc81c9f7422d230f17648f53110d1f9998072854
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 12:15:18 2026 +1300

    ✅ Fix MKS Robin Nano V2 MKS WiFi test (#28818)
Ender3-V2-BLTouch-MarlinUI-20261111.bin 0 184.29 KB Membership Required
Changelog
commit 31851a85d85362ae605fbdcbe4f064753bc2d652
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 21:54:31 2026 -0600

    📝 Fix Teensy 4.x memory sizes in AGENTS.md (#28817)

commit 96b2f48071fc67ee988928e8b560b93ac9b725b0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 20:44:24 2026 -0600

    🐛 Include pause.h for UI abort of a parked SD print (#28816)

commit 99e331dc4fefe3c99af4b5d47dc97c3d56651d33
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 15:42:51 2026 +1300

    🩹 Return to Pause after MMU eject (#28813)

commit e803111767db919283c8b31e9390e81299ca9a14
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 10 15:09:25 2026 +1300

    🔧 Delta sanity checks (#28692)

commit af4dec82c7741fbfbd6d49f268c959325b5b24f9
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Tue Nov 10 01:28:39 2026 +0100

    🩹 Disable FTM_MINIMUM_CRUISE_RATIO during resonance test (#28814)
    
    Followup to #28313

commit af23374bedf2a632098e0811ef22ddf96dda3e5f
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 00:27:28 2026 +0000

    [cron] Bump distribution date (2026-11-10)
Ender3-V2-BLTouch-20261111.bin 0 193.18 KB Membership Required
Changelog
commit 31851a85d85362ae605fbdcbe4f064753bc2d652
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 21:54:31 2026 -0600

    📝 Fix Teensy 4.x memory sizes in AGENTS.md (#28817)

commit 96b2f48071fc67ee988928e8b560b93ac9b725b0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 20:44:24 2026 -0600

    🐛 Include pause.h for UI abort of a parked SD print (#28816)

commit 99e331dc4fefe3c99af4b5d47dc97c3d56651d33
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 15:42:51 2026 +1300

    🩹 Return to Pause after MMU eject (#28813)

commit e803111767db919283c8b31e9390e81299ca9a14
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 10 15:09:25 2026 +1300

    🔧 Delta sanity checks (#28692)

commit af4dec82c7741fbfbd6d49f268c959325b5b24f9
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Tue Nov 10 01:28:39 2026 +0100

    🩹 Disable FTM_MINIMUM_CRUISE_RATIO during resonance test (#28814)
    
    Followup to #28313

commit af23374bedf2a632098e0811ef22ddf96dda3e5f
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 00:27:28 2026 +0000

    [cron] Bump distribution date (2026-11-10)
Ender3-V2-BLTouch-MarlinUI-20261110.bin 6 184.29 KB Membership Required
Changelog
commit b3f2ff029d3ce83a33c0f48e1d0d3a891a43ff40
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 16:57:30 2026 -0600

    🚸 One less EEPROM reset on load error

commit 77a557725e575d30e1b8fd6b073e7da0c550b1a5
Author: lucas <268448976+aslucas-dev@users.noreply.github.com>
Date:   Mon Nov 9 18:16:13 2026 -0300

    🐛 Fix MKS WiFi M23 long filename (#28811)
    
    A file uploaded over WiFi is written under its sanitized name (8.3 when LONG_FILENAME_WRITE_SUPPORT is off), so "test-file.gcode" is stored as TEST-~1.GCO. M23 maps the long name to that form only while file_writer.fileTransfer is set, but stopEspTransfer() clears file_writer at the end of every upload, so "M23 test-file.gcode" always fails with "file.open failed". Hosts that upload and then select the file by the same name, like the Cura MKS WiFi plugin, can't start the print.
    
    If the name as given isn't found, try its sanitized form.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit c14123a4e4db4b1271ebe186ce138a0a3dbc2d89
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 10:14:11 2026 +1300

    🩹 Use active MMU slot for eject action (#28812)

commit c49ded2963d6c47adc65a6c5943e269ccfab223a
Author: David Buezas <dbuezas@users.noreply.github.com>
Date:   Sun Nov 8 21:50:03 2026 -0300

    ✨ FTM_MINIMUM_CRUISE_RATIO (#28313)

commit 585c575aa026f6839ebb9477fa8d5a85e553a9cb
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 00:31:23 2026 +0000

    [cron] Bump distribution date (2026-11-09)
Ender3-V2-BLTouch-20261110.bin 1 193.18 KB Membership Required
Changelog
commit b3f2ff029d3ce83a33c0f48e1d0d3a891a43ff40
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 16:57:30 2026 -0600

    🚸 One less EEPROM reset on load error

commit 77a557725e575d30e1b8fd6b073e7da0c550b1a5
Author: lucas <268448976+aslucas-dev@users.noreply.github.com>
Date:   Mon Nov 9 18:16:13 2026 -0300

    🐛 Fix MKS WiFi M23 long filename (#28811)
    
    A file uploaded over WiFi is written under its sanitized name (8.3 when LONG_FILENAME_WRITE_SUPPORT is off), so "test-file.gcode" is stored as TEST-~1.GCO. M23 maps the long name to that form only while file_writer.fileTransfer is set, but stopEspTransfer() clears file_writer at the end of every upload, so "M23 test-file.gcode" always fails with "file.open failed". Hosts that upload and then select the file by the same name, like the Cura MKS WiFi plugin, can't start the print.
    
    If the name as given isn't found, try its sanitized form.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit c14123a4e4db4b1271ebe186ce138a0a3dbc2d89
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 10:14:11 2026 +1300

    🩹 Use active MMU slot for eject action (#28812)

commit c49ded2963d6c47adc65a6c5943e269ccfab223a
Author: David Buezas <dbuezas@users.noreply.github.com>
Date:   Sun Nov 8 21:50:03 2026 -0300

    ✨ FTM_MINIMUM_CRUISE_RATIO (#28313)

commit 585c575aa026f6839ebb9477fa8d5a85e553a9cb
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 00:31:23 2026 +0000

    [cron] Bump distribution date (2026-11-09)
Ender3-V2-BLTouch-MarlinUI-20261109.bin 0 184.30 KB Membership Required
Changelog
commit bc8ff4a54b38fd5360a0f8fa9b8cfe7f119e2071
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 15:24:30 2026 -0600

    ✅ HAL for Artery Technology AT32F403 (Wanhao 0327001) (#28488)
    
    Co-authored-by: Andy Rexx <299255+cyberman@users.noreply.github.com>

commit 8bf528ddcd7965aa2bf97fcbb5c5a2e2183a1e40
Author: Media3 <mark304188@hotmail.com>
Date:   Mon Nov 9 05:21:53 2026 +0800

    ✨ Anycubic Kobra 2 Neo board (TriGorilla Gen V4.0.1) (#28769)
    
    Co-authored-by: ellensp <530024+ellensp@users.noreply.github.com>

commit e40156f42282852cea9d4abbffed8a713fb03459
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Mon Nov 9 10:20:22 2026 +1300

    ✨ ESP32 Bluetooth serial port (#28747)

commit 2d554582dd65203c1085b5f648ac6112cdce94c3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:40:41 2026 -0600

    🚸 Wider menu label threshold

commit 9da6a9e3d95efea544c69dd77330426fa94c1143
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:36:39 2026 -0600

    🐛 MMU3: Reload the slot that ran out, and return to the menu after Unload (#28808)

commit c7fdf41ca043cada476779a63c4c119a644739c9
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:33:54 2026 -0600

    🐛 Purge More with no purge length (#28809)
Ender3-V2-BLTouch-20261109.bin 0 193.19 KB Membership Required
Changelog
commit bc8ff4a54b38fd5360a0f8fa9b8cfe7f119e2071
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 15:24:30 2026 -0600

    ✅ HAL for Artery Technology AT32F403 (Wanhao 0327001) (#28488)
    
    Co-authored-by: Andy Rexx <299255+cyberman@users.noreply.github.com>

commit 8bf528ddcd7965aa2bf97fcbb5c5a2e2183a1e40
Author: Media3 <mark304188@hotmail.com>
Date:   Mon Nov 9 05:21:53 2026 +0800

    ✨ Anycubic Kobra 2 Neo board (TriGorilla Gen V4.0.1) (#28769)
    
    Co-authored-by: ellensp <530024+ellensp@users.noreply.github.com>

commit e40156f42282852cea9d4abbffed8a713fb03459
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Mon Nov 9 10:20:22 2026 +1300

    ✨ ESP32 Bluetooth serial port (#28747)

commit 2d554582dd65203c1085b5f648ac6112cdce94c3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:40:41 2026 -0600

    🚸 Wider menu label threshold

commit 9da6a9e3d95efea544c69dd77330426fa94c1143
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:36:39 2026 -0600

    🐛 MMU3: Reload the slot that ran out, and return to the menu after Unload (#28808)

commit c7fdf41ca043cada476779a63c4c119a644739c9
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:33:54 2026 -0600

    🐛 Purge More with no purge length (#28809)
Ender3-V2-BLTouch-MarlinUI-20261107.bin 1 184.05 KB Membership Required
Changelog
commit cb555a49f8eb9c4cb9f337bb0b38960a6736a03e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 18:00:02 2026 +1300

    📝 Update ESP32 notes on how TMC serial ports are started (#28807)
    
    Now `tmc_hw_serial_begin` starts them instead of `init_board`

commit faad0eddb6fdc15ee66c981f9626a48b8e4be85e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:41 2026 +1300

    🔨 Enable LTO for STM32F070RB_malyan (#28750)

commit 7476c730e1c14fd8f1c6976bccc163213b25de7b
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:05 2026 +1300

    ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7) (#28718)
    
    * ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7)
    
    Move mks_dlc32_v2_1 from espressif32@2.1.0 (arduino-esp32 1.0.4) to espressif32@6.1.0 (arduino-esp32 2.0.7, ESP-IDF 4.4, GCC 8.4).
    
    - Declare the board's 8 MB flash. The esp32dev header says 4 MB while the env uses default_8MB.csv, and the ESP-IDF 4.4 bootloader rejects a partition table larger than the declared flash and resets in a loop.
    - With TOUCH_BUTTONS_HW_SPI the touch pins belong to the SPI bus the TFT has already started. XPT2046::init() no longer sets them with pinMode(), which on arduino-esp32 2.x routes them back to GPIO and cuts them off the bus, leaving the TFT showing garbage and touch dead.
    - Add the board to the CI build matrix, with a TS24-R touch screen test.
    
    * 🔧 Label the MKS DLC32 env with its ESP-IDF version

commit aa756a7b4bb7edaf4cdd85a77630bf0870d5129c
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Thu Nov 5 20:44:32 2026 -0800

    🔧 Require USB flash drive env for STM32 USE_OTG_USB_HOST (#28681)

commit 3d8d21e1e735ca8f34b941e9c2d72fab74c95a44
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:40:02 2026 -0600

    🐛 MMU3: Report a command the MMU keeps rejecting (#28806)

commit b0b0d9859d1df885057fcb04d65adc3ec464a4df
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:39:32 2026 -0600

    🐛 Fix schema.py inline block comment swallowing #endif (#28805)
    
    A /* ... */ comment that opens and closes on one (joined) line began a block comment that never closed, swallowing following lines including #endif/#else. Conditions then leaked onto later options (e.g., HAS_CHAMELEON). Strip same-line block comments before comment-start detection; add buildroot/tests/schema-test.py.

commit d76c69383d83c58688eda4e6a7201589ac53e68e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:38:44 2026 -0600

    🐛 MMU3: Choose the slot to load in the Filament Change menu (#28804)

commit a492b5fb8d1d11ae9aa6468ae0531967ddf064ad
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 21:35:41 2026 -0600

    🐛 MMU3: Tighten the FINDA runout conditions (#28803)
    
    * 🐛 MMU3: Only check the FINDA runout during an active print
    * 🐛 MMU3: Don't require leveling for the FINDA runout

commit 9b57d31282fde034173745814a7064285a84e18d
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 6 00:29:41 2026 +0000

    [cron] Bump distribution date (2026-11-06)
Ender3-V2-BLTouch-20261107.bin 1 192.89 KB Membership Required
Changelog
commit cb555a49f8eb9c4cb9f337bb0b38960a6736a03e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 18:00:02 2026 +1300

    📝 Update ESP32 notes on how TMC serial ports are started (#28807)
    
    Now `tmc_hw_serial_begin` starts them instead of `init_board`

commit faad0eddb6fdc15ee66c981f9626a48b8e4be85e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:41 2026 +1300

    🔨 Enable LTO for STM32F070RB_malyan (#28750)

commit 7476c730e1c14fd8f1c6976bccc163213b25de7b
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:05 2026 +1300

    ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7) (#28718)
    
    * ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7)
    
    Move mks_dlc32_v2_1 from espressif32@2.1.0 (arduino-esp32 1.0.4) to espressif32@6.1.0 (arduino-esp32 2.0.7, ESP-IDF 4.4, GCC 8.4).
    
    - Declare the board's 8 MB flash. The esp32dev header says 4 MB while the env uses default_8MB.csv, and the ESP-IDF 4.4 bootloader rejects a partition table larger than the declared flash and resets in a loop.
    - With TOUCH_BUTTONS_HW_SPI the touch pins belong to the SPI bus the TFT has already started. XPT2046::init() no longer sets them with pinMode(), which on arduino-esp32 2.x routes them back to GPIO and cuts them off the bus, leaving the TFT showing garbage and touch dead.
    - Add the board to the CI build matrix, with a TS24-R touch screen test.
    
    * 🔧 Label the MKS DLC32 env with its ESP-IDF version

commit aa756a7b4bb7edaf4cdd85a77630bf0870d5129c
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Thu Nov 5 20:44:32 2026 -0800

    🔧 Require USB flash drive env for STM32 USE_OTG_USB_HOST (#28681)

commit 3d8d21e1e735ca8f34b941e9c2d72fab74c95a44
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:40:02 2026 -0600

    🐛 MMU3: Report a command the MMU keeps rejecting (#28806)

commit b0b0d9859d1df885057fcb04d65adc3ec464a4df
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:39:32 2026 -0600

    🐛 Fix schema.py inline block comment swallowing #endif (#28805)
    
    A /* ... */ comment that opens and closes on one (joined) line began a block comment that never closed, swallowing following lines including #endif/#else. Conditions then leaked onto later options (e.g., HAS_CHAMELEON). Strip same-line block comments before comment-start detection; add buildroot/tests/schema-test.py.

commit d76c69383d83c58688eda4e6a7201589ac53e68e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:38:44 2026 -0600

    🐛 MMU3: Choose the slot to load in the Filament Change menu (#28804)

commit a492b5fb8d1d11ae9aa6468ae0531967ddf064ad
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 21:35:41 2026 -0600

    🐛 MMU3: Tighten the FINDA runout conditions (#28803)
    
    * 🐛 MMU3: Only check the FINDA runout during an active print
    * 🐛 MMU3: Don't require leveling for the FINDA runout

commit 9b57d31282fde034173745814a7064285a84e18d
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 6 00:29:41 2026 +0000

    [cron] Bump distribution date (2026-11-06)
Ender3-V2-BLTouch-MarlinUI-20261106.bin 0 184.05 KB Membership Required
Changelog
commit de15c7b9d4e4485cd05ed857ef8b74bd2c4de7d0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:33:42 2026 -0600

    ✨ Switching Toolhead docks at either end of Y (#28802)
    
    * ✨ Switching Toolhead docks at either end of Y
    * 🦺 Warn when a Switching Toolhead slide reaches the next dock
    * ✅ Test Switching Toolheads with docks at the front and rear

commit 69fb296f731bb40d9df4a237aec3758d566e865f
Author: Novin3dp <hamidshahsavancloud1@gmail.com>
Date:   Thu Nov 5 22:02:54 2026 +0330

    ✨ Galaxy UI for 480x320 touch screens (#28702)
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 98df59810db6d8495017165474fa09430fa18b9e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:22:14 2026 -0600

    🐛 Engage the electromagnetic toolhead at the new dock (#28801)

commit b4d46c3cd2b7ca56e6b4d08ba541cbbc5f29f890
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:44 2026 +1300

    🐛 Fix MAX31865 invalid pin write and ESP32 SD pin clash (#28797)
    
    On hardware SPI, spiBeginTransaction() wrote to sclkPin, which holds the "no pin" value. On arduino-esp32 2.x each write logs an error on the host serial port.
    
    Software SPI on the SD card's pins reads all ones on ESP32 and halts at boot with MINTEMP, so make that a sanity-check error.

commit dcdd959051f4dd5332d5cf00555dc13f836ce642
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:06 2026 +1300

    🐛 Start ESP32 TMC serial once, on the board's pins (#28796)
    
    tmc_serial_begin() started UART1 on the core's default pins, then init_board() started a local copy on the board's pins. From arduino-esp32 2.x the local's destructor ends the UART, leaving TMC with no port. On 1.0.4, GPIO 10 stayed routed to UART1 TX.

commit b69948b5f870a03b79f69b82c87661bd7de11cdf
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:06:56 2026 +1300

    🚸 Power-loss resume prompt on FTDI EVE and PanelDue (#28794)
    
    M1000 S calls ExtUI::onPowerLossResume(), which did nothing on these displays, so a print couldn't be resumed or cancelled from them. FTDI EVE gets a Yes/No dialog, and PanelDue a Resume/Cancel message box.
    
    M1000 S also tells the host how to resume or cancel on all ExtUI displays, since Marlin can't tell whether a display shows a prompt.

commit 00c414af68ccfc47674890c6a2eaa09422226f05
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 00:29:49 2026 +0000

    [cron] Bump distribution date (2026-11-05)
Ender3-V2-BLTouch-20261106.bin 0 192.89 KB Membership Required
Changelog
commit de15c7b9d4e4485cd05ed857ef8b74bd2c4de7d0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:33:42 2026 -0600

    ✨ Switching Toolhead docks at either end of Y (#28802)
    
    * ✨ Switching Toolhead docks at either end of Y
    * 🦺 Warn when a Switching Toolhead slide reaches the next dock
    * ✅ Test Switching Toolheads with docks at the front and rear

commit 69fb296f731bb40d9df4a237aec3758d566e865f
Author: Novin3dp <hamidshahsavancloud1@gmail.com>
Date:   Thu Nov 5 22:02:54 2026 +0330

    ✨ Galaxy UI for 480x320 touch screens (#28702)
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 98df59810db6d8495017165474fa09430fa18b9e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:22:14 2026 -0600

    🐛 Engage the electromagnetic toolhead at the new dock (#28801)

commit b4d46c3cd2b7ca56e6b4d08ba541cbbc5f29f890
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:44 2026 +1300

    🐛 Fix MAX31865 invalid pin write and ESP32 SD pin clash (#28797)
    
    On hardware SPI, spiBeginTransaction() wrote to sclkPin, which holds the "no pin" value. On arduino-esp32 2.x each write logs an error on the host serial port.
    
    Software SPI on the SD card's pins reads all ones on ESP32 and halts at boot with MINTEMP, so make that a sanity-check error.

commit dcdd959051f4dd5332d5cf00555dc13f836ce642
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:06 2026 +1300

    🐛 Start ESP32 TMC serial once, on the board's pins (#28796)
    
    tmc_serial_begin() started UART1 on the core's default pins, then init_board() started a local copy on the board's pins. From arduino-esp32 2.x the local's destructor ends the UART, leaving TMC with no port. On 1.0.4, GPIO 10 stayed routed to UART1 TX.

commit b69948b5f870a03b79f69b82c87661bd7de11cdf
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:06:56 2026 +1300

    🚸 Power-loss resume prompt on FTDI EVE and PanelDue (#28794)
    
    M1000 S calls ExtUI::onPowerLossResume(), which did nothing on these displays, so a print couldn't be resumed or cancelled from them. FTDI EVE gets a Yes/No dialog, and PanelDue a Resume/Cancel message box.
    
    M1000 S also tells the host how to resume or cancel on all ExtUI displays, since Marlin can't tell whether a display shows a prompt.

commit 00c414af68ccfc47674890c6a2eaa09422226f05
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 00:29:49 2026 +0000

    [cron] Bump distribution date (2026-11-05)
Ender3-V2-BLTouch-MarlinUI-20261105.bin 0 184.05 KB Membership Required
Changelog
commit 96b799b8800992af23decae3e4e60c33893ea4b5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:47:34 2026 -0600

    🐛 Fix FT_MOTION build with multiple languages (#28793)

commit 06a43df7d5ecf57f6a493d3ac331c7b619592909
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:24:06 2026 +1300

    🧑‍💻 FSMC colour TFT in the simulator (#28761)
    
    The simulator has no FSMC bus. Its SPI bus hands each byte to the panel model with the DC level, so an FSMC panel can be driven as an SPI panel: the sim HAL's tft_fsmc.h is tft_spi.h, and the simulated board maps FSMC_CS_PIN / FSMC_RS_PIN onto the TFT CS and DC pins.

commit 42a07bc48dd71a2171d39188560ee3dbb3b23a45
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:22:48 2026 +1300

    🐛 Fix M110 with no serial port (#28798)

commit be4148bc069fc4d1d60cac92996663cf97a40130
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:19:36 2026 -0600

    🐛 Fix MMU3 Spool Join slot wrap (#28800)

commit 9b0e2d2684b8cc3b879a920bbac00bb42efeaf98
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:17:19 2026 -0600

    🐛 Fix MMU3 FINDA runout hang and purge (#28799)

commit 9605b4308c9b9941471fac89404e5d17d005e8eb
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Wed Nov 4 14:37:58 2026 +1300

    🚸 About > MMU Firmware version (#28788)

commit f52dd8bb7344f6ed833ddcbd3b92a5813742e11b
Author: Mihai <299015+mh-dm@users.noreply.github.com>
Date:   Wed Nov 4 03:31:28 2026 +0200

    ⚡️ Guard `time_spent_in/out_isr` with `MULTISTEPPING_LIMIT > 1` (#27147)
    
    * Guard time_spent_in_isr, time_spent_out_isr with MULTISTEPPING_LIMIT > 1
    * Fix build with RESONANCE_TEST when MULTISTEPPING_LIMIT is 1 (or OLD_ADAPTIVE_MULTISTEPPING), where time_spent_in/out_isr are no longer declared.
    
    Co-Authored-By: Scott Lahteine <thinkyhead@users.noreply.github.com>

commit ddcccc1263510fad5b7d372e471a3f157e1abca5
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Tue Nov 3 17:29:36 2026 -0800

    🩹 Fix RP2040 sensorless homing, servos, and M997 (#28566)
    
    * 🩹 Fix RP2040 sensorless homing and servo builds
    * 🩹 Fix RP2040 M997 bootloader entry
    * ✅ Add SKR Pico NeoPixel / servo / sensorless test

commit 5b6d22eed84a0a098896d5c8aebeb8dbd25f8ba2
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 19:18:56 2026 -0600

    🧑‍💻 Update axis-oriented inline macros

commit 1c204b77c916bb16b59aeb765bdca4e0fd180efa
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 00:28:41 2026 +0000

    [cron] Bump distribution date (2026-11-04)
Ender3-V2-BLTouch-20261105.bin 0 192.82 KB Membership Required
Changelog
commit 96b799b8800992af23decae3e4e60c33893ea4b5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:47:34 2026 -0600

    🐛 Fix FT_MOTION build with multiple languages (#28793)

commit 06a43df7d5ecf57f6a493d3ac331c7b619592909
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:24:06 2026 +1300

    🧑‍💻 FSMC colour TFT in the simulator (#28761)
    
    The simulator has no FSMC bus. Its SPI bus hands each byte to the panel model with the DC level, so an FSMC panel can be driven as an SPI panel: the sim HAL's tft_fsmc.h is tft_spi.h, and the simulated board maps FSMC_CS_PIN / FSMC_RS_PIN onto the TFT CS and DC pins.

commit 42a07bc48dd71a2171d39188560ee3dbb3b23a45
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:22:48 2026 +1300

    🐛 Fix M110 with no serial port (#28798)

commit be4148bc069fc4d1d60cac92996663cf97a40130
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:19:36 2026 -0600

    🐛 Fix MMU3 Spool Join slot wrap (#28800)

commit 9b0e2d2684b8cc3b879a920bbac00bb42efeaf98
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:17:19 2026 -0600

    🐛 Fix MMU3 FINDA runout hang and purge (#28799)

commit 9605b4308c9b9941471fac89404e5d17d005e8eb
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Wed Nov 4 14:37:58 2026 +1300

    🚸 About > MMU Firmware version (#28788)

commit f52dd8bb7344f6ed833ddcbd3b92a5813742e11b
Author: Mihai <299015+mh-dm@users.noreply.github.com>
Date:   Wed Nov 4 03:31:28 2026 +0200

    ⚡️ Guard `time_spent_in/out_isr` with `MULTISTEPPING_LIMIT > 1` (#27147)
    
    * Guard time_spent_in_isr, time_spent_out_isr with MULTISTEPPING_LIMIT > 1
    * Fix build with RESONANCE_TEST when MULTISTEPPING_LIMIT is 1 (or OLD_ADAPTIVE_MULTISTEPPING), where time_spent_in/out_isr are no longer declared.
    
    Co-Authored-By: Scott Lahteine <thinkyhead@users.noreply.github.com>

commit ddcccc1263510fad5b7d372e471a3f157e1abca5
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Tue Nov 3 17:29:36 2026 -0800

    🩹 Fix RP2040 sensorless homing, servos, and M997 (#28566)
    
    * 🩹 Fix RP2040 sensorless homing and servo builds
    * 🩹 Fix RP2040 M997 bootloader entry
    * ✅ Add SKR Pico NeoPixel / servo / sensorless test

commit 5b6d22eed84a0a098896d5c8aebeb8dbd25f8ba2
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 19:18:56 2026 -0600

    🧑‍💻 Update axis-oriented inline macros

commit 1c204b77c916bb16b59aeb765bdca4e0fd180efa
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 00:28:41 2026 +0000

    [cron] Bump distribution date (2026-11-04)
Ender3-V2-BLTouch-MarlinUI-20261104.bin 1 184.05 KB Membership Required
Changelog
commit 02a182c0f479b24323579e344119877d257a315a
Author: DerAndere <26200979+DerAndere1@users.noreply.github.com>
Date:   Tue Nov 3 23:04:59 2026 +0100

    ✅ Ignore compile_commands.json (#28764)

commit 03421f019ac992c16ee0587669a3a2523097646d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 15:55:12 2026 -0600

    ✨ 3D Chameleon Mk4 filament changer (#24247)

commit 8e3150e9bb2dc133c3939122672c42756bbfa4c6
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Wed Nov 4 00:46:56 2026 +0300

    🌐 Update Turkish language (#28791)

commit 8fca522b3c9e170b3f1ea19e54a8387afd264edb
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 10:43:45 2026 +1300

    ✨ Creality Sermoon V1 / V1 Pro: board and stock touchscreen (#28623)

commit 5f92865ac00ca30463103358b35151e9651877a0
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:34:06 2026 -0300

    🐛 Don't echo MKS WiFi temperature polls to the host (#28787)
    
    The MKS WiFi module sends M991 every 5 seconds. The handler replies to the module with the temperatures, then also enqueues an M105, whose "ok T:..." reply goes to the main serial port. A host on USB gets an unsolicited "ok" every 5 seconds, which can upset hosts that count "ok" replies to pace their commands.
    
    The module already has its reply, so don't enqueue the M105.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit bfe4efb637559071b5721ea3ca9cb3d4cd1395f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:30:42 2026 -0300

    🐛 Fix STM32F1 SDIO hang when the card is mounted again (#28785)
    
    On F4 and F7, SD_LowLevel_Init() resets the SDIO peripheral with __HAL_RCC_SDIO_FORCE_RESET() before HAL_SD_Init(). The STM32F1 HAL has no SDIO reset macro, so the F1 branch only enables the clock, and a new init starts from whatever state the previous one left.
    
    On an MKS Robin Nano V1.2 (STM32F103VE) this hangs until the watchdog resets the board: at boot, when manage_media() mounts the card that setup() has already mounted, and on every M21.
    
    On F1, write the SDIO registers back to their reset values before init.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 20e22dd0a59f36f78338e92a569fe152888154f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:29:41 2026 -0300

    🐛 Fix MKS WiFi serial init leaving RTS/CTS on PA_0 (#28784)
    
    WifiSerial::init() sets the RX and TX pins but not pin_rts and pin_cts.
    The WifiSerial object is zero-initialized, so both stay at 0, which is PA_0. uart_init() rejects an RTS pin that maps to no U(S)ART and returns without starting the UART, so the board never hears the module.
    
    Set both to NC, which is also the default in HardwareSerial::init().
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit e286cc0525dea508ba374a6ab4862255f7b84017
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 14:28:49 2026 -0600

    🐛 Fix RESONANCE_TEST without FT_MOTION (#28792)
    
    * 🐛 Fix RESONANCE_TEST without FT_MOTION
    * 🚸 RESONANCE_TEST requires a 32-bit CPU

commit 9a200ec1f52240af298f6a1b5287033b6b966e46
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:28:11 2026 -0300

    🐛 Fix MKS WiFi M20, M23 and M28 arguments (#28786)
    
    Since #28562, wifi_gcode_exec() reads the arguments of M20 <path>, M23 and M28 from mStr, which points at the "M" of the command, instead of from the first space after it. "M23 file.gcode" tries to open "/M23 file.gcode" and always fails with "file.open failed", so a print can't be started over WiFi. The old MKS UI code read them from the space, as spStr does now.
    
    Read the arguments from spStr, and skip M23 and M28 when there is none.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 1b5fc1a8888de334eec070159ddd5f995faf0dee
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:27:06 2026 +1300

    🐛 Fix MKS WiFi M998 file system argument (#28789)

commit 1baacc50e2dd97bb02d1b2fb160f696a17dd89a3
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:26:19 2026 +1300

    ✨ EMERGENCY_PARSER for ESP32 (#28790)
    
    The Arduino-ESP32 core keeps received UART bytes in its own interrupt, so a task on Marlin's core moves them into a ring buffer, passing each to the emergency parser. The WIFISUPPORT WebSocket port parses each received frame. With EMERGENCY_PARSER disabled the build is unchanged.

commit 6e03341e0436b076f8339f0f702be18a05f81522
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 00:28:44 2026 +0000

    [cron] Bump distribution date (2026-11-03)
Ender3-V2-BLTouch-20261104.bin 1 192.82 KB Membership Required
Changelog
commit 02a182c0f479b24323579e344119877d257a315a
Author: DerAndere <26200979+DerAndere1@users.noreply.github.com>
Date:   Tue Nov 3 23:04:59 2026 +0100

    ✅ Ignore compile_commands.json (#28764)

commit 03421f019ac992c16ee0587669a3a2523097646d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 15:55:12 2026 -0600

    ✨ 3D Chameleon Mk4 filament changer (#24247)

commit 8e3150e9bb2dc133c3939122672c42756bbfa4c6
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Wed Nov 4 00:46:56 2026 +0300

    🌐 Update Turkish language (#28791)

commit 8fca522b3c9e170b3f1ea19e54a8387afd264edb
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 10:43:45 2026 +1300

    ✨ Creality Sermoon V1 / V1 Pro: board and stock touchscreen (#28623)

commit 5f92865ac00ca30463103358b35151e9651877a0
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:34:06 2026 -0300

    🐛 Don't echo MKS WiFi temperature polls to the host (#28787)
    
    The MKS WiFi module sends M991 every 5 seconds. The handler replies to the module with the temperatures, then also enqueues an M105, whose "ok T:..." reply goes to the main serial port. A host on USB gets an unsolicited "ok" every 5 seconds, which can upset hosts that count "ok" replies to pace their commands.
    
    The module already has its reply, so don't enqueue the M105.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit bfe4efb637559071b5721ea3ca9cb3d4cd1395f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:30:42 2026 -0300

    🐛 Fix STM32F1 SDIO hang when the card is mounted again (#28785)
    
    On F4 and F7, SD_LowLevel_Init() resets the SDIO peripheral with __HAL_RCC_SDIO_FORCE_RESET() before HAL_SD_Init(). The STM32F1 HAL has no SDIO reset macro, so the F1 branch only enables the clock, and a new init starts from whatever state the previous one left.
    
    On an MKS Robin Nano V1.2 (STM32F103VE) this hangs until the watchdog resets the board: at boot, when manage_media() mounts the card that setup() has already mounted, and on every M21.
    
    On F1, write the SDIO registers back to their reset values before init.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 20e22dd0a59f36f78338e92a569fe152888154f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:29:41 2026 -0300

    🐛 Fix MKS WiFi serial init leaving RTS/CTS on PA_0 (#28784)
    
    WifiSerial::init() sets the RX and TX pins but not pin_rts and pin_cts.
    The WifiSerial object is zero-initialized, so both stay at 0, which is PA_0. uart_init() rejects an RTS pin that maps to no U(S)ART and returns without starting the UART, so the board never hears the module.
    
    Set both to NC, which is also the default in HardwareSerial::init().
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit e286cc0525dea508ba374a6ab4862255f7b84017
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 14:28:49 2026 -0600

    🐛 Fix RESONANCE_TEST without FT_MOTION (#28792)
    
    * 🐛 Fix RESONANCE_TEST without FT_MOTION
    * 🚸 RESONANCE_TEST requires a 32-bit CPU

commit 9a200ec1f52240af298f6a1b5287033b6b966e46
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:28:11 2026 -0300

    🐛 Fix MKS WiFi M20, M23 and M28 arguments (#28786)
    
    Since #28562, wifi_gcode_exec() reads the arguments of M20 <path>, M23 and M28 from mStr, which points at the "M" of the command, instead of from the first space after it. "M23 file.gcode" tries to open "/M23 file.gcode" and always fails with "file.open failed", so a print can't be started over WiFi. The old MKS UI code read them from the space, as spStr does now.
    
    Read the arguments from spStr, and skip M23 and M28 when there is none.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 1b5fc1a8888de334eec070159ddd5f995faf0dee
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:27:06 2026 +1300

    🐛 Fix MKS WiFi M998 file system argument (#28789)

commit 1baacc50e2dd97bb02d1b2fb160f696a17dd89a3
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:26:19 2026 +1300

    ✨ EMERGENCY_PARSER for ESP32 (#28790)
    
    The Arduino-ESP32 core keeps received UART bytes in its own interrupt, so a task on Marlin's core moves them into a ring buffer, passing each to the emergency parser. The WIFISUPPORT WebSocket port parses each received frame. With EMERGENCY_PARSER disabled the build is unchanged.

commit 6e03341e0436b076f8339f0f702be18a05f81522
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 00:28:44 2026 +0000

    [cron] Bump distribution date (2026-11-03)
Ender3-V2-BLTouch-MarlinUI-20261103.bin 0 184.02 KB Membership Required
Changelog
commit 54ac92ea14a952df577e9d4652c8ea237b05e8d2
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Mon Nov 2 23:52:00 2026 +0100

    🚸 Fix M920 HOMING_CURRENT output (#28519)

commit 3cfac53ba5d4724bf2dd4cc0ebe3ee02f4092671
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Mon Nov 2 14:50:28 2026 -0800

    🐛 Fix FYSETC 2.42" OLED on STM32 (#28682)

commit d84f78ad8de208c698ec33454570d2701b420f9f
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:49:14 2026 +1300

    🐛 Fix MKS_TEST endstop pin reads (#28687)
    
    Fix LOWSTATE macro expansion

commit eee9ce1d6b05325a047d404c058e0d95fc2e02fa
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:47:57 2026 +1300

    🐛 Fix RGB_LED write on non-PWM pins (#28709)

commit 30ba8bd702798fd3ef5f65e4c166abbf633f8710
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Tue Nov 3 01:46:49 2026 +0300

    🐛 Fix UI abort of an SD print parked by M125 (#28752)

commit d87ccd064970190af5e8522792f5bf7909590947
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:43:28 2026 +1300

    🐛 Fix ESP32 WebSocket serial output (#28762)

commit 688c23a20b85d7be2f6cc1edb78024e8005d3455
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Mon Nov 2 00:10:20 2026 -0600

    🤖  Bump the actions group (#28776)

commit c68a31a12cfd7eee5b4b4877f9973915618fdd5b
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:51:14 2026 -0600

    🐛 MMU3: Restore temperatures after Hotend Idle Timeout (#28778)
    
    * 🐛 MMU3: Restore temperatures after Hotend Idle Timeout
    
    If Hotend Idle Timeout lowered the hotend and bed targets while an MMU3 error was waiting for the user, Retry continued with cold targets and nothing heated them again.
    
    Remember the targets when the error starts and raise them again, waiting for the hotend, when the error is resolved. Also enable HOTEND_IDLE_TIMEOUT in the rambo config-05 test.
    
    * 🐛 MMU3: Ignore clicks while waiting for the hotend after Retry
    
    Retrying after a Hotend Idle Timeout showed a blank screen, and clicking again sent Retry to the MMU while the nozzle was still cold. The wait keeps the MMU loop running, so the second click on the still-active error menu was handled inside the wait.
    
    Show the status screen while heating and ignore the error screen buttons until the hotend is ready.

commit 1296a617f1388e6a1f6c5965e99589949a7228cf
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:50:34 2026 -0600

    🐛 Fix MMU3 status message buffer overflow (#28780)
    
    TryLoadUnloadReporter::DumpToSerial copied the whole status message into a buffer of LCD_WIDTH + 1 bytes. The message can be longer than the display width, such as a long machine name followed by "Ready.", so the copy overwrote the stack, including the return address. Limit the copy to LCD_WIDTH and clear the buffer.

commit b76848a1fa364b240e533bbdb242bf463def1e07
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:37:14 2026 -0600

    🐛 Preheat for MMU menu Load to Nozzle / Unload (#28772)
    
    With a cold nozzle the MMU menu's Load to Nozzle fed the filament while Marlin dropped the extruder moves (MMU3), and Unload was refused and retried forever (MMU2).
    
    Ask to preheat (first preset), show the heating on the Status Screen, then run the action. A click or M108 stops the wait and restores the old target. The CI tests for MMU2 and MMU2S now enable MMU_MENUS so the menu code is built.

commit 74957c5063b89be7935c8cc8cadb9c203c66bd23
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 22:47:46 2026 -0600

    🚸 Less MMU3 serial output (#28779)

commit 4f78d998feea95eeb821201fdf811b8b7e4568c7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 21:21:31 2026 -0600

    🐛 Fix M43 pin direction and protect pins in the simulator (#28777)
    
    * 🐛 Fix M43 pin direction in the simulator
    * ✨ Protect simulator-owned pins from M43

commit 9286875f57eb1cae1c1380d2ad423d7cdd8baed1
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 18:33:39 2026 -0600

    🔧 Move PANELDUE above ExtUI

commit a31874f7ddc1ede037fb2ebfbfa39221b18ad720
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 2 00:31:14 2026 +0000

    [cron] Bump distribution date (2026-11-02)
Ender3-V2-BLTouch-20261103.bin 0 192.78 KB Membership Required
Changelog
commit 54ac92ea14a952df577e9d4652c8ea237b05e8d2
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Mon Nov 2 23:52:00 2026 +0100

    🚸 Fix M920 HOMING_CURRENT output (#28519)

commit 3cfac53ba5d4724bf2dd4cc0ebe3ee02f4092671
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Mon Nov 2 14:50:28 2026 -0800

    🐛 Fix FYSETC 2.42" OLED on STM32 (#28682)

commit d84f78ad8de208c698ec33454570d2701b420f9f
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:49:14 2026 +1300

    🐛 Fix MKS_TEST endstop pin reads (#28687)
    
    Fix LOWSTATE macro expansion

commit eee9ce1d6b05325a047d404c058e0d95fc2e02fa
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:47:57 2026 +1300

    🐛 Fix RGB_LED write on non-PWM pins (#28709)

commit 30ba8bd702798fd3ef5f65e4c166abbf633f8710
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Tue Nov 3 01:46:49 2026 +0300

    🐛 Fix UI abort of an SD print parked by M125 (#28752)

commit d87ccd064970190af5e8522792f5bf7909590947
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:43:28 2026 +1300

    🐛 Fix ESP32 WebSocket serial output (#28762)

commit 688c23a20b85d7be2f6cc1edb78024e8005d3455
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Mon Nov 2 00:10:20 2026 -0600

    🤖  Bump the actions group (#28776)

commit c68a31a12cfd7eee5b4b4877f9973915618fdd5b
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:51:14 2026 -0600

    🐛 MMU3: Restore temperatures after Hotend Idle Timeout (#28778)
    
    * 🐛 MMU3: Restore temperatures after Hotend Idle Timeout
    
    If Hotend Idle Timeout lowered the hotend and bed targets while an MMU3 error was waiting for the user, Retry continued with cold targets and nothing heated them again.
    
    Remember the targets when the error starts and raise them again, waiting for the hotend, when the error is resolved. Also enable HOTEND_IDLE_TIMEOUT in the rambo config-05 test.
    
    * 🐛 MMU3: Ignore clicks while waiting for the hotend after Retry
    
    Retrying after a Hotend Idle Timeout showed a blank screen, and clicking again sent Retry to the MMU while the nozzle was still cold. The wait keeps the MMU loop running, so the second click on the still-active error menu was handled inside the wait.
    
    Show the status screen while heating and ignore the error screen buttons until the hotend is ready.

commit 1296a617f1388e6a1f6c5965e99589949a7228cf
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:50:34 2026 -0600

    🐛 Fix MMU3 status message buffer overflow (#28780)
    
    TryLoadUnloadReporter::DumpToSerial copied the whole status message into a buffer of LCD_WIDTH + 1 bytes. The message can be longer than the display width, such as a long machine name followed by "Ready.", so the copy overwrote the stack, including the return address. Limit the copy to LCD_WIDTH and clear the buffer.

commit b76848a1fa364b240e533bbdb242bf463def1e07
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:37:14 2026 -0600

    🐛 Preheat for MMU menu Load to Nozzle / Unload (#28772)
    
    With a cold nozzle the MMU menu's Load to Nozzle fed the filament while Marlin dropped the extruder moves (MMU3), and Unload was refused and retried forever (MMU2).
    
    Ask to preheat (first preset), show the heating on the Status Screen, then run the action. A click or M108 stops the wait and restores the old target. The CI tests for MMU2 and MMU2S now enable MMU_MENUS so the menu code is built.

commit 74957c5063b89be7935c8cc8cadb9c203c66bd23
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 22:47:46 2026 -0600

    🚸 Less MMU3 serial output (#28779)

commit 4f78d998feea95eeb821201fdf811b8b7e4568c7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 21:21:31 2026 -0600

    🐛 Fix M43 pin direction and protect pins in the simulator (#28777)
    
    * 🐛 Fix M43 pin direction in the simulator
    * ✨ Protect simulator-owned pins from M43

commit 9286875f57eb1cae1c1380d2ad423d7cdd8baed1
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 18:33:39 2026 -0600

    🔧 Move PANELDUE above ExtUI

commit a31874f7ddc1ede037fb2ebfbfa39221b18ad720
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 2 00:31:14 2026 +0000

    [cron] Bump distribution date (2026-11-02)
Ender3-V2-BLTouch-MarlinUI-20261102.bin 1 184.00 KB Membership Required
Changelog
commit 74248a4eb8528af36e8bc905cb6294d33f88132c
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 14:24:14 2026 -0600

    ♻️ Simplify M43 pin loops and add pins debugging unit tests (#28775)
    
    * ♻️ Add PinsDebug::get_pin helpers to simplify M43
    * ✅ Add unit tests for pins debugging

commit ebf7cb88c5f841f64b0c703ee1b446749a251c3d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Remove the PinsDebug compatibility layer

commit 9e2ed52cfd28f782d70c3330841fcf2b288cc764
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Convert STM32 pins debugging to PinsDebug

commit 535286c6ee507ceb64e6e88346ca33ff1253ef66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:12:16 2026 -0500

    ♻️ Convert HC32, GD32 and STM32F1 pins debugging to PinsDebug

commit f58fb0c2738389aad8316670341ff745af00da64
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:11:21 2026 -0500

    ♻️ Convert AVR pins debugging to PinsDebug

commit 26939aded4552f1953dfd26d8ae904ea164de4ce
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:00:09 2026 -0500

    ♻️ Convert ARM, ESP32, RP2040 and Teensy pins debugging to PinsDebug

commit 05060cece5e0ddc74622f2ee0865502943e3b160
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:57:52 2026 -0500

    ♻️ Convert NATIVE_SIM and LINUX pins debugging to PinsDebug

commit bea388c0229d6bb7153d66e15ed0c6e7c50898c5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:46:46 2026 -0500

    ♻️ Add PinsDebugBase to share pins debugging code

commit 8913808dbb80bb3f0b7e167ed99c1d3cf84ae8c4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 01:50:40 2026 -0600

    ♻️ Share pins debugging accessors and print functions (#28773)
    
    * ♻️ Share pin table accessors in pins debugging
    * ♻️ Replace pins debugging print macros with functions
    * 🩹 Parenthesize Teensy isAnalogPin macros

commit 6f961514a4398b987683caf3f54c1963f5ed849a
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sun Nov 1 20:07:49 2026 +1300

    🐛 Recover from a failed ESP32 OTA update (#28770)
    
    onStart pauses the stepper and temperature timers for the flash write. After a failed update they stayed paused: with no temperature readings the watchdog was never refreshed again, so the board reset 4 s after onError re-armed it, and heater PWM was frozen meanwhile. Restart the timers in onError.
    
    The OTA messages used Arduino's Serial, which Marlin never opens on ESP32, so they were dropped. Send them to the host serial port: start, progress every 10%, done, or the failure.

commit a7f13a8073e5ed4a0c94fa43202c2f2d40ce4296
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 00:35:26 2026 +0000

    [cron] Bump distribution date (2026-11-01)

commit 60da5d070ec57dc525642aaf5e632e1938835b84
Author: Media3 <mark304188@hotmail.com>
Date:   Sun Nov 1 07:21:23 2026 +0800

    📝 GD32_MFL: Update MFL Arduino Core repo URL (#28768)
Ender3-V2-BLTouch-20261102.bin 0 192.75 KB Membership Required
Changelog
commit 74248a4eb8528af36e8bc905cb6294d33f88132c
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 14:24:14 2026 -0600

    ♻️ Simplify M43 pin loops and add pins debugging unit tests (#28775)
    
    * ♻️ Add PinsDebug::get_pin helpers to simplify M43
    * ✅ Add unit tests for pins debugging

commit ebf7cb88c5f841f64b0c703ee1b446749a251c3d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Remove the PinsDebug compatibility layer

commit 9e2ed52cfd28f782d70c3330841fcf2b288cc764
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Convert STM32 pins debugging to PinsDebug

commit 535286c6ee507ceb64e6e88346ca33ff1253ef66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:12:16 2026 -0500

    ♻️ Convert HC32, GD32 and STM32F1 pins debugging to PinsDebug

commit f58fb0c2738389aad8316670341ff745af00da64
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:11:21 2026 -0500

    ♻️ Convert AVR pins debugging to PinsDebug

commit 26939aded4552f1953dfd26d8ae904ea164de4ce
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:00:09 2026 -0500

    ♻️ Convert ARM, ESP32, RP2040 and Teensy pins debugging to PinsDebug

commit 05060cece5e0ddc74622f2ee0865502943e3b160
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:57:52 2026 -0500

    ♻️ Convert NATIVE_SIM and LINUX pins debugging to PinsDebug

commit bea388c0229d6bb7153d66e15ed0c6e7c50898c5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:46:46 2026 -0500

    ♻️ Add PinsDebugBase to share pins debugging code

commit 8913808dbb80bb3f0b7e167ed99c1d3cf84ae8c4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 01:50:40 2026 -0600

    ♻️ Share pins debugging accessors and print functions (#28773)
    
    * ♻️ Share pin table accessors in pins debugging
    * ♻️ Replace pins debugging print macros with functions
    * 🩹 Parenthesize Teensy isAnalogPin macros

commit 6f961514a4398b987683caf3f54c1963f5ed849a
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sun Nov 1 20:07:49 2026 +1300

    🐛 Recover from a failed ESP32 OTA update (#28770)
    
    onStart pauses the stepper and temperature timers for the flash write. After a failed update they stayed paused: with no temperature readings the watchdog was never refreshed again, so the board reset 4 s after onError re-armed it, and heater PWM was frozen meanwhile. Restart the timers in onError.
    
    The OTA messages used Arduino's Serial, which Marlin never opens on ESP32, so they were dropped. Send them to the host serial port: start, progress every 10%, done, or the failure.

commit a7f13a8073e5ed4a0c94fa43202c2f2d40ce4296
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 00:35:26 2026 +0000

    [cron] Bump distribution date (2026-11-01)

commit 60da5d070ec57dc525642aaf5e632e1938835b84
Author: Media3 <mark304188@hotmail.com>
Date:   Sun Nov 1 07:21:23 2026 +0800

    📝 GD32_MFL: Update MFL Arduino Core repo URL (#28768)
Ender3-V2-BLTouch-MarlinUI-20261101.bin 1 184.00 KB Membership Required
Changelog
commit 22abaad533b0230397f3ef1bbb4798e3e02c1da0
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 17:13:24 2026 +1300

    ✨ BTT Octopus Pro V1.0.1 with STM32F446ZE (#28763)

commit 522076b552cc76216039f4cb498e3ba0438af16f
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 21:32:55 2026 -0500

    🐛 Accept any MMU3 firmware patch level (#28766)
    
    Marlin required the MMU3 firmware to match exactly 3.0.2, so units flashed with 3.0.3 or 3.0.4 failed the version handshake and were never detected.
    
    Major and minor must still match. Any 3.0.x patch level is accepted, so older units keep working and nobody has to reflash their MMU to match Marlin. MMU_VERSION is now the minimum supported version (3.0.0).

commit bed4c24ce02a494d76659bb4ddd75c9aba6756ab
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 15:01:50 2026 +1300

    🐛 Keep ESP32 M43 off the flash and host serial pins (#28767)
    
    `M43 T` pulses every pin it isn't told to skip. On ESP32 that included GPIO 6-11, the SPI flash, which crashes the chip (watchdog reset), and GPIO 1/3, UART0, after which the host serial port stops working until a reset. Define M43_NEVER_TOUCH for them, as other HALs do for their serial, USB and oscillator pins.

commit 48fb2080c6e13633aed414d34488c762f3aef1d5
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sat Oct 31 00:28:34 2026 +0000

    [cron] Bump distribution date (2026-10-31)
Ender3-V2-BLTouch-20261101.bin 1 192.75 KB Membership Required
Changelog
commit 22abaad533b0230397f3ef1bbb4798e3e02c1da0
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 17:13:24 2026 +1300

    ✨ BTT Octopus Pro V1.0.1 with STM32F446ZE (#28763)

commit 522076b552cc76216039f4cb498e3ba0438af16f
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 21:32:55 2026 -0500

    🐛 Accept any MMU3 firmware patch level (#28766)
    
    Marlin required the MMU3 firmware to match exactly 3.0.2, so units flashed with 3.0.3 or 3.0.4 failed the version handshake and were never detected.
    
    Major and minor must still match. Any 3.0.x patch level is accepted, so older units keep working and nobody has to reflash their MMU to match Marlin. MMU_VERSION is now the minimum supported version (3.0.0).

commit bed4c24ce02a494d76659bb4ddd75c9aba6756ab
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 15:01:50 2026 +1300

    🐛 Keep ESP32 M43 off the flash and host serial pins (#28767)
    
    `M43 T` pulses every pin it isn't told to skip. On ESP32 that included GPIO 6-11, the SPI flash, which crashes the chip (watchdog reset), and GPIO 1/3, UART0, after which the host serial port stops working until a reset. Define M43_NEVER_TOUCH for them, as other HALs do for their serial, USB and oscillator pins.

commit 48fb2080c6e13633aed414d34488c762f3aef1d5
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sat Oct 31 00:28:34 2026 +0000

    [cron] Bump distribution date (2026-10-31)
Ender3-V2-BLTouch-MarlinUI-20261031.bin 1 184.00 KB Membership Required
Changelog
commit 983b6b85497c8e80190b30d986193ddea3298240
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 02:03:25 2026 -0500

    🐛 Fix IDEX tool-change park collision (#28668)
    
    TOOLCHANGE_PARK sent the outgoing IDEX carriage to the shared X change point (e.g., X_MIN_POS), driving X2 into the parked X1 carriage. DUAL_X_CARRIAGE parks the old carriage at its home anyway, so skip the X change point there. For tool_change_prime keep the X change point within the active carriage's limits.
    
    Fixes #26915

commit fd343a611f297c1d028ba1dab56f847253109268
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 01:23:21 2026 -0500

    🐛 G30 require homing (NO_MOTION_BEFORE_HOMING / HOME_AFTER_DEACTIVATE) (#28675)
    
    Fixes #27206

commit 91127cc4f666a7998ed59bd89016d488cc2790a2
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Oct 29 23:35:42 2026 -0500

    🐛 Fix GD32 MFL non-default USART IRQ, Emergency Parser (#28670)
    
    The MFL core only defines the IRQ handler for DEFAULT_HARDWARE_SERIAL (USART0), so any other port (e.g., the DWIN LCD on USART2) used the weak default handler and hung on its first interrupt. Provide handlers for the other ports in use.
    
    Also fix EMERGENCY_PARSER:
    - updateRxDmaBuffer (called by available/read/peek) consumed all RX data, so no host commands were ever received. Now only scans DMA data.
    - A single static instance pointer cross-wired the parser to the last port begun. Use per-USART callbacks.
    
    Fixes #28010

commit 0173390e1ed546422642f6eee42982e68991072a
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 00:35:11 2026 +0000

    [cron] Bump distribution date (2026-10-30)
Ender3-V2-BLTouch-20261031.bin 1 192.75 KB Membership Required
Changelog
commit 983b6b85497c8e80190b30d986193ddea3298240
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 02:03:25 2026 -0500

    🐛 Fix IDEX tool-change park collision (#28668)
    
    TOOLCHANGE_PARK sent the outgoing IDEX carriage to the shared X change point (e.g., X_MIN_POS), driving X2 into the parked X1 carriage. DUAL_X_CARRIAGE parks the old carriage at its home anyway, so skip the X change point there. For tool_change_prime keep the X change point within the active carriage's limits.
    
    Fixes #26915

commit fd343a611f297c1d028ba1dab56f847253109268
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 01:23:21 2026 -0500

    🐛 G30 require homing (NO_MOTION_BEFORE_HOMING / HOME_AFTER_DEACTIVATE) (#28675)
    
    Fixes #27206

commit 91127cc4f666a7998ed59bd89016d488cc2790a2
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Oct 29 23:35:42 2026 -0500

    🐛 Fix GD32 MFL non-default USART IRQ, Emergency Parser (#28670)
    
    The MFL core only defines the IRQ handler for DEFAULT_HARDWARE_SERIAL (USART0), so any other port (e.g., the DWIN LCD on USART2) used the weak default handler and hung on its first interrupt. Provide handlers for the other ports in use.
    
    Also fix EMERGENCY_PARSER:
    - updateRxDmaBuffer (called by available/read/peek) consumed all RX data, so no host commands were ever received. Now only scans DMA data.
    - A single static instance pointer cross-wired the parser to the last port begun. Use per-USART callbacks.
    
    Fixes #28010

commit 0173390e1ed546422642f6eee42982e68991072a
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 00:35:11 2026 +0000

    [cron] Bump distribution date (2026-10-30)
Ender3-V2-BLTouch-MarlinUI-20261030.bin 1 183.99 KB Membership Required
Changelog
commit 7bd58b7c3662d34223f93e2a53d88e84e34d9b08
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 16:28:53 2026 +1300

    🔧 Separate MKS WiFi module (#28562)

commit 99fd436361b29f2224a0a013679fee60e219639c
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 22:10:03 2026 -0500

    🧑‍💻 did_pause_print -> paused_for_filament_change

commit 3ef177178138ca076734e4539e925955d20a5ed7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 21:56:22 2026 -0500

    🐛 Fix DGUS pause/runout resume hang (#28667)
    
    PAUSE_MESSAGE_OPTION (Purge More / Resume) waits on pause_menu_response, but the DGUS UIs have no such choice and never set it, so resume_print spun forever with the nozzle parked. Auto-select Resume instead.
    
    Fixes #26800

commit c544463b5615e957c67a14ead673ec6575fd495e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 15:55:40 2026 +1300

    🚸 Use big edit font for label only when it fits (#28708)
    
    Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

commit f9b34aa14df2c3ac0e2f71d849d06b84d3b6c5f5
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 15:54:26 2026 +1300

    🐛 Fix oversized Chinese DOGM font (#28686)
    
    The Chinese font data regenerated in #28624 came from a 16 px WenQuanYi font. Its glyphs reach 14 px above the baseline, so on 128x64 displays they overflow the 12 px menu line and the selection frame.
    
    genallfont.sh asks for "wenquanyi_12pt" for zh_*, but uxggenpages.sh only looks that name up through FN_FONT_BASE, so it never resolved and the data was always built from marlin-6x12-3.bdf, whose CJK glyphs are 11 px tall.  Today's WenQuanYi packages name the 16 px font wenquanyi_12pt, so any setup that did find it got the wrong size.
    
    Drop the zh_* case so Chinese is built from marlin-6x12-3.bdf explicitly, and regenerate zh_CN and zh_TW. marlin-6x12-3.bdf covers every character both languages use.

commit 61d71f28f074d564ab01dd4f835a9ec64849a8c1
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 21:39:04 2026 -0500

    🐛 Fix POLAR spin to 0° at center (#28665)
    
    At X0 Y0 ATAN2(0,0) returns 0, so every move ending at (or starting
    from) the center rotated the turntable to theta 0, adding a spurious
    half-turn (e.g., X-1 -> X0 -> X-1). Keep the current angle at the center.
    
    Fixes #25330

commit 615c61dc7c0ff8f2a79778240399c25d1d19a568
Author: bobkaren1975-spec <bobkaren1975@gmail.com>
Date:   Wed Oct 28 21:25:41 2026 -0400

    ⚡️ Optimize RS485 commands (#28760)
    
    Co-authored-by: Robert <robert@example.com>
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

commit 2d447ab0cffae5199d32696a1f2d3715336aa581
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 19:36:37 2026 -0500

    🎨 Fix some MMU3 comments

commit 6217fe38b9436277a47da6d5277ff2c2b2cc5f4c
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Oct 29 00:34:18 2026 +0000

    [cron] Bump distribution date (2026-10-29)

commit dff537b7ba923bc1bc0290999458c51e10ccd529
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 18:26:15 2026 -0500

    ✨ Compose files, skills for Mainsail / OctoPrint in Docker (#28759)
Ender3-V2-BLTouch-20261030.bin 1 192.75 KB Membership Required
Changelog
commit 7bd58b7c3662d34223f93e2a53d88e84e34d9b08
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 16:28:53 2026 +1300

    🔧 Separate MKS WiFi module (#28562)

commit 99fd436361b29f2224a0a013679fee60e219639c
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 22:10:03 2026 -0500

    🧑‍💻 did_pause_print -> paused_for_filament_change

commit 3ef177178138ca076734e4539e925955d20a5ed7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 21:56:22 2026 -0500

    🐛 Fix DGUS pause/runout resume hang (#28667)
    
    PAUSE_MESSAGE_OPTION (Purge More / Resume) waits on pause_menu_response, but the DGUS UIs have no such choice and never set it, so resume_print spun forever with the nozzle parked. Auto-select Resume instead.
    
    Fixes #26800

commit c544463b5615e957c67a14ead673ec6575fd495e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 15:55:40 2026 +1300

    🚸 Use big edit font for label only when it fits (#28708)
    
    Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

commit f9b34aa14df2c3ac0e2f71d849d06b84d3b6c5f5
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Oct 29 15:54:26 2026 +1300

    🐛 Fix oversized Chinese DOGM font (#28686)
    
    The Chinese font data regenerated in #28624 came from a 16 px WenQuanYi font. Its glyphs reach 14 px above the baseline, so on 128x64 displays they overflow the 12 px menu line and the selection frame.
    
    genallfont.sh asks for "wenquanyi_12pt" for zh_*, but uxggenpages.sh only looks that name up through FN_FONT_BASE, so it never resolved and the data was always built from marlin-6x12-3.bdf, whose CJK glyphs are 11 px tall.  Today's WenQuanYi packages name the 16 px font wenquanyi_12pt, so any setup that did find it got the wrong size.
    
    Drop the zh_* case so Chinese is built from marlin-6x12-3.bdf explicitly, and regenerate zh_CN and zh_TW. marlin-6x12-3.bdf covers every character both languages use.

commit 61d71f28f074d564ab01dd4f835a9ec64849a8c1
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 21:39:04 2026 -0500

    🐛 Fix POLAR spin to 0° at center (#28665)
    
    At X0 Y0 ATAN2(0,0) returns 0, so every move ending at (or starting
    from) the center rotated the turntable to theta 0, adding a spurious
    half-turn (e.g., X-1 -> X0 -> X-1). Keep the current angle at the center.
    
    Fixes #25330

commit 615c61dc7c0ff8f2a79778240399c25d1d19a568
Author: bobkaren1975-spec <bobkaren1975@gmail.com>
Date:   Wed Oct 28 21:25:41 2026 -0400

    ⚡️ Optimize RS485 commands (#28760)
    
    Co-authored-by: Robert <robert@example.com>
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

commit 2d447ab0cffae5199d32696a1f2d3715336aa581
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 19:36:37 2026 -0500

    🎨 Fix some MMU3 comments

commit 6217fe38b9436277a47da6d5277ff2c2b2cc5f4c
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Oct 29 00:34:18 2026 +0000

    [cron] Bump distribution date (2026-10-29)

commit dff537b7ba923bc1bc0290999458c51e10ccd529
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Oct 28 18:26:15 2026 -0500

    ✨ Compose files, skills for Mainsail / OctoPrint in Docker (#28759)
printer.png 2 57.06 KB Membership Required