|
@@ -823,6 +823,7 @@ void print_stop();
|
|
|
|
|
|
void lcd_commands()
|
|
|
{
|
|
|
+ // printf_P(PSTR("lcd_commands begin, lcd_commands_type=%u, lcd_commands_step=%u\n"), (uint8_t)lcd_commands_type, lcd_commands_step);
|
|
|
if (planner_aborted) {
|
|
|
// we are still within an aborted command. do not process any LCD command until we return
|
|
|
return;
|
|
@@ -1005,6 +1006,57 @@ void lcd_commands()
|
|
|
}
|
|
|
}
|
|
|
#endif //TEMP_MODEL
|
|
|
+
|
|
|
+ if (lcd_commands_type == LcdCommands::NozzleCNG)
|
|
|
+ {
|
|
|
+ if (!blocks_queued() && cmd_buffer_empty() && !saved_printing)
|
|
|
+ {
|
|
|
+ switch(lcd_commands_step)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ lcd_commands_step = 3;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ lcd_update_enabled = false; //hack to avoid lcd_update recursion.
|
|
|
+ lcd_show_fullscreen_message_and_wait_P(_T(MSG_NOZZLE_CNG_READ_HELP));
|
|
|
+ lcd_update_enabled = true;
|
|
|
+ lcd_draw_update = 2; //force lcd clear and update after the stack unwinds.
|
|
|
+ enquecommand_P(PSTR("G28 W"));
|
|
|
+ enquecommand_P(PSTR("G1 X125 Y10 Z150 F1000"));
|
|
|
+ enquecommand_P(PSTR("M109 S280"));
|
|
|
+#ifdef TEMP_MODEL
|
|
|
+ //enquecommand_P(PSTR("M310 S0"));
|
|
|
+ temp_model_set_enabled(false);
|
|
|
+#endif //TEMP_MODEL
|
|
|
+ lcd_commands_step = 2;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ //|0123456789012456789|
|
|
|
+ //|Hotend at 280C!
|
|
|
+ //|Nozzle changed and
|
|
|
+ //|tightend to specs?
|
|
|
+ //| Yes No
|
|
|
+ enquecommand_P(PSTR("M84 XY"));
|
|
|
+ lcd_update_enabled = false; //hack to avoid lcd_update recursion.
|
|
|
+ if (lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_NOZZLE_CNG_CHANGED), false) == LCD_LEFT_BUTTON_CHOICE) {
|
|
|
+#ifdef TEMP_MODEL
|
|
|
+ //enquecommand_P(PSTR("M310 S1"));
|
|
|
+ temp_model_set_enabled(true);
|
|
|
+#endif //TEMP_MODEL
|
|
|
+ //enquecommand_P(PSTR("M104 S0"));
|
|
|
+ setTargetHotendSafe(0,0);
|
|
|
+ lcd_commands_step = 1;
|
|
|
+ }
|
|
|
+ lcd_update_enabled = true;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ lcd_setstatuspgm(MSG_WELCOME);
|
|
|
+ lcd_commands_step = 0;
|
|
|
+ lcd_commands_type = LcdCommands::Idle;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void lcd_return_to_status()
|
|
@@ -2942,6 +2994,11 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg)
|
|
|
char c = char(pgm_read_byte(msg));
|
|
|
if (c == '~')
|
|
|
c = ' ';
|
|
|
+ else if (c == '\n') {
|
|
|
+ // Abort early if '\n' is encontered.
|
|
|
+ // This character is used to force the following words to be printed on the next line.
|
|
|
+ break;
|
|
|
+ }
|
|
|
lcd_print(c);
|
|
|
}
|
|
|
}
|
|
@@ -4503,6 +4560,12 @@ static void sheets_menu()
|
|
|
MENU_END();
|
|
|
}
|
|
|
|
|
|
+static void nozzle_change()
|
|
|
+{
|
|
|
+ lcd_commands_type = LcdCommands::NozzleCNG;
|
|
|
+ lcd_return_to_status();
|
|
|
+}
|
|
|
+
|
|
|
void lcd_hw_setup_menu(void) // can not be "static"
|
|
|
{
|
|
|
typedef struct
|
|
@@ -4525,6 +4588,7 @@ void lcd_hw_setup_menu(void) // can not be "static"
|
|
|
|
|
|
MENU_ITEM_SUBMENU_P(_T(MSG_STEEL_SHEETS), sheets_menu);
|
|
|
SETTINGS_NOZZLE;
|
|
|
+ MENU_ITEM_FUNCTION_P(_T(MSG_NOZZLE_CNG_MENU),nozzle_change);
|
|
|
MENU_ITEM_SUBMENU_P(_i("Checks"), lcd_checking_menu); ////MSG_CHECKS c=18
|
|
|
|
|
|
#if defined(FILAMENT_SENSOR) && (FILAMENT_SENSOR_TYPE == FSENSOR_IR_ANALOG)
|