From 7e9166976f35657abb18a2333cf094745b5cc916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sat, 27 Aug 2022 15:31:57 +0000 Subject: [PATCH] PFW-1386 Implement 'L' parameter for M701 It is only used when the MMU is disabled. With the MMU we use a defined ramming sequence. When the MMU is disabled I borrowed the usages from Marlin 2. The L parameter only defines the length for the "fast" load length. Default value is 70mm, same as M600 --- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 14 +++++++++----- Firmware/ultralcd.cpp | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 810203ea8..4e8246c3e 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -464,7 +464,7 @@ void gcode_M114(); #if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1))))) void gcode_M123(); #endif //FANCHECK and TACH_0 and TACH_1 -void gcode_M701(uint8_t mmuSlotIndex); +void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex); #define UVLO !(PINE & (1<<4)) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5377cb542..1f696f467 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3668,7 +3668,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float custom_message_type = CustomMsg::Status; } -void gcode_M701(uint8_t mmuSlotIndex){ +void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex){ printf_P(PSTR("gcode_M701 begin\n")); FSensorBlockRunout fsBlockRunout; @@ -3684,10 +3684,10 @@ void gcode_M701(uint8_t mmuSlotIndex){ const int feed_mm_before_raising = 30; static_assert(feed_mm_before_raising <= FILAMENTCHANGE_FIRSTFEED); - lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT)); + lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT)); current_position[E_AXIS] += FILAMENTCHANGE_FIRSTFEED - feed_mm_before_raising; plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST); //fast sequence - st_synchronize(); + st_synchronize(); raise_z_above(MIN_Z_FOR_LOAD, false); current_position[E_AXIS] += feed_mm_before_raising; @@ -8586,6 +8586,7 @@ Sigma_Exit: case 701: { uint8_t mmuSlotIndex = 0xffU; + float fastLoadLength = FILAMENTCHANGE_FIRSTFEED; // Only used without MMU if( MMU2::mmu2.Enabled() ) { if( code_seen('P') || code_seen('T') ) { @@ -8593,7 +8594,10 @@ Sigma_Exit: } } - // TODO: Implement L parameter + if (code_seen('L')) + { + fastLoadLength = code_value(); + } enable_z(); if (code_seen('Z')) @@ -8605,7 +8609,7 @@ Sigma_Exit: } disable_z(); - gcode_M701(mmuSlotIndex); + gcode_M701(fastLoadLength, mmuSlotIndex); } break; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 9c6a6bcf6..ae05e09e4 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3958,7 +3958,7 @@ static void lcd_wizard_load() { lcd_clear(); lcd_puts_at_P(0, 2, _T(MSG_LOADING_FILAMENT)); loading_flag = true; - gcode_M701(0); + gcode_M701(FILAMENTCHANGE_FIRSTFEED, 0); } bool lcd_autoDepleteEnabled()