Merge pull request #3015 from 3d-gussner/PFW-1174

PFW-1174: Add pause/resume for USB/host prints via LCD menu
This commit is contained in:
DRracer 2021-02-25 08:50:41 +01:00 committed by GitHub
commit 9ed713ab13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 189 additions and 163 deletions

View File

@ -1826,8 +1826,7 @@ void loop()
} }
#ifdef FANCHECK #ifdef FANCHECK
if (fan_check_error && isPrintPaused) if (fan_check_error && isPrintPaused && !IS_SD_PRINTING) {
{
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
host_keepalive(); //prevent timeouts since usb processing is disabled until print is resumed. This is for a crude way of pausing a print on all hosts. host_keepalive(); //prevent timeouts since usb processing is disabled until print is resumed. This is for a crude way of pausing a print on all hosts.
} }
@ -3734,12 +3733,13 @@ There are reasons why some G Codes aren't in numerical order.
void process_commands() void process_commands()
{ {
#ifdef FANCHECK #ifdef FANCHECK
if(fan_check_error == EFCE_DETECTED){ if(fan_check_error == EFCE_DETECTED) {
fan_check_error = EFCE_REPORTED; fan_check_error = EFCE_REPORTED;
// SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSED); if (is_usb_printing)
lcd_pause_print(); lcd_pause_usb_print();
cmdqueue_serial_disabled = true; else
} lcd_pause_print();
}
#endif #endif
if (!buflen) return; //empty command if (!buflen) return; //empty command
@ -8134,9 +8134,9 @@ Sigma_Exit:
/*! /*!
### M602 - Resume print <a href="https://reprap.org/wiki/G-code#M602:_Resume_print">M602: Resume print</a> ### M602 - Resume print <a href="https://reprap.org/wiki/G-code#M602:_Resume_print">M602: Resume print</a>
*/ */
case 602: { case 602:
if (isPrintPaused) {
lcd_resume_print(); if (isPrintPaused) lcd_resume_print();
} }
break; break;

View File

@ -70,6 +70,7 @@ const char MSG_MMU_LOAD_FAILS[] PROGMEM_I1 = ISTR("MMU load fails"); ////c=15
const char MSG_NO[] PROGMEM_I1 = ISTR("No"); //// const char MSG_NO[] PROGMEM_I1 = ISTR("No"); ////
const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); //// const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); ////
const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10 const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10
const char MSG_PAUSE_PRINT[] PROGMEM_I1 = ISTR("Pause print");////c=18
const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4 const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4
const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20 const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20
const char MSG_POWER_FAILURES[] PROGMEM_I1 = ISTR("Power failures"); ////c=15 const char MSG_POWER_FAILURES[] PROGMEM_I1 = ISTR("Power failures"); ////c=15
@ -188,7 +189,9 @@ const char MSG_ENDSTOP_OPEN[] PROGMEM_N1 = "open"; ////
const char MSG_POWERUP[] PROGMEM_N1 = "PowerUp"; //// const char MSG_POWERUP[] PROGMEM_N1 = "PowerUp"; ////
const char MSG_ERR_STOPPED[] PROGMEM_N1 = "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"; //// const char MSG_ERR_STOPPED[] PROGMEM_N1 = "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"; ////
const char MSG_ENDSTOP_HIT[] PROGMEM_N1 = "TRIGGERED"; //// const char MSG_ENDSTOP_HIT[] PROGMEM_N1 = "TRIGGERED"; ////
const char MSG_OCTOPRINT_PAUSE[] PROGMEM_N1 = "// action:pause"; ////
const char MSG_OCTOPRINT_PAUSED[] PROGMEM_N1 = "// action:paused"; //// const char MSG_OCTOPRINT_PAUSED[] PROGMEM_N1 = "// action:paused"; ////
const char MSG_OCTOPRINT_RESUME[] PROGMEM_N1 = "// action:resume"; ////
const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; //// const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; ////
const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; //// const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; ////
const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20 const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20

View File

@ -69,6 +69,7 @@ extern const char MSG_MMU_LOAD_FAILS[];
extern const char MSG_NO[]; extern const char MSG_NO[];
extern const char MSG_NOZZLE[]; extern const char MSG_NOZZLE[];
extern const char MSG_PAPER[]; extern const char MSG_PAPER[];
extern const char MSG_PAUSE_PRINT[];
extern const char MSG_PLACE_STEEL_SHEET[]; extern const char MSG_PLACE_STEEL_SHEET[];
extern const char MSG_PLEASE_WAIT[]; extern const char MSG_PLEASE_WAIT[];
extern const char MSG_POWER_FAILURES[]; extern const char MSG_POWER_FAILURES[];
@ -188,7 +189,9 @@ extern const char MSG_ERR_STOPPED[];
extern const char MSG_ENDSTOP_HIT[]; extern const char MSG_ENDSTOP_HIT[];
extern const char MSG_EJECT_FILAMENT[]; extern const char MSG_EJECT_FILAMENT[];
extern const char MSG_CUT_FILAMENT[]; extern const char MSG_CUT_FILAMENT[];
extern const char MSG_OCTOPRINT_PAUSE[];
extern const char MSG_OCTOPRINT_PAUSED[]; extern const char MSG_OCTOPRINT_PAUSED[];
extern const char MSG_OCTOPRINT_RESUME[];
extern const char MSG_OCTOPRINT_RESUMED[]; extern const char MSG_OCTOPRINT_RESUMED[];
extern const char MSG_OCTOPRINT_CANCEL[]; extern const char MSG_OCTOPRINT_CANCEL[];
extern const char MSG_FANCHECK_EXTRUDER[]; extern const char MSG_FANCHECK_EXTRUDER[];

View File

@ -1555,17 +1555,22 @@ void lcd_return_to_status()
eFilamentAction = FilamentAction::None; // i.e. non-autoLoad eFilamentAction = FilamentAction::None; // i.e. non-autoLoad
} }
//! @brief Pause print, disable nozzle heater, move to park position //! @brief Pause print, disable nozzle heater, move to park position, send host action "paused"
void lcd_pause_print() void lcd_pause_print()
{ {
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSED); //pause for octoprint
stop_and_save_print_to_ram(0.0, -default_retraction); stop_and_save_print_to_ram(0.0, -default_retraction);
lcd_return_to_status(); lcd_return_to_status();
isPrintPaused = true; isPrintPaused = true;
if (LcdCommands::Idle == lcd_commands_type) if (LcdCommands::Idle == lcd_commands_type) {
{
lcd_commands_type = LcdCommands::LongPause; lcd_commands_type = LcdCommands::LongPause;
} }
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSED);
}
//! @brief Send host action "pause"
void lcd_pause_usb_print()
{
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSE);
} }
@ -6526,19 +6531,20 @@ static bool fan_error_selftest()
return 0; return 0;
} }
//! @brief Resume paused print //! @brief Resume paused print, send host action "resumed"
//! @todo It is not good to call restore_print_from_ram_and_continue() from function called by lcd_update(), //! @todo It is not good to call restore_print_from_ram_and_continue() from function called by lcd_update(),
//! as restore_print_from_ram_and_continue() calls lcd_update() internally. //! as restore_print_from_ram_and_continue() calls lcd_update() internally.
void lcd_resume_print() void lcd_resume_print()
{ {
lcd_return_to_status(); lcd_return_to_status();
lcd_reset_alert_level(); //for fan speed error lcd_reset_alert_level(); //for fan speed error
if (fan_error_selftest()) return; //abort if error persists if (fan_error_selftest()) {
if (is_usb_printing) SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_PAUSED);
return; //abort if error persists
}
cmdqueue_serial_disabled = false; cmdqueue_serial_disabled = false;
lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS)); lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS));
st_synchronize(); st_synchronize();
custom_message_type = CustomMsg::Resuming; custom_message_type = CustomMsg::Resuming;
isPrintPaused = false; isPrintPaused = false;
restore_print_from_ram_and_continue(default_retraction); restore_print_from_ram_and_continue(default_retraction);
@ -6548,6 +6554,12 @@ void lcd_resume_print()
custom_message_type = CustomMsg::Status; custom_message_type = CustomMsg::Status;
} }
//! @brief Resume paused USB/host print, send host action "resume"
void lcd_resume_usb_print()
{
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUME); //resume octoprint
}
static void change_sheet() static void change_sheet()
{ {
eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), selected_sheet); eeprom_update_byte(&(EEPROM_Sheets_base->active_sheet), selected_sheet);
@ -6644,174 +6656,183 @@ static void lcd_sheet_menu()
MENU_END(); MENU_END();
} }
//! @brief Show Main Menu
//!
//! @code{.unparsed}
//! |01234567890123456789|
//! | Info screen | allways
//!
//! | tst - Save | ifdef RESUME_DEBUG
//! | tst - Restore | ifdef RESUME_DEBUG
//!
//! | recover print | ifdef TMC2130_DEBUG
//! | power panic | ifdef TMC2130_DEBUG
//!
//! | Live adjust Z | printing + Z low
//!
//! | Change filament | farm mode
//!
//! | Tune | printing + paused
//! | Pause print | printing + not paused
//! | Resume print | printing + paused
//! | Stop print | printing or paused + NOT MBL
//! | Preheat | not printing + not paused
//! | Print from SD | not printing or paused
//!
//! | Switch sheet | farm mode
//!
//! | AutoLoad filament | not printing + not mmu or paused
//! | Load filament | not printing + mmu or paused
//! | Load to nozzle | not printing + mmu or paused
//! | Unload filament | not printing or paused
//! | Eject filament | not printing + mmu or paused
//! | Cut filament | not printing + mmu or paused + cut atctive
//! | Settings | not printing or paused
//! | Calibration | not printing
//! | Statistics | not printing
//! | Fail stats | allways
//! | Fail stats MMU | mmu
//! | Support | allways
//! @endcode
static void lcd_main_menu() static void lcd_main_menu()
{ {
MENU_BEGIN(); MENU_BEGIN();
// Majkl superawesome menu // Majkl superawesome menu
MENU_ITEM_BACK_P(_T(MSG_WATCH)); MENU_ITEM_BACK_P(_T(MSG_WATCH));
#ifdef RESUME_DEBUG #ifdef RESUME_DEBUG
if (!saved_printing) if (!saved_printing)
MENU_ITEM_FUNCTION_P(PSTR("tst - Save"), lcd_menu_test_save); MENU_ITEM_FUNCTION_P(PSTR("tst - Save"), lcd_menu_test_save);
else else
MENU_ITEM_FUNCTION_P(PSTR("tst - Restore"), lcd_menu_test_restore); MENU_ITEM_FUNCTION_P(PSTR("tst - Restore"), lcd_menu_test_restore);
#endif //RESUME_DEBUG #endif //RESUME_DEBUG
#ifdef TMC2130_DEBUG #ifdef TMC2130_DEBUG
MENU_ITEM_FUNCTION_P(PSTR("recover print"), recover_print); MENU_ITEM_FUNCTION_P(PSTR("recover print"), recover_print);
MENU_ITEM_FUNCTION_P(PSTR("power panic"), uvlo_); MENU_ITEM_FUNCTION_P(PSTR("power panic"), uvlo_);
#endif //TMC2130_DEBUG #endif //TMC2130_DEBUG
if ( ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal)) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag)
{
MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z);//8
}
if (farm_mode) if ( ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal)) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag) {
MENU_ITEM_FUNCTION_P(_T(MSG_FILAMENTCHANGE), lcd_colorprint_change);//8 MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z);//8
if ( moves_planned() || IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal))
{
MENU_ITEM_SUBMENU_P(_i("Tune"), lcd_tune_menu);////MSG_TUNE
} else
{
MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT
}
if(isPrintPaused && saved_printing_type == PRINTING_TYPE_USB)
{
#ifdef FANCHECK
if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_print);////MSG_RESUME_PRINT c=18
#else
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_print);////MSG_RESUME_PRINT c=18
#endif
}
#ifdef SDSUPPORT
if (card.cardOK || lcd_commands_type == LcdCommands::Layer1Cal)
{
if (card.isFileOpen())
{
if (mesh_bed_leveling_flag == false && homing_flag == false) {
if (card.sdprinting)
{
MENU_ITEM_FUNCTION_P(_i("Pause print"), lcd_pause_print);////MSG_PAUSE_PRINT
}
else if(isPrintPaused)
{
#ifdef FANCHECK
if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_print);////MSG_RESUME_PRINT c=18
#else
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_print);////MSG_RESUME_PRINT c=18
#endif
}
MENU_ITEM_SUBMENU_P(_T(MSG_STOP_PRINT), lcd_sdcard_stop);
}
}
else if (lcd_commands_type == LcdCommands::Layer1Cal && mesh_bed_leveling_flag == false && homing_flag == false) {
//MENU_ITEM_SUBMENU_P(_T(MSG_STOP_PRINT), lcd_sdcard_stop);
}
else
{
if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal))
{
//if (farm_mode) MENU_ITEM_SUBMENU_P(MSG_FARM_CARD_MENU, lcd_farm_sdcard_menu);
/*else*/ {
bMain=true; // flag ('fake parameter') for 'lcd_sdcard_menu()' function
MENU_ITEM_SUBMENU_P(_T(MSG_CARD_MENU), lcd_sdcard_menu);
}
}
#if SDCARDDETECT < 1
MENU_ITEM_GCODE_P(_i("Change SD card"), PSTR("M21")); // SD-card changed by user////MSG_CNG_SDCARD
#endif
} }
} else
{
bMain=true; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function
MENU_ITEM_SUBMENU_P(_i("No SD card"), lcd_sdcard_menu);////MSG_NO_CARD
#if SDCARDDETECT < 1
MENU_ITEM_GCODE_P(_i("Init. SD card"), PSTR("M21")); // Manually initialize the SD-card via user interface////MSG_INIT_SDCARD
#endif
}
#endif
if(!isPrintPaused && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) if (farm_mode)
{ MENU_ITEM_FUNCTION_P(_T(MSG_FILAMENTCHANGE), lcd_colorprint_change);//8
if (!farm_mode)
{ if ( moves_planned() || PRINTER_ACTIVE ) {
const int8_t sheet = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)); MENU_ITEM_SUBMENU_P(_i("Tune"), lcd_tune_menu);////MSG_TUNE
const int8_t nextSheet = eeprom_next_initialized_sheet(sheet); } else {
if ((nextSheet >= 0) && (sheet != nextSheet)) // show menu only if we have 2 or more sheets initialized MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT
{ }
MENU_ITEM_FUNCTION_E(EEPROM_Sheets_base->s[sheet], eeprom_switch_to_next_sheet);
if (mesh_bed_leveling_flag == false && homing_flag == false && !isPrintPaused) {
if (is_usb_printing) {
MENU_ITEM_FUNCTION_P(_T(MSG_PAUSE_PRINT), lcd_pause_usb_print);////MSG_PAUSE_PRINT c=18
} else if (IS_SD_PRINTING) {
MENU_ITEM_FUNCTION_P(_T(MSG_PAUSE_PRINT), lcd_pause_print);////MSG_PAUSE_PRINT c=18
} }
} }
} if(isPrintPaused)
{
#ifdef FANCHECK
if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))
#endif //FANCHECK
{
if (is_usb_printing) {
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_usb_print);////MSG_RESUME_PRINT c=18
} else {
MENU_ITEM_SUBMENU_P(_T(MSG_RESUME_PRINT), lcd_resume_print);////MSG_RESUME_PRINT c=18
}
}
}
if((IS_SD_PRINTING || is_usb_printing || isPrintPaused) && (custom_message_type != CustomMsg::MeshBedLeveling)) {
MENU_ITEM_SUBMENU_P(_T(MSG_STOP_PRINT), lcd_sdcard_stop);
}
#ifdef SDSUPPORT //!@todo SDSUPPORT undefined creates several issues in source code
if (card.cardOK || lcd_commands_type == LcdCommands::Layer1Cal) {
if (!card.isFileOpen()) {
if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) {
//if (farm_mode) MENU_ITEM_SUBMENU_P(MSG_FARM_CARD_MENU, lcd_farm_sdcard_menu);
/*else*/{
bMain=true; // flag ('fake parameter') for 'lcd_sdcard_menu()' function
MENU_ITEM_SUBMENU_P(_T(MSG_CARD_MENU), lcd_sdcard_menu);
}
}
#if SDCARDDETECT < 1
MENU_ITEM_GCODE_P(_i("Change SD card"), PSTR("M21")); // SD-card changed by user////MSG_CNG_SDCARD
#endif //SDCARDDETECT
}
} else {
bMain=true; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function
MENU_ITEM_SUBMENU_P(_i("No SD card"), lcd_sdcard_menu);////MSG_NO_CARD
#if SDCARDDETECT < 1
MENU_ITEM_GCODE_P(_i("Init. SD card"), PSTR("M21")); // Manually initialize the SD-card via user interface////MSG_INIT_SDCARD
#endif //SDCARDDETECT
}
#endif //SDSUPPORT
if(!isPrintPaused && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) {
if (!farm_mode) {
const int8_t sheet = eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet));
const int8_t nextSheet = eeprom_next_initialized_sheet(sheet);
if ((nextSheet >= 0) && (sheet != nextSheet)) { // show menu only if we have 2 or more sheets initialized
MENU_ITEM_FUNCTION_E(EEPROM_Sheets_base->s[sheet], eeprom_switch_to_next_sheet);
}
}
}
if ( ! ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal) ) ) if ( ! ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LcdCommands::Layer1Cal) ) ) {
{ if (mmu_enabled) {
if (mmu_enabled) MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
{ MENU_ITEM_SUBMENU_P(_i("Load to nozzle"), mmu_load_to_nozzle_menu);
MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
MENU_ITEM_SUBMENU_P(_i("Load to nozzle"), mmu_load_to_nozzle_menu);
//-// MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); //-// MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload);
//bFilamentFirstRun=true; //bFilamentFirstRun=true;
MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), mmu_unload_filament); MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), mmu_unload_filament);
MENU_ITEM_SUBMENU_P(_T(MSG_EJECT_FILAMENT), mmu_fil_eject_menu); MENU_ITEM_SUBMENU_P(_T(MSG_EJECT_FILAMENT), mmu_fil_eject_menu);
#ifdef MMU_HAS_CUTTER #ifdef MMU_HAS_CUTTER
MENU_ITEM_SUBMENU_P(_T(MSG_CUT_FILAMENT), mmu_cut_filament_menu); MENU_ITEM_SUBMENU_P(_T(MSG_CUT_FILAMENT), mmu_cut_filament_menu);
#endif //MMU_HAS_CUTTER #endif //MMU_HAS_CUTTER
} } else {
else
{
#ifdef SNMM #ifdef SNMM
MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu); MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu);
MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1 MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1
#endif #endif
#ifdef FILAMENT_SENSOR #ifdef FILAMENT_SENSOR
if ((fsensor_autoload_enabled == true) && (fsensor_enabled == true) && (mmu_enabled == false)) if ((fsensor_autoload_enabled == true) && (fsensor_enabled == true) && (mmu_enabled == false))
MENU_ITEM_SUBMENU_P(_i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=18 MENU_ITEM_SUBMENU_P(_i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=18
else else
#endif //FILAMENT_SENSOR #endif //FILAMENT_SENSOR
{ {
bFilamentFirstRun=true; bFilamentFirstRun=true;
MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), lcd_LoadFilament); MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), lcd_LoadFilament);
} }
bFilamentFirstRun=true; bFilamentFirstRun=true;
MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament); MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament);
} }
MENU_ITEM_SUBMENU_P(_T(MSG_SETTINGS), lcd_settings_menu); MENU_ITEM_SUBMENU_P(_T(MSG_SETTINGS), lcd_settings_menu);
if(!isPrintPaused) MENU_ITEM_SUBMENU_P(_T(MSG_MENU_CALIBRATION), lcd_calibration_menu); if(!isPrintPaused) MENU_ITEM_SUBMENU_P(_T(MSG_MENU_CALIBRATION), lcd_calibration_menu);
}
if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal)) {
MENU_ITEM_SUBMENU_P(_i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS
}
}
if (!is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal))
{
MENU_ITEM_SUBMENU_P(_i("Statistics "), lcd_menu_statistics);////MSG_STATISTICS
}
#if defined(TMC2130) || defined(FILAMENT_SENSOR) #if defined(TMC2130) || defined(FILAMENT_SENSOR)
MENU_ITEM_SUBMENU_P(_i("Fail stats"), lcd_menu_fails_stats); MENU_ITEM_SUBMENU_P(_i("Fail stats"), lcd_menu_fails_stats);
#endif #endif
if (mmu_enabled) { if (mmu_enabled) {
MENU_ITEM_SUBMENU_P(_i("Fail stats MMU"), lcd_menu_fails_stats_mmu); MENU_ITEM_SUBMENU_P(_i("Fail stats MMU"), lcd_menu_fails_stats_mmu);
} }
MENU_ITEM_SUBMENU_P(_i("Support"), lcd_support_menu);////MSG_SUPPORT MENU_ITEM_SUBMENU_P(_i("Support"), lcd_support_menu);////MSG_SUPPORT
#ifdef LCD_TEST #ifdef LCD_TEST
MENU_ITEM_SUBMENU_P(_i("W25x20CL init"), lcd_test_menu);////MSG_SUPPORT MENU_ITEM_SUBMENU_P(_i("W25x20CL init"), lcd_test_menu);////MSG_SUPPORT
#endif //LCD_TEST #endif //LCD_TEST
MENU_END(); MENU_END();
} }
@ -6976,10 +6997,8 @@ static void lcd_tune_menu()
SETTINGS_CUTTER; SETTINGS_CUTTER;
if(farm_mode) MENU_ITEM_TOGGLE_P(_T(MSG_FANS_CHECK), fans_check_enabled ? _T(MSG_ON) : _T(MSG_OFF), lcd_set_fan_check);
{
MENU_ITEM_TOGGLE_P(_T(MSG_FANS_CHECK), fans_check_enabled ? _T(MSG_ON) : _T(MSG_OFF), lcd_set_fan_check);
}
#ifdef TMC2130 #ifdef TMC2130
if(!farm_mode) if(!farm_mode)

