From 235803bc2a2d46bc34dd4a426c68e2ac23c30963 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 6 Mar 2018 19:47:27 +0100 Subject: [PATCH 01/27] Move encoder stack to separate class MenuStack. Add menu record to MenuStack. It was needed to add menuFunc_t menu to stack, as in some places in menu, it is impossible to hardcode parent menu. Example: lcd_babystep_z can be invoked both from main_menu() and settings_menu() depending on printer status. --- Firmware/MenuStack.cpp | 29 ++++++++++++++++++++ Firmware/MenuStack.h | 33 +++++++++++++++++++++++ Firmware/ultralcd.cpp | 60 ++++++++++++++++++++++++------------------ 3 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 Firmware/MenuStack.cpp create mode 100644 Firmware/MenuStack.h diff --git a/Firmware/MenuStack.cpp b/Firmware/MenuStack.cpp new file mode 100644 index 000000000..5e17a7d92 --- /dev/null +++ b/Firmware/MenuStack.cpp @@ -0,0 +1,29 @@ +/** + * @file + * @author Marek Bel + */ + +#include "MenuStack.h" +/** + * @brief Push menu on stack + * @param menu + * @param position selected position in menu being pushed + */ +void MenuStack::push(menuFunc_t menu, uint8_t position) +{ + if (m_index >= max_depth) return; + m_stack[m_index].menu = menu; + m_stack[m_index].position = position; + ++m_index; +} + +/** + * @brief Pop menu from stack + * @return Record containing menu function pointer and previously selected line number + */ +MenuStack::Record MenuStack::pop() +{ + if (m_index != 0) m_index--; + + return m_stack[m_index]; +} diff --git a/Firmware/MenuStack.h b/Firmware/MenuStack.h new file mode 100644 index 000000000..55c836905 --- /dev/null +++ b/Firmware/MenuStack.h @@ -0,0 +1,33 @@ +/** + * @file + * @author Marek Bel + */ + +#ifndef MENUSTACK_H +#define MENUSTACK_H + +#include + +/** Pointer to function implementing menu.*/ +typedef void (*menuFunc_t)(); +/** + * @brief Stack implementation for navigating menu structure + */ +class MenuStack +{ +public: + struct Record + { + menuFunc_t menu; + uint8_t position; + }; + MenuStack():m_stack(),m_index(0) {} + void push(menuFunc_t menu, uint8_t position); + Record pop(); +private: + static const int max_depth = 3; + Record m_stack[max_depth]; + uint8_t m_index; +}; + +#endif /* FIRMWARE_MENUSTACK_H_ */ diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b892dca5e..bdf7775f8 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1,6 +1,7 @@ #include "temperature.h" #include "ultralcd.h" #ifdef ULTRA_LCD +#include "MenuStack.h" #include "Marlin.h" #include "language.h" #include "cardreader.h" @@ -39,7 +40,7 @@ extern bool fsensor_enabled; #endif //PAT9125 //Function pointer to menu functions. -typedef void (*menuFunc_t)(); + static void lcd_sd_updir(); @@ -223,7 +224,7 @@ static void lcd_delta_calibrate_menu(); static void lcd_quick_feedback();//Cause an LCD refresh, and give the user visual or audible feedback that something has happened /* Different types of actions that can be used in menu items. */ -static void menu_action_back(menuFunc_t data); +static void menu_action_back(menuFunc_t data = 0); #define menu_action_back_RAM menu_action_back static void menu_action_submenu(menuFunc_t data); static void menu_action_gcode(const char* pgcode); @@ -339,6 +340,22 @@ uint8_t lcdDrawUpdate = 2; /* Set to none-zero when the LCD nee // float raw_Ki, raw_Kd; #endif + +/** + * @brief Go to menu + * + * This function should not be used directly, use + * menu_action_back and menu_action_submenu instead. + * + * @param menu target menu + * @param encoder position in target menu + * @param feedback + * * true sound feedback (click) + * * false no feedback + * @param reset_menu_state + * * true reset menu state global union + * * false do not reset menu state global union + */ static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder = 0, const bool feedback = true, bool reset_menu_state = true) { asm("cli"); @@ -6647,32 +6664,25 @@ static void lcd_quick_feedback() lcd_implementation_quick_feedback(); } -#define ENC_STACK_SIZE 3 -static uint8_t enc_stack[ENC_STACK_SIZE]; //encoder is originaly uint16, but for menu -static uint8_t enc_stack_cnt = 0; - -static void lcd_push_encoder(void) -{ - if (enc_stack_cnt >= ENC_STACK_SIZE) return; - enc_stack[enc_stack_cnt] = encoderPosition; - enc_stack_cnt++; -} - -static void lcd_pop_encoder(void) -{ - if (enc_stack_cnt == 0) return; - enc_stack_cnt--; - encoderPosition = enc_stack[enc_stack_cnt]; -} - - /** Menu action functions **/ -static void menu_action_back(menuFunc_t data) { - lcd_goto_menu(data); - lcd_pop_encoder(); +static MenuStack menuStack; + +/** + * @brief Go up in menu structure + * @param data unused parameter + */ +static void menu_action_back(menuFunc_t data) +{ + MenuStack::Record record = menuStack.pop(); + lcd_goto_menu(record.menu); + encoderPosition = record.position; } +/** + * @brief Go deeper into menu structure + * @param data nested menu + */ static void menu_action_submenu(menuFunc_t data) { - lcd_push_encoder(); + menuStack.push(currentMenu, encoderPosition); lcd_goto_menu(data); } static void menu_action_gcode(const char* pgcode) { From e551ed1f6e394978dfeb32daf86eff56b0e56552 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 6 Mar 2018 19:51:13 +0100 Subject: [PATCH 02/27] Replace lcd_goto_menu(...) by menu_action_back() in lcd_menu_fails_stats(); --- Firmware/ultralcd.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index bdf7775f8..e80d8046f 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1634,9 +1634,7 @@ static void lcd_menu_fails_stats() fprintf_P(lcdout, PSTR(ESC_H(0,0)"Last print failures"ESC_H(1,1)"Filam. runouts %-3d"ESC_H(0,2)"Total failures"ESC_H(1,3)"Filam. runouts %-3d"), filamentLast, filamentTotal); if (lcd_clicked()) { - lcd_quick_feedback(); - //lcd_return_to_status(); - lcd_goto_menu(lcd_main_menu, 8); //TODO: Remove hard coded encoder value. + menu_action_back(); } } #endif //TMC2130 From 020269a83c00bb398fbdc0aab06bab1f0ccf8fd3 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 6 Mar 2018 21:26:14 +0100 Subject: [PATCH 03/27] Fix unable to go back from main menu to status screen. --- Firmware/MenuStack.h | 3 ++- Firmware/ultralcd.cpp | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Firmware/MenuStack.h b/Firmware/MenuStack.h index 55c836905..04754449c 100644 --- a/Firmware/MenuStack.h +++ b/Firmware/MenuStack.h @@ -24,8 +24,9 @@ public: MenuStack():m_stack(),m_index(0) {} void push(menuFunc_t menu, uint8_t position); Record pop(); + void reset(){m_index = 0;} private: - static const int max_depth = 3; + static const int max_depth = 4; Record m_stack[max_depth]; uint8_t m_index; }; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e80d8046f..a3a08bccb 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -106,7 +106,7 @@ union Data byte b[2]; int value; }; - +static MenuStack menuStack; int8_t ReInitLCD = 0; int8_t SDscrool = 0; @@ -527,8 +527,8 @@ static void lcd_status_screen() if (current_click && (lcd_commands_type != LCD_COMMAND_STOP_PRINT)) //click is aborted unless stop print finishes { - - lcd_goto_menu(lcd_main_menu); + menuStack.reset(); + menu_action_submenu(lcd_main_menu); lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) currentMenu == lcd_status_screen @@ -6663,7 +6663,6 @@ static void lcd_quick_feedback() } /** Menu action functions **/ -static MenuStack menuStack; /** * @brief Go up in menu structure From ed0e7a8b58516976c3be7782c2bab11bb8b0d01d Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 6 Mar 2018 21:27:06 +0100 Subject: [PATCH 04/27] Preserve position in menu move axis. --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a3a08bccb..43692d0a9 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1534,7 +1534,7 @@ static void lcd_menu_extruder_info() lcd.print(itostr3(pat9125_b)); // Display LASER shutter time from Filament sensor - /* Shutter register is an index of LASER shutter time. It is automatically controlled by the chip’s internal + /* Shutter register is an index of LASER shutter time. It is automatically controlled by the chip�s internal auto-exposure algorithm. When the chip is tracking on a good reflection surface, the Shutter is small. When the chip is tracking on a poor reflection surface, the Shutter is large. Value ranges from 0 to 46. */ @@ -2199,7 +2199,7 @@ static void _lcd_move(const char *name, int axis, int min, int max) { } } if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis])); - if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis); { + if (LCD_CLICKED) menu_action_back(); { } } From b7df176a466ac4690e79332726c2b696099c2a56 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 6 Mar 2018 22:45:47 +0100 Subject: [PATCH 05/27] Preserve position in menu Live adjust Z. --- Firmware/ultralcd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 43692d0a9..917479c32 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -972,7 +972,8 @@ void lcd_commands() { lcd_implementation_clear(); - lcd_goto_menu(lcd_babystep_z, 0, false); + menuStack.reset(); + menu_action_submenu(lcd_babystep_z); enquecommand_P(PSTR("G1 X60.0 E9.0 F1000.0")); //intro line enquecommand_P(PSTR("G1 X100.0 E12.5 F1000.0")); //intro line enquecommand_P(PSTR("G92 E0.0")); @@ -2373,7 +2374,7 @@ static void _lcd_babystep(int axis, const char *msg) (axis == 0) ? EEPROM_BABYSTEP_X : ((axis == 1) ? EEPROM_BABYSTEP_Y : EEPROM_BABYSTEP_Z), &menuData.babyStep.babystepMem[axis]); } - if (LCD_CLICKED) lcd_goto_menu(lcd_main_menu); + if (LCD_CLICKED) menu_action_back(); } static void lcd_babystep_x() { From 6ba07a358b915d0bafadef43d172eb97c5258901 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 7 Mar 2018 15:46:46 +0100 Subject: [PATCH 06/27] Fix of a regression bug, caused by pre-calculating the extrudemultiply for precission and performance: calculate_extruder_multipliers() has to be called after extrudemultiply is changed from the printer panel. --- Firmware/ultralcd.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b892dca5e..f00748b43 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -91,6 +91,18 @@ union MenuData int rear2; } adjustBed; + struct TuneMenu + { + // editMenuParentState is used when an edit menu is entered, so it knows + // the return menu and encoder state. + struct EditMenuParentState editMenuParentState; + // To recognize, whether the menu has been just initialized. + int8_t status; + // Backup of extrudemultiply, to recognize, that the value has been changed and + // it needs to be applied. + int16_t extrudemultiply; + } tuneMenu; + // editMenuParentState is used when an edit menu is entered, so it knows // the return menu and encoder state. struct EditMenuParentState editMenuParentState; @@ -5326,7 +5338,17 @@ static void lcd_colorprint_change() { static void lcd_tune_menu() { - EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); + if (menuData.tuneMenu.status == 0) { + // Menu was entered. Mark the menu as entered and save the current extrudemultiply value. + menuData.tuneMenu.status = 1; + menuData.tuneMenu.extrudemultiply = extrudemultiply; + } else if (menuData.tuneMenu.extrudemultiply != extrudemultiply) { + // extrudemultiply has been changed from the child menu. Apply the new value. + menuData.tuneMenu.extrudemultiply = extrudemultiply; + calculate_extruder_multipliers(); + } + + EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu)); From 77c3d7d7f7b7e7a6d7664c7c4d39acf2c33c6d30 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 16:47:20 +0100 Subject: [PATCH 07/27] Review and document lcd_adjust_bed_reset() lcd_goto_menu() usage. --- Firmware/ultralcd.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 917479c32..228fd7635 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2389,6 +2389,14 @@ static void lcd_babystep_z() { static void lcd_adjust_bed(); +/** + * @brief adjust bed reset menu item function + * + * To be used as MENU_ITEM(function,...) inside lcd_adjust_bed submenu. In such case lcd_goto_menu usage + * is correct and doesn't break menuStack. + * Because we did not leave the menu, the menuData did not reset. + * Force refresh of the bed leveling data. + */ static void lcd_adjust_bed_reset() { eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1); @@ -2396,9 +2404,7 @@ static void lcd_adjust_bed_reset() eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0); eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0); - lcd_goto_menu(lcd_adjust_bed, 0, false); - // Because we did not leave the menu, the menuData did not reset. - // Force refresh of the bed leveling data. + lcd_goto_menu(lcd_adjust_bed, 0, false); //doesn't break menuStack menuData.adjustBed.status = 0; } From 0871925353ffa8371ed57c5de0d28df8b3b9a168 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 17:03:17 +0100 Subject: [PATCH 08/27] Remove special handling of lcd_move_z after long button press. Convert lcd_move_z after long button press to ordinary menu_action_submenu. Known bug (feature) is, that with current maximum stack depth, when long press is activated in menu > settings > move axis > Move X and then Move Z is deactivated, menu is returned to "move axis" and not to "Move X". --- Firmware/ultralcd.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 228fd7635..13694ff99 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -321,14 +321,12 @@ volatile uint8_t slow_buttons;//Contains the bits of the currently pressed butto uint8_t currentMenuViewOffset; /* scroll offset in the current menu */ uint8_t lastEncoderBits; uint16_t encoderPosition; -uint16_t savedEncoderPosition; #if (SDCARDDETECT > 0) bool lcd_oldcardstatus; #endif #endif //ULTIPANEL menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */ -menuFunc_t savedMenu; uint32_t lcd_next_update_millis; uint8_t lcd_status_update_delay; bool ignore_click = false; @@ -7107,10 +7105,6 @@ void lcd_buttons_update() if (millis() > button_blanking_time) { button_blanking_time = millis() + BUTTON_BLANKING_TIME; if (button_pressed == false && long_press_active == false) { - if (currentMenu != lcd_move_z) { - savedMenu = currentMenu; - savedEncoderPosition = encoderPosition; - } long_press_timer = millis(); button_pressed = true; } @@ -7119,7 +7113,7 @@ void lcd_buttons_update() long_press_active = true; move_menu_scale = 1.0; - lcd_goto_menu(lcd_move_z); + menu_action_submenu(lcd_move_z); } } } @@ -7129,13 +7123,7 @@ void lcd_buttons_update() button_blanking_time = millis() + BUTTON_BLANKING_TIME; if (long_press_active == false) { //button released before long press gets activated - if (currentMenu == lcd_move_z) { - //return to previously active menu and previous encoder position - lcd_goto_menu(savedMenu, savedEncoderPosition); - } - else { newbutton |= EN_C; - } } else if (currentMenu == lcd_move_z) lcd_quick_feedback(); //button_pressed is set back to false via lcd_quick_feedback function From d0a98dc6cc3148ee5f133f28445f4c219b54f254 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 17:18:10 +0100 Subject: [PATCH 09/27] Document valid usage of lcd_goto_menu(). --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 13694ff99..d4a0d6920 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3539,7 +3539,7 @@ static void lcd_fsensor_state_set() } } if (IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) lcd_goto_menu(lcd_tune_menu, 7); - else lcd_goto_menu(lcd_settings_menu, 7); + else lcd_goto_menu(lcd_settings_menu, 7); //doesn't break menuStack } #endif //PAT9125 @@ -4627,7 +4627,7 @@ static void lcd_disable_farm_mode() { lcd_return_to_status(); } else { - lcd_goto_menu(lcd_settings_menu); + lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } lcd_update_enable(true); lcdDrawUpdate = 2; From 716098c4349c98b701b1436799879c84429a71fd Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 17:27:27 +0100 Subject: [PATCH 10/27] Preserve position in menu move axis Extruder. --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d4a0d6920..e212dae00 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2220,7 +2220,7 @@ static void lcd_move_e() { lcd_implementation_drawedit(PSTR("Extruder"), ftostr31(current_position[E_AXIS])); } - if (LCD_CLICKED) lcd_goto_menu(lcd_move_menu_axis); + if (LCD_CLICKED) menu_action_back(); } else { lcd_implementation_clear(); From 0c961dedc4898ba475872cdfbf5decbc658c14ce Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 18:15:24 +0100 Subject: [PATCH 11/27] Reset menu stack in lcd_return_to_status(). Mark menuStack.reset() as redundant in lcd_status_screen(), but leave it there to be sure. --- Firmware/ultralcd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index e212dae00..0fb581ae7 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -525,7 +525,7 @@ static void lcd_status_screen() if (current_click && (lcd_commands_type != LCD_COMMAND_STOP_PRINT)) //click is aborted unless stop print finishes { - menuStack.reset(); + menuStack.reset(); //redundant, as already done in lcd_return_to_status(), just to be sure menu_action_submenu(lcd_main_menu); lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) @@ -1381,6 +1381,7 @@ static void lcd_return_to_status() { ); lcd_goto_menu(lcd_status_screen, 0, false); + menuStack.reset(); } From 1aba60813329e3d0d018fd10c14a5b8615d5aa32 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 18:30:33 +0100 Subject: [PATCH 12/27] Document valid usage of lcd_goto_menu(), wrap lcd_second_serial_set() by HAS_SECOND_SERIAL_PORT macro. --- Firmware/ultralcd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0fb581ae7..461c19f65 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3608,13 +3608,15 @@ void lcd_temp_calibration_set() { lcd_goto_menu(lcd_settings_menu, 10); } +#ifdef HAS_SECOND_SERIAL_PORT void lcd_second_serial_set() { if(selectedSerialPort == 1) selectedSerialPort = 0; else selectedSerialPort = 1; eeprom_update_byte((unsigned char *)EEPROM_SECOND_SERIAL_ACTIVE, selectedSerialPort); MYSERIAL.begin(BAUDRATE); - lcd_goto_menu(lcd_settings_menu, 11); + lcd_goto_menu(lcd_settings_menu, 11);//doesn't break menuStack } +#endif //HAS_SECOND_SERIAL_PORT void lcd_calibrate_pinda() { enquecommand_P(PSTR("G76")); From 2a53686d2fa1a4f827c39b0a4338b9b70948fbec Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 19:33:40 +0100 Subject: [PATCH 13/27] Document valid usage of lcd_goto_menu(), remove redundant parameter. --- Firmware/ultralcd.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 461c19f65..39ef3c90c 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -342,8 +342,11 @@ uint8_t lcdDrawUpdate = 2; /* Set to none-zero when the LCD nee /** * @brief Go to menu * - * This function should not be used directly, use - * menu_action_back and menu_action_submenu instead. + * In MENU_ITEM(submenu,... ) use MENU_ITEM(back,...) or + * menu_action_back() and menu_action_submenu() instead, otherwise menuStack will be broken. + * + * It is acceptable to call lcd_goto_menu(menu) directly from MENU_ITEM(function,...), if destination menu + * is the same, from which function was called. * * @param menu target menu * @param encoder position in target menu @@ -1817,13 +1820,13 @@ static void lcd_support_menu() void lcd_set_fan_check() { fans_check_enabled = !fans_check_enabled; eeprom_update_byte((unsigned char *)EEPROM_FAN_CHECK_ENABLED, fans_check_enabled); - lcd_goto_menu(lcd_settings_menu, 8); + lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } void lcd_set_filament_autoload() { filament_autoload_enabled = !filament_autoload_enabled; eeprom_update_byte((unsigned char *)EEPROM_FSENS_AUTOLOAD_ENABLED, filament_autoload_enabled); - lcd_goto_menu(lcd_settings_menu, 8); + lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } void lcd_unLoadFilament() @@ -3027,7 +3030,7 @@ static void lcd_show_end_stops() { static void menu_show_end_stops() { lcd_show_end_stops(); - if (LCD_CLICKED) lcd_goto_menu(lcd_calibration_menu); + if (LCD_CLICKED) lcd_goto_menu(lcd_calibration_menu); //doesn't break menuStack } // Lets the user move the Z carriage up to the end stoppers. @@ -3415,7 +3418,7 @@ static void lcd_sort_type_set() { } eeprom_update_byte((unsigned char *)EEPROM_SD_SORT, sdSort); presort_flag = true; - lcd_goto_menu(lcd_settings_menu, 8); + lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } #endif //SDCARD_SORT_ALPHA @@ -3605,7 +3608,7 @@ void lcd_temp_calibration_set() { temp_cal_active = !temp_cal_active; eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, temp_cal_active); digipot_init(); - lcd_goto_menu(lcd_settings_menu, 10); + lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } #ifdef HAS_SECOND_SERIAL_PORT @@ -3614,7 +3617,7 @@ void lcd_second_serial_set() { else selectedSerialPort = 1; eeprom_update_byte((unsigned char *)EEPROM_SECOND_SERIAL_ACTIVE, selectedSerialPort); MYSERIAL.begin(BAUDRATE); - lcd_goto_menu(lcd_settings_menu, 11);//doesn't break menuStack + lcd_goto_menu(lcd_settings_menu);//doesn't break menuStack } #endif //HAS_SECOND_SERIAL_PORT From 8ff028820a8805a0133b68633b9cadead9cf8fa5 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 20:55:01 +0100 Subject: [PATCH 14/27] Remove redundant parameter. --- Firmware/ultralcd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 39ef3c90c..6dab1bd2a 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -3542,8 +3542,8 @@ static void lcd_fsensor_state_set() lcd_fsensor_fail(); } } - if (IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) lcd_goto_menu(lcd_tune_menu, 7); - else lcd_goto_menu(lcd_settings_menu, 7); //doesn't break menuStack + if (IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) lcd_goto_menu(lcd_tune_menu); + else lcd_goto_menu(lcd_settings_menu); //doesn't break menuStack } #endif //PAT9125 From b41d680adf75b0171690a9105790e21126bdbc69 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Wed, 7 Mar 2018 20:58:15 +0100 Subject: [PATCH 15/27] Replace problematic character in comment. --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 6dab1bd2a..2d3464844 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1537,7 +1537,7 @@ static void lcd_menu_extruder_info() lcd.print(itostr3(pat9125_b)); // Display LASER shutter time from Filament sensor - /* Shutter register is an index of LASER shutter time. It is automatically controlled by the chip�s internal + /* Shutter register is an index of LASER shutter time. It is automatically controlled by the chip's internal auto-exposure algorithm. When the chip is tracking on a good reflection surface, the Shutter is small. When the chip is tracking on a poor reflection surface, the Shutter is large. Value ranges from 0 to 46. */ From b902d9176021b71d01e7ba6c0f7c2f38cea49f9e Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 7 Mar 2018 21:02:07 +0100 Subject: [PATCH 16/27] changed version --- Firmware/Configuration.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 20296e399..b89a59b15 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -7,8 +7,8 @@ #define STR(x) STR_HELPER(x) // Firmware version -#define FW_VERSION "3.1.2-alpha" -#define FW_COMMIT_NR 255 +#define FW_VERSION "3.1.3-RC1" +#define FW_COMMIT_NR 276 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN From 262e800db790bac621b2f7f90eee09d4ea078c90 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Mon, 12 Mar 2018 23:35:50 +0100 Subject: [PATCH 17/27] Safety timer (disable heaters after 15min idle) --- Firmware/Configuration_prusa.h | 2 +- Firmware/Marlin_main.cpp | 39 ++++++++++++++++-------- Firmware/Timer.cpp | 55 ++++++++++++++++++++++++++++++++++ Firmware/Timer.h | 30 +++++++++++++++++++ 4 files changed, 113 insertions(+), 13 deletions(-) create mode 100644 Firmware/Timer.cpp create mode 100644 Firmware/Timer.h diff --git a/Firmware/Configuration_prusa.h b/Firmware/Configuration_prusa.h index 47939e07a..63ffa05c9 100644 --- a/Firmware/Configuration_prusa.h +++ b/Firmware/Configuration_prusa.h @@ -171,7 +171,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o #define PAT9125 //!< Filament sensor #define FANCHECK //#define WATCHDOG -//#define SAFETYTIMER +#define SAFETYTIMER /*------------------------------------ diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 102482401..a7240bf5c 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -54,6 +54,7 @@ #include "pins_arduino.h" #include "math.h" #include "util.h" +#include "Timer.h" #include @@ -6720,6 +6721,31 @@ void handle_status_leds(void) { } #endif +#ifdef SAFETYTIMER +/** + * @brief Turn off heating after 15 minutes of inactivity + */ +static void handleSafetyTimer() +{ + static_assert(EXTRUDERS == 1,"Implemented only for one extruder."); + static Timer safetyTimer; + if (IS_SD_PRINTING || is_usb_printing || (custom_message_type == 4) || (lcd_commands_type == LCD_COMMAND_V2_CAL) || + (!degTargetBed() && !degTargetHotend(0))) + { + safetyTimer.stop(); + } + else if ((degTargetBed() || degTargetHotend(0)) && (!safetyTimer.running())) + { + safetyTimer.start(); + } + else if (safetyTimer.expired(15*60*1000)) + { + setTargetBed(0); + setTargetHotend(0, 0); + } +} +#endif //SAFETYTIMER + void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument set in Marlin.h { #ifdef PAT9125 @@ -6763,18 +6789,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s #endif //PAT9125 #ifdef SAFETYTIMER - static uint32_t safety_timer = 0; - if (degTargetBed() || degTargetHotend(0)) - { - if ((safety_timer == 0) || IS_SD_PRINTING || is_usb_printing || (custom_message_type == 4) || (lcd_commands_type == LCD_COMMAND_V2_CAL)) - safety_timer = millis(); - else if ((safety_timer + (15*60*1000)) < millis()) - { - setTargetBed(0); - setTargetHotend(0, 0); - safety_timer = 0; - } - } + handleSafetyTimer(); #endif //SAFETYTIMER diff --git a/Firmware/Timer.cpp b/Firmware/Timer.cpp new file mode 100644 index 000000000..78f47a45b --- /dev/null +++ b/Firmware/Timer.cpp @@ -0,0 +1,55 @@ +/** + * @file + * @author Marek Bel + */ + +#include "Timer.h" +#include "Arduino.h" + +Timer::Timer() : m_isRunning(false), m_started() +{ +} + +/** + * @brief Start timer + */ +void Timer::start() +{ + m_started = millis(); + m_isRunning = true; +} + +/** + * @brief Timer has expired + * + * Timer is considered expired after msPeriod has passed from time the timer was started. + * This function must be called at least each (unsigned long maximum value - msPeriod) milliseconds to be sure to + * catch first expiration. + * This function is expected to handle wrap around of time register well. + * + * @param msPeriod Time interval in milliseconds. + * @retval true Timer has expired + * @retval false Timer not expired yet, or is not running, or time window in which is timer considered expired passed. + */ +bool Timer::expired(unsigned long msPeriod) +{ + if (!m_isRunning) return false; + bool expired = false; + const unsigned long now = millis(); + if (m_started <= m_started + msPeriod) + { + if ((now >= m_started + msPeriod) || (now < m_started)) + { + expired = true; + } + } + else + { + if ((now >= m_started + msPeriod) && (now < m_started)) + { + expired = true; + } + } + if (expired) m_isRunning = false; + return expired; +} diff --git a/Firmware/Timer.h b/Firmware/Timer.h new file mode 100644 index 000000000..0d3a89dcb --- /dev/null +++ b/Firmware/Timer.h @@ -0,0 +1,30 @@ +/* + * @file + * @author Marek Bel + */ + +#ifndef TIMER_H +#define TIMER_H + +/** + * @brief simple timer + * + * Simple and memory saving implementation. Should handle timer register wrap around well. + * Maximum period is at least 49 days. Resolution is one millisecond. To save memory, doesn't store timer period. + * If you wish timer which is storing period, derive from this. If you need time intervals smaller than 65 seconds + * consider implementing timer with smaller underlying type. + */ +class Timer +{ +public: + Timer(); + void start(); + void stop(){m_isRunning = false;} + bool running(){return m_isRunning;} + bool expired(unsigned long msPeriod); +private: + bool m_isRunning; + unsigned long m_started; +}; + +#endif /* TIMER_H */ From d24a8945314c82deb46b55f611475d57bd4ed9d6 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 11:52:19 +0100 Subject: [PATCH 18/27] disable safety timer --- Firmware/Configuration_prusa.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration_prusa.h b/Firmware/Configuration_prusa.h index 63ffa05c9..47939e07a 100644 --- a/Firmware/Configuration_prusa.h +++ b/Firmware/Configuration_prusa.h @@ -171,7 +171,7 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o #define PAT9125 //!< Filament sensor #define FANCHECK //#define WATCHDOG -#define SAFETYTIMER +//#define SAFETYTIMER /*------------------------------------ From db8cfc352f3cbf2edc76ad06a87bc12241b1838c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 13:43:05 +0100 Subject: [PATCH 19/27] version changed --- Firmware/Configuration.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index b89a59b15..9dc06f1d8 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -7,8 +7,8 @@ #define STR(x) STR_HELPER(x) // Firmware version -#define FW_VERSION "3.1.3-RC1" -#define FW_COMMIT_NR 276 +#define FW_VERSION "3.1.3" +#define FW_COMMIT_NR 297 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN From 6ffeab418c2668627ac434792d0b1f1dc95a87b7 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 13:55:59 +0100 Subject: [PATCH 20/27] steppers mode translation --- Firmware/language_all.cpp | 10 ++++++---- Firmware/language_all.h | 4 ++-- Firmware/language_cz.h | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 3eb8ba85b..1df6655c2 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -61,8 +61,10 @@ const char * const MSG_AUTO_HOME_LANG_TABLE[1] PROGMEM = { }; const char MSG_AUTO_MODE_ON_EN[] PROGMEM = "Mode [auto power]"; -const char * const MSG_AUTO_MODE_ON_LANG_TABLE[1] PROGMEM = { - MSG_AUTO_MODE_ON_EN +const char MSG_AUTO_MODE_ON_CZ[] PROGMEM = "Mod [automaticky]"; +const char * const MSG_AUTO_MODE_ON_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_AUTO_MODE_ON_EN, + MSG_AUTO_MODE_ON_CZ }; const char MSG_A_RETRACT_EN[] PROGMEM = "A-retract"; @@ -1986,14 +1988,14 @@ const char * const MSG_SHOW_END_STOPS_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_SILENT_MODE_OFF_EN[] PROGMEM = "Mode [high power]"; -const char MSG_SILENT_MODE_OFF_CZ[] PROGMEM = "Mod [Normal]"; +const char MSG_SILENT_MODE_OFF_CZ[] PROGMEM = "Mod [vys. vykon]"; const char * const MSG_SILENT_MODE_OFF_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SILENT_MODE_OFF_EN, MSG_SILENT_MODE_OFF_CZ }; const char MSG_SILENT_MODE_ON_EN[] PROGMEM = "Mode [silent]"; -const char MSG_SILENT_MODE_ON_CZ[] PROGMEM = "Mod [Stealth]"; +const char MSG_SILENT_MODE_ON_CZ[] PROGMEM = "Mod [tichy]"; const char * const MSG_SILENT_MODE_ON_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SILENT_MODE_ON_EN, MSG_SILENT_MODE_ON_CZ diff --git a/Firmware/language_all.h b/Firmware/language_all.h index bbc8e6fef..fb1daedf9 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -40,8 +40,8 @@ extern const char* const MSG_AUTOLOAD_FILAMENT_LANG_TABLE[LANG_NUM]; #define MSG_AUTOLOAD_FILAMENT LANG_TABLE_SELECT(MSG_AUTOLOAD_FILAMENT_LANG_TABLE) extern const char* const MSG_AUTO_HOME_LANG_TABLE[1]; #define MSG_AUTO_HOME LANG_TABLE_SELECT_EXPLICIT(MSG_AUTO_HOME_LANG_TABLE, 0) -extern const char* const MSG_AUTO_MODE_ON_LANG_TABLE[1]; -#define MSG_AUTO_MODE_ON LANG_TABLE_SELECT_EXPLICIT(MSG_AUTO_MODE_ON_LANG_TABLE, 0) +extern const char* const MSG_AUTO_MODE_ON_LANG_TABLE[LANG_NUM]; +#define MSG_AUTO_MODE_ON LANG_TABLE_SELECT(MSG_AUTO_MODE_ON_LANG_TABLE) extern const char* const MSG_A_RETRACT_LANG_TABLE[1]; #define MSG_A_RETRACT LANG_TABLE_SELECT_EXPLICIT(MSG_A_RETRACT_LANG_TABLE, 0) extern const char* const MSG_BABYSTEPPING_X_LANG_TABLE[1]; diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index 355b786e8..8e05ff318 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -103,8 +103,9 @@ #define MSG_INSERT_FILAMENT "Vlozte filament" #define MSG_CHANGING_FILAMENT "Vymena filamentu!" -#define MSG_SILENT_MODE_ON "Mod [Stealth]" -#define MSG_SILENT_MODE_OFF "Mod [Normal]" +#define MSG_SILENT_MODE_ON "Mod [tichy]" +#define MSG_SILENT_MODE_OFF "Mod [vys. vykon]" +#define MSG_AUTO_MODE_ON "Mod [automaticky]" #define MSG_REBOOT "Restartujte tiskarnu" #define MSG_TAKE_EFFECT " pro projeveni zmen" From 16c3f0f14c28ab986546f859b8dc70598bd15e6a Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 14:02:59 +0100 Subject: [PATCH 21/27] commit nr changed, default repository changed to unknown --- Firmware/Configuration.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 9dc06f1d8..05cf99692 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -8,11 +8,11 @@ // Firmware version #define FW_VERSION "3.1.3" -#define FW_COMMIT_NR 297 +#define FW_COMMIT_NR 301 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN -#define FW_REPOSITORY "Prusa3D/MK3" +#define FW_REPOSITORY "Unknown" #define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR) // Debug version has debugging enabled (the symbol DEBUG_BUILD is set). From 49f56b34c8005ce097b5d449f6b7d118a6265389 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 19:02:26 +0100 Subject: [PATCH 22/27] auto home and mesh bed calibration points corrected --- Firmware/mesh_bed_calibration.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 8db94cd42..6fae166dc 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -63,17 +63,17 @@ const float bed_ref_points_4[] PROGMEM = { }; const float bed_ref_points[] PROGMEM = { - 13.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, - 13.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, - 13.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y + 13.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y }; #else From b75ca49cdced4a8c771837035fbc43143113f1d7 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 20:01:36 +0100 Subject: [PATCH 23/27] reverted --- Firmware/mesh_bed_calibration.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 6fae166dc..8db94cd42 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -63,17 +63,17 @@ const float bed_ref_points_4[] PROGMEM = { }; const float bed_ref_points[] PROGMEM = { - 13.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, - 13.f - BED_ZERO_REF_X, 106.4f - 4.f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 106.4f - BED_ZERO_REF_Y, - 13.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y, - 115.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y, - 216.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y + 13.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, + 115.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, + 216.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y }; #else From c43062b661f76cccf81b1854ec0c8332a4b8ce4b Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 20:41:13 +0100 Subject: [PATCH 24/27] make space for removing steel sheet --- Firmware/Configuration.h | 2 +- Firmware/Marlin_main.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 05cf99692..238439a5a 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -7,7 +7,7 @@ #define STR(x) STR_HELPER(x) // Firmware version -#define FW_VERSION "3.1.3" +#define FW_VERSION "3.1.3-RC2" #define FW_COMMIT_NR 301 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index a7240bf5c..70b77f680 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -3229,7 +3229,8 @@ void process_commands() #ifdef PINDA_THERMISTOR if (true) { - if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) { + if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) + { // We don't know where we are! HOME! // Push the commands to the front of the message queue in the reverse order! // There shall be always enough space reserved for these commands. @@ -3239,7 +3240,14 @@ void process_commands() } lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CAL_WARNING); bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false); - if (result) lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET); + if (result) + { + current_position[Z_AXIS] = 50; + current_position[Y_AXIS] = 190; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + st_synchronize(); + lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET); + } lcd_update_enable(true); KEEPALIVE_STATE(NOT_BUSY); //no need to print busy messages as we print current temperatures periodicaly SERIAL_ECHOLNPGM("PINDA probe calibration start"); From b0fc0039f0c2670e191856f4486b2172e97d45fe Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 21:18:19 +0100 Subject: [PATCH 25/27] mesh bed leveling / auto home Y coordinates updated --- Firmware/mesh_bed_calibration.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 8db94cd42..322acbef1 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -20,7 +20,7 @@ float world2machine_shift[2]; #define WEIGHT_FIRST_ROW_Y_LOW (0.0f) #define BED_ZERO_REF_X (- 22.f + X_PROBE_OFFSET_FROM_EXTRUDER) // -22 + 23 = 1 -#define BED_ZERO_REF_Y (- 0.6f + Y_PROBE_OFFSET_FROM_EXTRUDER) // -0.6 + 5 = 4.4 +#define BED_ZERO_REF_Y (- 0.6f + Y_PROBE_OFFSET_FROM_EXTRUDER + 4) // -0.6 + 5 = 4.4 // Scaling of the real machine axes against the programmed dimensions in the firmware. // The correction is tiny, here around 0.5mm on 250mm length. @@ -56,10 +56,10 @@ const float bed_skew_angle_extreme = (0.25f * M_PI / 180.f); // Positions of the bed reference points in the machine coordinates, referenced to the P.I.N.D.A sensor. // The points are the following: center front, center right, center rear, center left. const float bed_ref_points_4[] PROGMEM = { - 13.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, - 221.f - BED_ZERO_REF_X, 10.4f - 4.f - BED_ZERO_REF_Y, - 221.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y, - 13.f - BED_ZERO_REF_X, 202.4f - 4.f - BED_ZERO_REF_Y + 13.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, + 221.f - BED_ZERO_REF_X, 10.4f - BED_ZERO_REF_Y, + 221.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y, + 13.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y }; const float bed_ref_points[] PROGMEM = { From b15fec6d4c30d0547562da032c3f80bc20582752 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 21:20:10 +0100 Subject: [PATCH 26/27] version --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 238439a5a..05cf99692 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -7,7 +7,7 @@ #define STR(x) STR_HELPER(x) // Firmware version -#define FW_VERSION "3.1.3-RC2" +#define FW_VERSION "3.1.3" #define FW_COMMIT_NR 301 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. From 39dc0fc17bcbf0709743d38f9a6f39cec11f7943 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Tue, 20 Mar 2018 21:37:41 +0100 Subject: [PATCH 27/27] commit nr changed --- Firmware/Configuration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 05cf99692..c08050469 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -8,7 +8,7 @@ // Firmware version #define FW_VERSION "3.1.3" -#define FW_COMMIT_NR 301 +#define FW_COMMIT_NR 309 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN