From 87875e0de8fe2107642dce3cad0928504ed58d74 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <github@thinkyhead.com>
Date: Sun, 19 Apr 2020 02:01:30 -0500
Subject: [PATCH] Fix mixing with "unload all" compile
---
Marlin/src/feature/fwretract.cpp | 27 +++++---------------
Marlin/src/feature/mixing.cpp | 2 +-
Marlin/src/feature/mixing.h | 12 +++------
Marlin/src/gcode/feature/pause/M701_M702.cpp | 10 +++++---
Marlin/src/inc/Conditionals_adv.h | 4 +++
Marlin/src/module/planner.cpp | 9 +++----
6 files changed, 24 insertions(+), 40 deletions(-)
diff --git a/Marlin/src/feature/fwretract.cpp b/Marlin/src/feature/fwretract.cpp
index 7d756ac6d0..122e9ae4f7 100644
--- a/Marlin/src/feature/fwretract.cpp
+++ b/Marlin/src/feature/fwretract.cpp
@@ -95,7 +95,7 @@ void FWRetract::reset() {
*/
void FWRetract::retract(const bool retracting
#if EXTRUDERS > 1
- , bool swapping /* =false */
+ , bool swapping/*=false*/
#endif
) {
// Prevent two retracts or recovers in a row
@@ -128,12 +128,8 @@ void FWRetract::retract(const bool retracting
SERIAL_ECHOLNPAIR("current_hop ", current_hop);
//*/
- const float base_retract = (
- (swapping ? settings.swap_retract_length : settings.retract_length)
- #if ENABLED(RETRACT_SYNC_MIXING)
- * (MIXING_STEPPERS)
- #endif
- );
+ const float base_retract = TERN(RETRACT_SYNC_MIXING, MIXING_STEPPERS, 1)
+ * (swapping ? settings.swap_retract_length : settings.retract_length);
// The current position will be the destination for E and Z moves
destination = current_position;
@@ -148,10 +144,7 @@ void FWRetract::retract(const bool retracting
// Retract by moving from a faux E position back to the current E position
current_retract[active_extruder] = base_retract;
prepare_internal_move_to_destination( // set current to destination
- settings.retract_feedrate_mm_s
- #if ENABLED(RETRACT_SYNC_MIXING)
- * (MIXING_STEPPERS)
- #endif
+ settings.retract_feedrate_mm_s * TERN(RETRACT_SYNC_MIXING, MIXING_STEPPERS, 1)
);
// Is a Z hop set, and has the hop not yet been done?
@@ -177,18 +170,12 @@ void FWRetract::retract(const bool retracting
current_retract[active_extruder] = 0;
- const feedRate_t fr_mm_s = (
- (swapping ? settings.swap_retract_recover_feedrate_mm_s : settings.retract_recover_feedrate_mm_s)
- #if ENABLED(RETRACT_SYNC_MIXING)
- * (MIXING_STEPPERS)
- #endif
- );
+ const feedRate_t fr_mm_s = TERN(RETRACT_SYNC_MIXING, MIXING_STEPPERS, 1)
+ * (swapping ? settings.swap_retract_recover_feedrate_mm_s : settings.retract_recover_feedrate_mm_s);
prepare_internal_move_to_destination(fr_mm_s); // Recover E, set_current_to_destination
}
- #if ENABLED(RETRACT_SYNC_MIXING)
- mixer.T(old_mixing_tool); // Restore original mixing tool
- #endif
+ TERN_(RETRACT_SYNC_MIXING, mixer.T(old_mixing_tool)); // Restore original mixing tool
retracted[active_extruder] = retracting; // Active extruder now retracted / recovered
diff --git a/Marlin/src/feature/mixing.cpp b/Marlin/src/feature/mixing.cpp
index d6ae2bb629..fe0f19d13e 100644
--- a/Marlin/src/feature/mixing.cpp
+++ b/Marlin/src/feature/mixing.cpp
@@ -115,7 +115,7 @@ void Mixer::init() {
reset_vtools();
- #if ENABLED(RETRACT_SYNC_MIXING)
+ #if HAS_MIXER_SYNC_CHANNEL
// AUTORETRACT_TOOL gets the same amount of all filaments
MIXER_STEPPER_LOOP(i)
color[MIXER_AUTORETRACT_TOOL][i] = COLOR_A_MASK;
diff --git a/Marlin/src/feature/mixing.h b/Marlin/src/feature/mixing.h
index da5240995c..156870b659 100644
--- a/Marlin/src/feature/mixing.h
+++ b/Marlin/src/feature/mixing.h
@@ -52,25 +52,19 @@ enum MixTool {
LAST_USER_VIRTUAL_TOOL = MIXING_VIRTUAL_TOOLS - 1,
NR_USER_VIRTUAL_TOOLS,
MIXER_DIRECT_SET_TOOL = NR_USER_VIRTUAL_TOOLS,
- #if ENABLED(RETRACT_SYNC_MIXING)
+ #if HAS_MIXER_SYNC_CHANNEL
MIXER_AUTORETRACT_TOOL,
#endif
NR_MIXING_VIRTUAL_TOOLS
};
-#if ENABLED(RETRACT_SYNC_MIXING)
- #define MAX_VTOOLS 254
-#else
- #define MAX_VTOOLS 255
-#endif
+#define MAX_VTOOLS TERN(HAS_MIXER_SYNC_CHANNEL, 254, 255)
static_assert(NR_MIXING_VIRTUAL_TOOLS <= MAX_VTOOLS, "MIXING_VIRTUAL_TOOLS must be <= " STRINGIFY(MAX_VTOOLS) "!");
-#define MIXER_STEPPER_LOOP(VAR) \
- for (uint_fast8_t VAR = 0; VAR < MIXING_STEPPERS; VAR++)
-
#define MIXER_BLOCK_FIELD mixer_comp_t b_color[MIXING_STEPPERS]
#define MIXER_POPULATE_BLOCK() mixer.populate_block(block->b_color)
#define MIXER_STEPPER_SETUP() mixer.stepper_setup(current_block->b_color)
+#define MIXER_STEPPER_LOOP(VAR) for (uint_fast8_t VAR = 0; VAR < MIXING_STEPPERS; VAR++)
#if ENABLED(GRADIENT_MIX)
diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp
index aa3c3c4c30..9f89f2dab7 100644
--- a/Marlin/src/gcode/feature/pause/M701_M702.cpp
+++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp
@@ -163,16 +163,18 @@ void GcodeSuite::M702() {
#if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
float mix_multiplier = 1.0;
- if (!parser.seenval('T')) {
+ const bool seenT = parser.seenval('T');
+ if (!seenT) {
mixer.T(MIXER_AUTORETRACT_TOOL);
mix_multiplier = MIXING_STEPPERS;
}
- else
+ #else
+ constexpr bool seenT = true;
#endif
- {
+
+ if (seenT) {
const int8_t target_e_stepper = get_target_e_stepper_from_command();
if (target_e_stepper < 0) return;
-
mixer.T(MIXER_DIRECT_SET_TOOL);
MIXER_STEPPER_LOOP(i) mixer.set_collector(i, (i == (uint8_t)target_e_stepper) ? 1.0 : 0.0);
mixer.normalize();
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index 66c3f5b632..56c7ce7463 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -56,6 +56,10 @@
#undef SHOW_TEMP_ADC_VALUES
#endif
+#if ENABLED(MIXING_EXTRUDER) && (ENABLED(RETRACT_SYNC_MIXING) || BOTH(FILAMENT_LOAD_UNLOAD_GCODES, FILAMENT_UNLOAD_ALL_EXTRUDERS))
+ #define HAS_MIXER_SYNC_CHANNEL 1
+#endif
+
#if EITHER(DUAL_X_CARRIAGE, MULTI_NOZZLE_DUPLICATION)
#define HAS_DUPLICATION_MODE 1
#endif
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index f55ef37bc4..b7e2681141 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -2133,17 +2133,14 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#if EXTRUDERS
{
current_speed.e = steps_dist_mm.e * inverse_secs;
- #if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING)
+ #if HAS_MIXER_SYNC_CHANNEL
// Move all mixing extruders at the specified rate
if (mixer.get_current_vtool() == MIXER_AUTORETRACT_TOOL)
current_speed.e *= MIXING_STEPPERS;
#endif
const feedRate_t cs = ABS(current_speed.e),
- max_fr = (settings.max_feedrate_mm_s[E_AXIS_N(extruder)]
- #if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING)
- * MIXING_STEPPERS
- #endif
- );
+ max_fr = settings.max_feedrate_mm_s[E_AXIS_N(extruder)]
+ * TERN(HAS_MIXER_SYNC_CHANNEL, MIXING_STEPPERS, 1);
if (cs > max_fr) NOMORE(speed_factor, max_fr / cs);
}
#endif
--
GitLab