From 815b68678dbf5a1025aeddc6e1fa404c1836bb6d Mon Sep 17 00:00:00 2001 From: Panayiotis-git <32783577+Panayiotis-git@users.noreply.github.com> Date: Sat, 21 Dec 2019 19:27:42 +0200 Subject: [PATCH] M600 - Show filament name at the Insert filament prompt --- Firmware/Marlin.h | 6 +++--- Firmware/Marlin_main.cpp | 35 +++++++++++++++++++++++------------ Firmware/ultralcd.cpp | 16 ++++++++++++---- Firmware/ultralcd.h | 4 ++-- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 809fd9987..deb80b963 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -451,10 +451,10 @@ void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex); #define UVLO !(PINE & (1<<4)) -void M600_load_filament(); -void M600_load_filament_movements(); +void M600_load_filament(const char* filament_name); +void M600_load_filament_movements(const char* filament_name); void M600_wait_for_user(); -bool M600_check_state_and_repeat(); +bool M600_check_state_and_repeat(const char* filament_name); void load_filament_final_feed(); void marlin_wait_for_click(); float raise_z(float delta); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index b3eaf05b9..6b11a2f50 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3387,7 +3387,7 @@ static void mmu_M600_load_filament(bool automatic) { st_synchronize(); } -static void gcode_M600(const bool automatic, const float x_position, const float y_position, const float z_shift, const float e_shift, const float e_shift_late) { +static void gcode_M600(const bool automatic, const float x_position, const float y_position, const float z_shift, const float e_shift, const float e_shift_late, const char* filament_name) { st_synchronize(); // When using an MMU, save the currently use slot number @@ -3450,7 +3450,7 @@ static void gcode_M600(const bool automatic, const float x_position, const float st_synchronize(); lcd_show_fullscreen_message_and_wait_P(_T(MSG_CHECK_IDLER)); } - M600_load_filament(); + M600_load_filament(filament_name); } else // MMU is enabled { @@ -3458,7 +3458,7 @@ static void gcode_M600(const bool automatic, const float x_position, const float mmu_M600_load_filament(automatic); } if (!automatic) - repeat = M600_check_state_and_repeat(); + repeat = M600_check_state_and_repeat(filament_name); } while (repeat); @@ -7641,9 +7641,10 @@ Sigma_Exit: - `Z` - relative lift Z, default MIN_Z_FOR_SWAP. - `E` - initial retract, default FILAMENTCHANGE_FIRSTRETRACT - `L` - later retract distance for removal, default FILAMENTCHANGE_FINALRETRACT + - `C` - filament name to show during loading - `AUTO` - Automatically (only with MMU) */ - case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] + case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] C"[filament name to show during loading]" { st_synchronize(); @@ -7669,10 +7670,20 @@ Sigma_Exit: if (code_seen('X')) x_position = code_value(); if (code_seen('Y')) y_position = code_value(); + // Filament name to show during the loading + char filament_name[LCD_WIDTH + 1] = ""; + if (code_seen('C')) { + unquoted_string str = unquoted_string(strchr_pointer); + if (str.WasFound()) { + const uint8_t len = min(str.GetLength(), LCD_WIDTH); + memcpy(filament_name, str.GetUnquotedString(), len); + } + } + if (MMU2::mmu2.Enabled() && code_seen_P(PSTR("AUTO"))) automatic = true; - gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late); + gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late, filament_name); // From this point forward, power panic should not use // the partial backup in RAM since the extruder is no @@ -10899,7 +10910,7 @@ void load_filament_final_feed() } //! @brief Wait for user to check the state -bool M600_check_state_and_repeat() +bool M600_check_state_and_repeat(const char* filament_name) { uint8_t lcd_change_filament_state = 10; while (lcd_change_filament_state != 0 && lcd_change_filament_state != 3) @@ -10923,7 +10934,7 @@ bool M600_check_state_and_repeat() // After user clicks knob, MMU will load the filament mmu_M600_load_filament(false); } else { - M600_load_filament_movements(); + M600_load_filament_movements(filament_name); } break; @@ -11001,18 +11012,18 @@ void M600_wait_for_user() { sound_wait_for_user_reset(); } -void M600_load_filament_movements() +void M600_load_filament_movements(const char* filament_name) { current_position[E_AXIS]+= FILAMENTCHANGE_FIRSTFEED; plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST); load_filament_final_feed(); - lcd_loading_filament(); + lcd_loading_filament(filament_name); st_synchronize(); } -void M600_load_filament() { +void M600_load_filament(const char* filament_name) { //load filament for single material and MMU - lcd_wait_interact(); + lcd_wait_interact(filament_name); KEEPALIVE_STATE(PAUSED_FOR_USER); @@ -11029,7 +11040,7 @@ void M600_load_filament() { } KEEPALIVE_STATE(IN_HANDLER); - M600_load_filament_movements(); + M600_load_filament_movements(filament_name); Sound_MakeCustom(50,1000,false); } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 629c8801e..bf6027ada 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2141,16 +2141,21 @@ static void lcd_unLoadFilament() preheat_or_continue(FilamentAction::UnLoad); } -void lcd_wait_interact() { +void lcd_wait_interact(const char* filament_name) { lcd_clear(); lcd_puts_at_P(0, 0, _T(MSG_INSERT_FILAMENT)); + lcd_set_cursor(0, 1); + if (filament_name[0]) { + lcd_print(filament_name); + lcd_set_cursor(0, 2); + } #ifdef FILAMENT_SENSOR if (!fsensor.getAutoLoadEnabled()) #endif //FILAMENT_SENSOR { - lcd_puts_at_P(0, 1, _T(MSG_PRESS)); + lcd_puts_P(_T(MSG_PRESS)); } } @@ -2187,12 +2192,15 @@ void lcd_loading_color() { } -void lcd_loading_filament() { - +void lcd_loading_filament(const char* filament_name) { lcd_clear(); lcd_puts_at_P(0, 0, _T(MSG_LOADING_FILAMENT)); + if (filament_name[0]) { + lcd_set_cursor(0, 1); + lcd_print(filament_name); + } lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT)); uint16_t slow_seq_time = (FILAMENTCHANGE_FINALFEED * 1000ul) / FILAMENTCHANGE_EFEED_FINAL; uint16_t fast_seq_time = (FILAMENTCHANGE_FIRSTFEED * 1000ul) / FILAMENTCHANGE_EFEED_FIRST; diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 57bf4a557..4ac7c0b62 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -49,8 +49,8 @@ void lcd_reset_alert_level(); uint8_t lcd_alright(); void show_preheat_nozzle_warning(); -void lcd_wait_interact(); -void lcd_loading_filament(); +void lcd_wait_interact(const char* filament_name); +void lcd_loading_filament(const char* filament_name); void lcd_change_success(); void lcd_loading_color(); void lcd_sdcard_stop();