incomplete file check ported from MK2: initial version
This commit is contained in:
parent
443dc53145
commit
44218a1b53
@ -512,6 +512,8 @@ const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic o
|
||||
#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
|
||||
|
||||
// How much shall the print head be lifted on power panic?
|
||||
// Ideally the Z axis will reach a zero phase of the stepper driver on power outage. To simplify this,
|
||||
// UVLO_Z_AXIS_SHIFT shall be an integer multiply of the stepper driver cycle, that is 4x full step.
|
||||
|
@ -379,6 +379,7 @@ float temp_compensation_pinda_thermistor_offset(float temperature_pinda);
|
||||
|
||||
void wait_for_heater(long codenum);
|
||||
void serialecho_temperatures();
|
||||
bool check_commands();
|
||||
|
||||
void uvlo_();
|
||||
void recover_print(uint8_t automatic);
|
||||
|
@ -1602,6 +1602,20 @@ inline void gcode_M900() {
|
||||
}
|
||||
#endif // LIN_ADVANCE
|
||||
|
||||
bool check_commands() {
|
||||
bool end_command_found = false;
|
||||
|
||||
while (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;
|
||||
|
||||
}
|
||||
|
||||
#ifdef TMC2130
|
||||
bool calibrate_z_auto()
|
||||
{
|
||||
|
@ -468,6 +468,11 @@ void CardReader::removeFile(char* name)
|
||||
|
||||
}
|
||||
|
||||
uint32_t CardReader::getFileSize()
|
||||
{
|
||||
return filesize;
|
||||
}
|
||||
|
||||
void CardReader::getStatus()
|
||||
{
|
||||
if(sdprinting){
|
||||
@ -669,8 +674,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();
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ public:
|
||||
void release();
|
||||
void startFileprint();
|
||||
void pauseSDPrint();
|
||||
uint32_t getFileSize();
|
||||
void getStatus();
|
||||
void printingHasFinished();
|
||||
|
||||
|
@ -621,6 +621,13 @@ const char * const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM] PROGMEM = {
|
||||
MSG_FILAMENT_LOADING_T3_CZ
|
||||
};
|
||||
|
||||
const char MSG_FILE_INCOMPLETE_EN[] PROGMEM = "File incomplete. Continue anyway?";
|
||||
const char MSG_FILE_INCOMPLETE_CZ[] PROGMEM = "Soubor nekompletni. Pokracovat?";
|
||||
const char * const MSG_FILE_INCOMPLETE_LANG_TABLE[LANG_NUM] PROGMEM = {
|
||||
MSG_FILE_INCOMPLETE_EN,
|
||||
MSG_FILE_INCOMPLETE_CZ
|
||||
};
|
||||
|
||||
const char MSG_FILE_PRINTED_EN[] PROGMEM = "Done printing file";
|
||||
const char * const MSG_FILE_PRINTED_LANG_TABLE[1] PROGMEM = {
|
||||
MSG_FILE_PRINTED_EN
|
||||
|
@ -222,6 +222,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[LANG_NUM];
|
||||
#define MSG_FILE_INCOMPLETE LANG_TABLE_SELECT(MSG_FILE_INCOMPLETE_LANG_TABLE)
|
||||
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];
|
||||
|
@ -351,4 +351,5 @@
|
||||
#define MSG_PLACE_STEEL_SHEET "Umistete prosim tiskovy plat na heatbed"
|
||||
#define MSG_RECOVER_PRINT "Detekovan vypadek proudu.Obnovit tisk?"
|
||||
#define MSG_PRESS_TO_UNLOAD "Pro vysunuti filamentu stisknete prosim tlacitko"
|
||||
#define MSG_UNLOAD_SUCCESSFULL "Opakovat vysunuti filamentu?"
|
||||
#define MSG_UNLOAD_SUCCESSFULL "Opakovat vysunuti filamentu?"
|
||||
#define MSG_FILE_INCOMPLETE "Soubor nekompletni. Pokracovat?"
|
@ -368,3 +368,5 @@
|
||||
#define(length=17, lines=1) MSG_FANS_CHECK_OFF "Fans check [off]"
|
||||
#define(length=20, lines=4) MSG_PRESS_TO_UNLOAD "Please press the knob to unload filament"
|
||||
#define(length=20, lines=2) MSG_UNLOAD_SUCCESSFULL "Repeat unloading filament?"
|
||||
#define(length=20, lines=2) MSG_FILE_INCOMPLETE "File incomplete. Continue anyway?"
|
||||
|
||||
|
@ -6156,37 +6156,59 @@ 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);
|
||||
for (int i = 0; i < 8; i++) {
|
||||
eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, filename[i]);
|
||||
|
||||
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) {
|
||||
|
||||
uint8_t depth = (uint8_t)card.getWorkDirDepth();
|
||||
uint8_t depth = (uint8_t)card.getWorkDirDepth();
|
||||
|
||||
//char dir_name[9];
|
||||
for (uint8_t i = 0; i < depth; i++) {
|
||||
for (int j = 0; j < 8; j++) {
|
||||
eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8 * i, dir_names[i][j]);
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < depth; i++) {
|
||||
//card.getDirName(dir_name, i + 1);
|
||||
//dir_name[8] = '\0';
|
||||
//MYSERIAL.println(dir_name);
|
||||
for (int j = 0; j < 8; j++) {
|
||||
eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8*i, dir_names[i][j]);
|
||||
//eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8 * i, dir_name[j]);
|
||||
}
|
||||
eeprom_write_byte((uint8_t*)EEPROM_DIR_DEPTH, depth);
|
||||
|
||||
enquecommand(cmd);
|
||||
enquecommand_P(PSTR("M24"));
|
||||
}
|
||||
//MYSERIAL.println(int(depth));
|
||||
eeprom_write_byte((uint8_t*)EEPROM_DIR_DEPTH, depth);
|
||||
|
||||
enquecommand_P(PSTR("M24"));
|
||||
lcd_return_to_status();
|
||||
}
|
||||
static void menu_action_sddirectory(const char* filename, char* longFilename)
|
||||
|
Loading…
Reference in New Issue
Block a user