From cbc7f22ad92597258dceff26b0e59ebd5f71c85c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 20 Jul 2016 10:30:10 -0700 Subject: [PATCH] Implement DUAL_NOZZLE_DUPLICATION_MODE --- Marlin/Marlin.h | 2 +- Marlin/Marlin_main.cpp | 35 ++++++++++++++++++++++++++--------- Marlin/language.h | 1 + Marlin/stepper_indirection.h | 2 +- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 4a07513b0..271948969 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -134,7 +134,7 @@ void idle( void manage_inactivity(bool ignore_stepper_queue = false); -#if ENABLED(DUAL_X_CARRIAGE) +#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) extern bool extruder_duplication_enabled; #endif diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 3e2c641ac..2966162dc 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1392,6 +1392,10 @@ XYZ_CONSTS_FROM_CONFIG(float, max_length, MAX_LENGTH); XYZ_CONSTS_FROM_CONFIG(float, home_bump_mm, HOME_BUMP_MM); XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR); +#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) + bool extruder_duplication_enabled = false; // Used in Dual X mode 2 +#endif + #if ENABLED(DUAL_X_CARRIAGE) #define DXC_FULL_CONTROL_MODE 0 @@ -1423,7 +1427,6 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR); static millis_t delayed_move_time = 0; // used in mode 1 static float duplicate_extruder_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2 static float duplicate_extruder_temp_offset = 0; // used in mode 2 - bool extruder_duplication_enabled = false; // used in mode 2 #endif //DUAL_X_CARRIAGE @@ -2820,12 +2823,13 @@ inline void gcode_G4() { current_position[X_AXIS] = current_position[Y_AXIS] = 0.0; sync_plan_position(); - #if ENABLED(DUAL_X_CARRIAGE) - int x_axis_home_dir = x_home_dir(active_extruder); - extruder_duplication_enabled = false; - #else - int x_axis_home_dir = home_dir(X_AXIS); - #endif + int x_axis_home_dir = + #if ENABLED(DUAL_X_CARRIAGE) + x_home_dir(active_extruder) + #else + home_dir(X_AXIS) + #endif + ; float mlx = max_length(X_AXIS), mly = max_length(Y_AXIS), @@ -2878,6 +2882,10 @@ inline void gcode_G28() { tool_change(0, 0, true); #endif + #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) + extruder_duplication_enabled = false; + #endif + /** * For mesh bed leveling deactivate the mesh calculations, will be turned * on again when homing all axis @@ -2996,7 +3004,6 @@ inline void gcode_G28() { if (home_all_axis || homeX) { #if ENABLED(DUAL_X_CARRIAGE) int tmp_extruder = active_extruder; - extruder_duplication_enabled = false; active_extruder = !active_extruder; HOMEAXIS(X); inactive_extruder_x_pos = current_position[X_AXIS]; @@ -6473,7 +6480,17 @@ inline void gcode_M503() { delayed_move_time = 0; } -#endif // DUAL_X_CARRIAGE +#elif ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) + + inline void gcode_M605() { + stepper.synchronize(); + extruder_duplication_enabled = code_seen('S') && code_value_int() == 2; + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF); + SERIAL_EOL; + } + +#endif // M605 #if ENABLED(LIN_ADVANCE) /** diff --git a/Marlin/language.h b/Marlin/language.h index 093368333..4e53c4890 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -159,6 +159,7 @@ #define MSG_ENDSTOP_HIT "TRIGGERED" #define MSG_ENDSTOP_OPEN "open" #define MSG_HOTEND_OFFSET "Hotend offsets:" +#define MSG_DUPLICATION_MODE "Duplication mode: " #define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir " #define MSG_SD_INIT_FAIL "SD init fail" diff --git a/Marlin/stepper_indirection.h b/Marlin/stepper_indirection.h index 08d33b176..b14dde795 100644 --- a/Marlin/stepper_indirection.h +++ b/Marlin/stepper_indirection.h @@ -195,7 +195,7 @@ #define NORM_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } } #define REV_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(INVERT_E2_DIR); } } #elif EXTRUDERS > 1 - #if DISABLED(DUAL_X_CARRIAGE) + #if DISABLED(DUAL_X_CARRIAGE) && DISABLED(DUAL_NOZZLE_DUPLICATION_MODE) #define E_STEP_WRITE(v) { if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } } #define NORM_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } } #define REV_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }