mirror of
https://github.com/Klipper4FlashForge/firmware.git
synced 2026-10-22 05:12:16 -05:00
klipper-toolchanger's ASSIGN_TOOL TOOL=T<n> N=<number>, so a file sliced for T0/T1 prints when those filaments sit in other heads, without re-slicing. Flat rather than upstream's mux command: the `tool T<n>` objects here are read-only status views with no command surface, and on the wire the two spellings are the same, so a UI sending upstream's reaches this. Assigning displaces, as upstream does -- the tool that held the number is left unnumbered rather than handed the assigner's old one, because moving a second tool is not what was typed. The response says who was displaced and that TOOL=T<n> still reaches them, since that is the surprising half. RESET=1 has no upstream equivalent and is needed here: the map is runtime only, so a restart is otherwise the only way back. Two guards, neither upstream's: mid-toolchange, and mid-print unpaused -- there the next T<n> would go to a different nozzle, with different offsets, in the middle of an object. Paused is allowed, being exactly when somebody swaps a spool. RESET is allowed either way, or the way out of a bad map would be gated behind the state that makes one dangerous. TOOLCHANGE_STATUS prints the map directly under the mounted tool, identity or not, because everything below it is printed in heads and a reader who does not know the map is misreading all of it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HNAW5eNbQm4uqGgE6qf9yj