diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 1d6c50ec6e..d58be716f1 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -1036,4 +1036,17 @@ bool CardReader::ToshibaFlashAir_GetIP(uint8_t *ip) return card.readExtMemory(1, 1, 0x400+0x150, 4, ip); } +//Used for Reprint action +bool CardReader::FileExists(const char* filename) +{ + bool exists = false; + + if (file.open(curDir, filename, O_READ)) + { + exists = true; + file.close(); + } + return exists; +} + #endif //SDSUPPORT diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index 9fb3f0b4f4..f66722c117 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -84,6 +84,9 @@ class CardReader void ToshibaFlashAir_enable(bool enable) { card.setFlashAirCompatible(enable); } bool ToshibaFlashAir_GetIP(uint8_t *ip); + //Reprint + bool FileExists(const char* filename); + public: bool saving; bool logging; diff --git a/Firmware/messages.cpp b/Firmware/messages.cpp index afdda7d0d0..8ff426df72 100644 --- a/Firmware/messages.cpp +++ b/Firmware/messages.cpp @@ -187,7 +187,7 @@ extern const char MSG_LOAD_ALL[] PROGMEM_I1 = ISTR("Load All"); ////MSG_LOAD_ALL extern const char MSG_NOZZLE_CNG_MENU [] PROGMEM_I1 = ISTR("Nozzle change");////MSG_NOZZLE_CNG_MENU c=18 extern const char MSG_NOZZLE_CNG_READ_HELP [] PROGMEM_I1 = ISTR("For a Nozzle change please read\nprusa.io/nozzle-mk3s");////MSG_NOZZLE_CNG_READ_HELP c=20 r=4 extern const char MSG_NOZZLE_CNG_CHANGED [] PROGMEM_I1 = ISTR("Hotend at 280C! Nozzle changed and tightened to specs?");////MSG_NOZZLE_CNG_CHANGED c=20 r=6 - +extern const char MSG_REPRINT [] PROGMEM_I1 = ISTR("Reprint"); ////MSG_REPRINT c=18 //not internationalized messages #if 0 const char MSG_FW_VERSION_BETA[] PROGMEM_N1 = "You are using a BETA firmware version! It is in a development state! Use this version with CAUTION as it may DAMAGE the printer!"; ////MSG_FW_VERSION_BETA c=20 r=8 @@ -227,6 +227,7 @@ const char MSG_OCTOPRINT_PAUSED[] PROGMEM_N1 = "// action:paused"; //// const char MSG_OCTOPRINT_ASK_RESUME[] PROGMEM_N1 = "// action:resume"; //// const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; //// const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; //// +const char MSG_OCTOPRINT_REPRINT[] PROGMEM_N1 = "// action:reprint"; //// const char MSG_FANCHECK_HOTEND[] PROGMEM_N1 = "Err:HOTEND FAN ERROR"; ////c=20 const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err:PRINT FAN ERROR"; ////c=20 const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20 diff --git a/Firmware/messages.h b/Firmware/messages.h index 3b5511a16c..bf48dbad97 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -188,6 +188,7 @@ extern const char MSG_LOAD_ALL[]; extern const char MSG_NOZZLE_CNG_MENU []; extern const char MSG_NOZZLE_CNG_READ_HELP []; extern const char MSG_NOZZLE_CNG_CHANGED []; +extern const char MSG_REPRINT []; //not internationalized messages #if 0 @@ -230,6 +231,7 @@ extern const char MSG_OCTOPRINT_PAUSED[]; extern const char MSG_OCTOPRINT_ASK_RESUME[]; extern const char MSG_OCTOPRINT_RESUMED[]; extern const char MSG_OCTOPRINT_CANCEL[]; +extern const char MSG_OCTOPRINT_REPRINT[]; extern const char MSG_FANCHECK_HOTEND[]; extern const char MSG_FANCHECK_PRINT[]; extern const char MSG_M112_KILL[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 76996806ab..7a78516cec 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -45,6 +45,7 @@ #include "Prusa_farm.h" + static void lcd_sd_updir(); static void lcd_mesh_bed_leveling_settings(); #ifdef LCD_BL_PIN @@ -257,6 +258,10 @@ uint8_t selected_sheet = 0; bool bMain; // flag (i.e. 'fake parameter') for 'lcd_sdcard_menu()' function bool bSettings; // flag (i.e. 'fake parameter') for 'lcd_hw_setup_menu()' function +//action: Reprint +bool enableReprint = false; +bool enableReprintUSB = false; + static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* longFilename) { uint8_t len = LCD_WIDTH - 1; @@ -377,6 +382,14 @@ void lcdui_print_percent_done(void) } sprintf_P(per, num?_N("%3d"):_N("---"), calc_percent_done()); lcd_printf_P(_N("%3S%3s%%"), src, per); + enableReprint = true; + if(usb_timer.running()) + { + enableReprintUSB = true; + }else + { + enableReprintUSB = false; + } } // Print extruder status (5 chars total) @@ -5181,6 +5194,18 @@ static void lcd_main_menu() MENU_ITEM_FUNCTION_P(PSTR("power panic"), uvlo_); #endif //TMC2130_DEBUG + // Menu item for reprint + if(!printer_active() && enableReprint && card.cardOK && !enableReprintUSB && (heating_status == HeatingStatus::NO_HEATING)) + { + MENU_ITEM_SUBMENU_P(_T(MSG_REPRINT), reprint_from_eeprom); + }else if(!printer_active() && enableReprintUSB && (heating_status == HeatingStatus::NO_HEATING)) + { + MENU_ITEM_SUBMENU_P(_T(MSG_REPRINT), lcd_reprint_usb_print); + }else if (!card.cardOK) + { + enableReprint = false; + enableReprintUSB = false; + } // Menu is never shown when idle if (babystep_allowed_strict() && (printJobOngoing() || lcd_commands_type == LcdCommands::Layer1Cal)) MENU_ITEM_SUBMENU_P(_T(MSG_BABYSTEP_Z), lcd_babystep_z);//8 @@ -7427,3 +7452,54 @@ void lcd_heat_bed_on_load_toggle() value = !value; eeprom_update_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, value); } + +void reprint_from_eeprom() { + char filename[13]; + char altfilename[13]; + uint8_t depth = 0; + char dir_name[9]; + + enableReprint=false; + + depth = eeprom_read_byte((uint8_t*)EEPROM_DIR_DEPTH); + + for (int i = 0; i < depth; i++) { + for (int j = 0; j < 8; j++) { + dir_name[j] = eeprom_read_byte((uint8_t*)EEPROM_DIRS + j + 8 * i); + } + dir_name[8] = '\0'; + card.chdir(dir_name, false); + } + + for (int i = 0; i < 8; i++) { + filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i); + } + filename[8] = '\0'; + + strcpy(altfilename,filename); + if (!card.FileExists(altfilename)) + { + strcat_P(filename, PSTR(".gco")); + if (card.FileExists(filename)) + { + strcpy(altfilename,filename); + }else + { + strcat_P(altfilename, PSTR(".g")); + } + } + // M23: Select SD file + enquecommandf_P(MSG_M23, altfilename); + // M24: Start/resume SD print + enquecommand_P(MSG_M24); + lcd_return_to_status(); +} + +//! @brief Send host action "reprint" +void lcd_reprint_usb_print() +{ + SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_REPRINT); + enableReprint=false; + enableReprintUSB=false; + lcd_return_to_status(); +} diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index c340fef95c..39ab8a556c 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -19,6 +19,9 @@ void ultralcd_init(); #define LCD_STATUS_INFO_TIMEOUT 20000 #define LCD_STATUS_DELAYED_TIMEOUT 4000 +// Reprint +void reprint_from_eeprom(); + // Set the current status message (equivalent to LCD_STATUS_NONE) void lcdui_print_status_line(void); void lcd_clearstatus(); @@ -54,6 +57,7 @@ void lcd_loading_color(); void lcd_sdcard_stop(); void lcd_pause_print(); void lcd_pause_usb_print(); +void lcd_reprint_usb_print(); void lcd_resume_print(); void lcd_print_stop(); // interactive print stop void print_stop(bool interactive=false); diff --git a/lang/po/Firmware.pot b/lang/po/Firmware.pot index cf88ff9572..21fd45de38 100644 --- a/lang/po/Firmware.pot +++ b/lang/po/Firmware.pot @@ -1750,6 +1750,11 @@ msgstr "" msgid "Rename" msgstr "" +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "" + #. MSG_DESC_INVALID_TOOL c=20 r=8 #: ../../Firmware/mmu2/errors_list.h:280 ../../Firmware/mmu2/errors_list.h:334 msgid "" diff --git a/lang/po/Firmware_cs.po b/lang/po/Firmware_cs.po index c8b357d392..4aa6c42a6e 100644 --- a/lang/po/Firmware_cs.po +++ b/lang/po/Firmware_cs.po @@ -2555,6 +2555,11 @@ msgstr "Citlivost" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Mesh Bed Leveling selhal. Spusťte kalibraci osy Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Tisk. znovu" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vyjmete stary filament a stisknete tlacitko pro zavedeni noveho." diff --git a/lang/po/Firmware_de.po b/lang/po/Firmware_de.po index bd0ad9edd0..58e59ab41b 100644 --- a/lang/po/Firmware_de.po +++ b/lang/po/Firmware_de.po @@ -2583,6 +2583,11 @@ msgstr "Sensitivität" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "MeshBett Ausgleich fehlgeschlagen. Z Kalibrierung ausführen." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Druck wiederholen" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Entferne das alte Fil. und drücke den Knopf, um das neue zu laden." diff --git a/lang/po/Firmware_es.po b/lang/po/Firmware_es.po index 8cc80a3eca..632c2c44ee 100644 --- a/lang/po/Firmware_es.po +++ b/lang/po/Firmware_es.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilidad" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Nivelación fallida. Ejecute la calibración Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Volver a imprimir" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Retira el fil. viejo y presiona el dial para comenzar a cargar el nuevo." diff --git a/lang/po/Firmware_fr.po b/lang/po/Firmware_fr.po index 00b6788c2a..cdbb76dcd6 100644 --- a/lang/po/Firmware_fr.po +++ b/lang/po/Firmware_fr.po @@ -2144,7 +2144,6 @@ msgstr "" "L'idler ne peut pas se mettre correctement à zéro. Vérifiez s'il y a quoi " "que ce soit qui bloque son mouvement." - #. MSG_DESC_SELECTOR_CANNOT_HOME c=20 r=8 #: ../../Firmware/mmu2/errors_list.h:249 ../../Firmware/mmu2/errors_list.h:305 msgid "" @@ -2590,6 +2589,11 @@ msgstr "Sensibilité" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Mesh bed leveling a échoué. Veuillez procéder à l'étalonnage Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Ré-imprimer" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Retirez l'ancien fil. puis appuyez sur le bouton pour charger le nouveau." diff --git a/lang/po/Firmware_hr.po b/lang/po/Firmware_hr.po index fbe1b8f082..4b459afb63 100644 --- a/lang/po/Firmware_hr.po +++ b/lang/po/Firmware_hr.po @@ -2572,6 +2572,11 @@ msgstr "Osjetljivost" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Niveliranje podloge nije uspijelo. Pokrenite Z kalibraciju." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Ponovno tiskanje" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Uklonite stari fil. i pritisnite gumb za pocetak stavljanja novog." diff --git a/lang/po/Firmware_hu.po b/lang/po/Firmware_hu.po index 23a201feb8..99ed9fc609 100644 --- a/lang/po/Firmware_hu.po +++ b/lang/po/Firmware_hu.po @@ -2577,6 +2577,11 @@ msgstr "Érzékenység" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Sikertelen asztal szintezés. Kérjük, futtasd a Z kalibrálást." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Újranyomtatás" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vedd ki a regi fil., majd nyomd meg a gombot az uj fil. betoltesehez." diff --git a/lang/po/Firmware_it.po b/lang/po/Firmware_it.po index d6998c891b..a7f7830187 100644 --- a/lang/po/Firmware_it.po +++ b/lang/po/Firmware_it.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilità" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Livellamento piano fallito. Si prega di eseguire la calibrazione Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Ristampa" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Rimuovi il fil. precedente e premi la manopola per caricare il nuovo." diff --git a/lang/po/Firmware_nl.po b/lang/po/Firmware_nl.po index 1e8e62e616..306abd519c 100644 --- a/lang/po/Firmware_nl.po +++ b/lang/po/Firmware_nl.po @@ -2580,6 +2580,11 @@ msgstr "Sensitiviteit" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Bed leveling mislukt. Voer de Z-kalibratie uit." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Herhaal druk" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Verwijder de oude filament en druk op de knop om nieuwe filament te laden." diff --git a/lang/po/Firmware_no.po b/lang/po/Firmware_no.po index a0f7db8837..5ea8edfcc0 100644 --- a/lang/po/Firmware_no.po +++ b/lang/po/Firmware_no.po @@ -2554,6 +2554,11 @@ msgstr "Sensitivitet" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Sengeplanering feilet. Kjør Z-kalibrering." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Nytt opptrykk" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Ta bort det gamle filamentet og trykk valghjulet for å laste et nytt." diff --git a/lang/po/Firmware_pl.po b/lang/po/Firmware_pl.po index d1788d1254..a8617c3b32 100644 --- a/lang/po/Firmware_pl.po +++ b/lang/po/Firmware_pl.po @@ -2572,6 +2572,11 @@ msgstr "Czułość" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Poziomowanie stołu nieudane. Proszę uruchomić kalibrację Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Przedruk" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Wyciągnij poprzedni filament i naciśnij pokrętło aby załadować nowy." diff --git a/lang/po/Firmware_ro.po b/lang/po/Firmware_ro.po index 3880edca00..f759d82468 100644 --- a/lang/po/Firmware_ro.po +++ b/lang/po/Firmware_ro.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilitate" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Nivelarea patului a eșuat. Rulează Calibrare Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Repetă print" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Scoateți fil. vechi și apăsați butonul pentru a încărca unul nou." diff --git a/lang/po/Firmware_sk.po b/lang/po/Firmware_sk.po index 8c5a4d8701..9934b8cbd4 100644 --- a/lang/po/Firmware_sk.po +++ b/lang/po/Firmware_sk.po @@ -2560,6 +2560,11 @@ msgstr "Citlivosť" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Vyrovnanie platne zlyhalo. Spustite kalibráciu Z." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Vytlačiť znova" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vyberte starý filament a stlačte tlačidlo pre zavedenie nového." diff --git a/lang/po/Firmware_sv.po b/lang/po/Firmware_sv.po index 7ed3119079..1d287ec623 100644 --- a/lang/po/Firmware_sv.po +++ b/lang/po/Firmware_sv.po @@ -2567,6 +2567,11 @@ msgstr "Känslighet" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Bäddnivelleringen felade. Kör Z-kalibrering." +#. MSG_REPRINT c=18 +#: ../../Firmware/messages.cpp:190 ../../Firmware/ultralcd.cpp:5191 +msgid "Reprint" +msgstr "Upprepa trycket" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Ta bort det gamla fil. och tryck på knappen för att börja ladda nytt."