From 63b4abb66da51f4e42f1eb91a64bc9f8341e0155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 10 Sep 2022 18:13:58 +0000 Subject: [PATCH] PFW-1362 SpoolJoin needs to known what the previous slot was --- Firmware/SpoolJoin.cpp | 7 ++++++- Firmware/SpoolJoin.h | 4 ++++ Firmware/mmu2.cpp | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Firmware/SpoolJoin.cpp b/Firmware/SpoolJoin.cpp index a241a05c1..81069ce68 100644 --- a/Firmware/SpoolJoin.cpp +++ b/Firmware/SpoolJoin.cpp @@ -58,12 +58,17 @@ uint8_t SpoolJoin::isSpoolJoinEnabled() } } +void SpoolJoin::setSlot(uint8_t slot) +{ + currentMMUSlot = slot; +} uint8_t SpoolJoin::nextSlot() { SERIAL_ECHOPGM("SpoolJoin: Changing slot from "); SERIAL_ECHO((int)currentMMUSlot); - if (currentMMUSlot == 4) currentMMUSlot = 0; + + if (currentMMUSlot >= 4) currentMMUSlot = 0; else currentMMUSlot++; SERIAL_ECHOPGM(" to "); diff --git a/Firmware/SpoolJoin.h b/Firmware/SpoolJoin.h index 4117b9b9e..f3835dee5 100644 --- a/Firmware/SpoolJoin.h +++ b/Firmware/SpoolJoin.h @@ -33,6 +33,10 @@ public: /// @brief Check if SpoolJoin is enabled uint8_t isSpoolJoinEnabled(); + /// @brief Update the saved MMU slot number so SpoolJoin can determine the next slot to use + /// @param slot number of the slot to set + void setSlot(uint8_t slot); + /// @brief Fetch the next slot number should count from 0 to 4. /// When filament slot 4 is depleted, the next slot should be 0. /// @returns the next slot, ranges from 0 to 4 diff --git a/Firmware/mmu2.cpp b/Firmware/mmu2.cpp index 90df33b72..d8bace241 100644 --- a/Firmware/mmu2.cpp +++ b/Firmware/mmu2.cpp @@ -307,6 +307,7 @@ bool MMU2::tool_change(uint8_t index) { plan_set_e_position(current_position[E_AXIS]); extruder = index; //filament change is finished + SpoolJoin::spooljoin.setSlot(index); // @@TODO really report onto the serial? May be for the Octoprint? Not important now // SERIAL_ECHO_START(); @@ -339,6 +340,7 @@ bool MMU2::tool_change(char code, uint8_t slot) { logic.ToolChange(slot); manage_response(false, false); extruder = slot; + SpoolJoin::spooljoin.setSlot(slot); set_extrude_min_temp(EXTRUDE_MINTEMP); } break; @@ -485,6 +487,7 @@ bool MMU2::load_filament_to_nozzle(uint8_t index) { execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, sizeof(load_to_nozzle_sequence) / sizeof (load_to_nozzle_sequence[0])); extruder = index; + SpoolJoin::spooljoin.setSlot(index); Sound_MakeSound(e_SOUND_TYPE_StandardConfirm); }