From 1f3877b221628c0db8383f0a28549554112630b0 Mon Sep 17 00:00:00 2001
From: Marek Bel <marek.bel@posta.cz>
Date: Wed, 15 May 2019 16:27:24 +0200
Subject: [PATCH] Extract duplicate code into function. Saves 4B of flash.

---
 Firmware/Marlin.h        |  1 +
 Firmware/Marlin_main.cpp | 11 +++++++++--
 Firmware/mmu.cpp         |  2 +-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h
index 08f7b4f2..b82856f8 100644
--- a/Firmware/Marlin.h
+++ b/Firmware/Marlin.h
@@ -498,3 +498,4 @@ void M600_wait_for_user(float HotendTempBckp);
 void M600_check_state(float nozzle_temp);
 void load_filament_final_feed();
 void marlin_wait_for_click();
+void marlin_rise_z(void);
diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index e23ca37e..44489085 100644
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -3123,7 +3123,14 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
 }
 
 
-
+//! @brief Rise Z if too low to avoid blob/jam before filament loading
+//!
+//! It doesn't plan_buffer_line(), as it expects plan_buffer_line() to be called after
+//! during extruding (loading) filament.
+void marlin_rise_z(void)
+{
+    if (current_position[Z_AXIS] < 20) current_position[Z_AXIS] += 30;
+}
 
 void gcode_M701()
 {
@@ -3148,7 +3155,7 @@ void gcode_M701()
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence
 		st_synchronize();
 
-		if (current_position[Z_AXIS] < 20) current_position[Z_AXIS] += 30;
+		marlin_rise_z();
 		current_position[E_AXIS] += 30;
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence
 		
diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp
index b7746f2d..5a8ef817 100644
--- a/Firmware/mmu.cpp
+++ b/Firmware/mmu.cpp
@@ -1367,7 +1367,7 @@ bFilamentAction=false;                            // NOT in "mmu_load_to_nozzle_
 	manage_response(true, true, MMU_TCODE_MOVE);
 	mmu_continue_loading(false);
 	mmu_extruder = tmp_extruder; //filament change is finished
-	if (current_position[Z_AXIS] < 20) current_position[Z_AXIS] += 30;
+	marlin_rise_z();
 	mmu_load_to_nozzle();
 	load_filament_final_feed();
 	st_synchronize();