View File

@ -44,6 +44,7 @@ void lcd_change_success();
void lcd_loading_color(); void lcd_loading_color();
void lcd_sdcard_stop(); void lcd_sdcard_stop();
void lcd_pause_print(); void lcd_pause_print();
void lcd_pause_usb_print();
void lcd_resume_print(); void lcd_resume_print();
void lcd_print_stop(); void lcd_print_stop();
void prusa_statistics(int _message, uint8_t _col_nr = 0); void prusa_statistics(int _message, uint8_t _col_nr = 0);

View File

@ -544,7 +544,7 @@
# #
"Nozzle FAN" "Nozzle FAN"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
#MSG_PID_RUNNING c=20 r=1 #MSG_PID_RUNNING c=20 r=1

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"Vent. trysky" "Vent. trysky"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Pozastavit tisk" "Pozastavit tisk"

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"Duesevent." "Duesevent."
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Druck pausieren" "Druck pausieren"

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"Vent. capa" "Vent. capa"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Pausar impresion" "Pausar impresion"

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"Vent. buse" "Vent. buse"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Pause de l'impr." "Pause de l'impr."

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"Ventola estrusore" "Ventola estrusore"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Metti in pausa" "Metti in pausa"

View File

@ -726,7 +726,7 @@
"Nozzle FAN" "Nozzle FAN"
"WentHotend" "WentHotend"
#MSG_PAUSE_PRINT #MSG_PAUSE_PRINT c=18
"Pause print" "Pause print"
"Wstrzymanie wydruku" "Wstrzymanie wydruku"