diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 24cce19bd..76274b292 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -362,6 +362,7 @@ void temp_compensation_start(); void wait_for_heater(long codenum); void serialecho_temperatures(); void proc_commands(); +bool check_commands(); #ifdef HOST_KEEPALIVE_FEATURE @@ -386,3 +387,4 @@ void gcode_M701(); #endif //ifndef marlin.h + diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index da848e0fa..218aad4bd 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1947,6 +1947,19 @@ static float probe_pt(float x, float y, float z_before) { } #endif // LIN_ADVANCE +bool check_commands() { + bool end_command_found = false; + + if (buflen) + { + if ((code_seen("M84")) || (code_seen("M 84"))) end_command_found = true; + if (!cmdbuffer_front_already_processed) + cmdqueue_pop_front(); + cmdbuffer_front_already_processed = false; + } + return end_command_found; +} + void homeaxis(int axis) { #define HOMEAXIS_DO(LETTER) \ ((LETTER##_MIN_PIN > -1 && LETTER##_HOME_DIR==-1) || (LETTER##_MAX_PIN > -1 && LETTER##_HOME_DIR==1)) diff --git a/Firmware/SdBaseFile.cpp b/Firmware/SdBaseFile.cpp index be04ab1a2..d8eca5fc8 100644 --- a/Firmware/SdBaseFile.cpp +++ b/Firmware/SdBaseFile.cpp @@ -277,6 +277,8 @@ int16_t SdBaseFile::fgets(char* str, int16_t num, char* delim) { * \return The value one, true, is returned for success and * the value zero, false, is returned for failure. */ + + bool SdBaseFile::getFilename(char* name) { if (!isOpen()) return false; diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index db20b6a86..27100077c 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -162,6 +162,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m } // while readDir } + void CardReader::ls() { lsAction=LS_SerialPrint; @@ -500,6 +501,11 @@ void CardReader::removeFile(char* name) } +uint32_t CardReader::getFileSize() +{ + return filesize; +} + void CardReader::getStatus() { if(sdprinting){ @@ -963,8 +969,8 @@ void CardReader::printingHasFinished() sdprinting = false; if(SD_FINISHED_STEPPERRELEASE) { - //finishAndDisableSteppers(); - enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND)); + finishAndDisableSteppers(); + //enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND)); } autotempShutdown(); #ifdef SDCARD_SORT_ALPHA diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index 3ef9ff297..dff3d263d 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -27,6 +27,7 @@ public: void release(); void startFileprint(); void pauseSDPrint(); + uint32_t getFileSize(); void getStatus(); void printingHasFinished(); diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index e947bc289..db86f577d 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -1092,6 +1092,11 @@ const char * const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_FILAMENT_LOADING_T3_DE }; +const char MSG_FILE_INCOMPLETE_EN[] PROGMEM = "File incomplete. Continue anyway?"; +const char * const MSG_FILE_INCOMPLETE_LANG_TABLE[1] PROGMEM = { + MSG_FILE_INCOMPLETE_EN +}; + const char MSG_FILE_PRINTED_EN[] PROGMEM = "Done printing file"; const char * const MSG_FILE_PRINTED_LANG_TABLE[1] PROGMEM = { MSG_FILE_PRINTED_EN diff --git a/Firmware/language_all.h b/Firmware/language_all.h index 8a951d299..e5cebaa3d 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -218,6 +218,8 @@ extern const char* const MSG_FILAMENT_LOADING_T2_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T2 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T2_LANG_TABLE) extern const char* const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T3 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T3_LANG_TABLE) +extern const char* const MSG_FILE_INCOMPLETE_LANG_TABLE[1]; +#define MSG_FILE_INCOMPLETE LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_INCOMPLETE_LANG_TABLE, 0) extern const char* const MSG_FILE_PRINTED_LANG_TABLE[1]; #define MSG_FILE_PRINTED LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_PRINTED_LANG_TABLE, 0) extern const char* const MSG_FILE_SAVED_LANG_TABLE[1]; diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 25209b417..61f2ef89e 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -316,6 +316,7 @@ #define(length=17, lines=1) MSG_SORT_ALPHA "Sort: [Alphabet]" #define(length=17, lines=1) MSG_SORT_NONE "Sort: [None]" #define(length=20, lines=1) MSG_SORTING "Sorting files" +#define MSG_FILE_INCOMPLETE "File incomplete. Continue anyway?" #define(length=17, lines=1) MSG_WIZARD "Wizard" #define MSG_WIZARD_LANGUAGE "Please choose your language" #define MSG_WIZARD_WELCOME "Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?" @@ -338,4 +339,4 @@ #define MSG_WIZARD_PLA_FILAMENT "Is it PLA filament?" #define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Please load PLA filament and then resume Wizard by rebooting the printer." #define MSG_PLA_FILAMENT_LOADED "Is PLA filament loaded?" -#define MSG_PLEASE_LOAD_PLA "Please load PLA filament first." \ No newline at end of file +#define MSG_PLEASE_LOAD_PLA "Please load PLA filament first." diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 9fa1759dc..35136f853 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -105,7 +105,7 @@ int lcd_commands_step=0; bool isPrintPaused = false; uint8_t farm_mode = 0; int farm_no = 0; -int farm_timer = 30; +int farm_timer = 8; int farm_status = 0; unsigned long allert_timer = millis(); bool printer_connected = true; @@ -408,15 +408,15 @@ static void lcd_status_screen() farm_timer--; if (farm_timer < 1) { - farm_timer = 180; + farm_timer = 10; prusa_statistics(0); } switch (farm_timer) { - case 45: + case 8: prusa_statistics(21); break; - case 10: + case 5: if (IS_SD_PRINTING) { prusa_statistics(20); @@ -2493,7 +2493,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { prusa_stat_printerstatus(status_number); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); - farm_timer = 5; + farm_timer = 4; break; case 21: // temperatures SERIAL_ECHO("{"); @@ -2520,7 +2520,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) { SERIAL_ECHOLN("}"); break; case 92: // Error - Min temp - SERIAL_ECHOLN("{[ERR:3]"); + SERIAL_ECHO("{[ERR:3]"); prusa_stat_farm_number(); SERIAL_ECHOLN("}"); break; @@ -4175,8 +4175,8 @@ unsigned char lcd_choose_color() { //----------------------------------------------------- unsigned char items_no = 2; const char *item[items_no]; - item[0] = "Black"; - item[1] = "Orange"; + item[0] = "Orange"; + item[1] = "Black"; //----------------------------------------------------- unsigned char active_rows; static int first = 0; @@ -4198,10 +4198,9 @@ unsigned char lcd_choose_color() { manage_heater(); manage_inactivity(true); - - if (abs((enc_dif - encoderDiff)) > 4) { - - if ((abs(enc_dif - encoderDiff)) > 1) { + proc_commands(); + if (abs((enc_dif - encoderDiff)) > 12) { + if (enc_dif > encoderDiff) { cursor_pos--; } @@ -4209,7 +4208,7 @@ unsigned char lcd_choose_color() { if (enc_dif < encoderDiff) { cursor_pos++; } - + if (cursor_pos > active_rows) { cursor_pos = active_rows; if (first < items_no - active_rows) { @@ -4235,7 +4234,6 @@ unsigned char lcd_choose_color() { lcd.print(">"); enc_dif = encoderDiff; delay(100); - } } @@ -4243,7 +4241,11 @@ unsigned char lcd_choose_color() { while (lcd_clicked()); delay(10); while (lcd_clicked()); - return(cursor_pos + first - 1); + switch(cursor_pos + first - 1) { + case 0: return 1; break; + case 1: return 0; break; + default: return 99; break; + } } } @@ -4258,7 +4260,7 @@ void lcd_confirm_print() int _ret = 0; int _t = 0; - + enc_dif = encoderDiff; lcd_implementation_clear(); lcd.setCursor(0, 0); @@ -4266,8 +4268,7 @@ void lcd_confirm_print() do { - - if (abs((enc_dif - encoderDiff)) > 2) { + if (abs(enc_dif - encoderDiff) > 12) { if (enc_dif > encoderDiff) { cursor_pos--; } @@ -4275,6 +4276,7 @@ void lcd_confirm_print() if (enc_dif < encoderDiff) { cursor_pos++; } + enc_dif = encoderDiff; } if (cursor_pos > 2) { cursor_pos = 2; } @@ -4319,9 +4321,10 @@ void lcd_confirm_print() NcTime = millis(); } } - + manage_heater(); manage_inactivity(); + proc_commands(); } while (_ret == 0); @@ -5504,16 +5507,43 @@ static void menu_action_setlang(unsigned char lang) { static void menu_action_function(menuFunc_t data) { (*data)(); } + +static bool check_file(const char* filename) { + bool result = false; + uint32_t filesize; + card.openFile(filename, true); + filesize = card.getFileSize(); + if (filesize > END_FILE_SECTION) { + card.setIndex(filesize - END_FILE_SECTION); + } + + while (!card.eof() && !result) { + card.sdprinting = true; + get_command(); + result = check_commands(); + } + card.printingHasFinished(); + strncpy_P(lcd_status_message, WELCOME_MSG, LCD_WIDTH); + return result; +} + static void menu_action_sdfile(const char* filename, char* longFilename) -{ +{ loading_flag = false; char cmd[30]; char* c; + bool result = true; sprintf_P(cmd, PSTR("M23 %s"), filename); for (c = &cmd[4]; *c; c++) - *c = tolower(*c); - enquecommand(cmd); - enquecommand_P(PSTR("M24")); + *c = tolower(*c); + if (!check_file(filename)) { + result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILE_INCOMPLETE, false, false); + lcd_update_enable(true); + } + if (result) { + enquecommand(cmd); + enquecommand_P(PSTR("M24")); + } lcd_return_to_status(); } static void menu_action_sddirectory(const char* filename, char* longFilename) diff --git a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h index ac0463370..27bece70c 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h @@ -403,4 +403,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h index bf748354b..e372831c4 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h @@ -403,4 +403,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h index 83917cb98..6093f8ac5 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h @@ -400,4 +400,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #endif +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h index fb3329db6..06ea61f83 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h @@ -402,4 +402,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #endif +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index d42400dcc..fc89c0656 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -400,4 +400,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #endif +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index 6c71bab92..5307ede95 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -402,4 +402,6 @@ THERMISTORS SETTINGS #define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print #endif +#define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete + #endif //__CONFIGURATION_PRUSA_H