incomplete file check ported from MK2: initial version
This commit is contained in:
parent
443dc53145
commit
44218a1b53
10 changed files with 75 additions and 18 deletions
|
@ -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
|
#define DEFAULT_RETRACTION 1 //used for PINDA temp calibration and pause print
|
||||||
#endif
|
#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?
|
// 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,
|
// 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.
|
// 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 wait_for_heater(long codenum);
|
||||||
void serialecho_temperatures();
|
void serialecho_temperatures();
|
||||||
|
bool check_commands();
|
||||||
|
|
||||||
void uvlo_();
|
void uvlo_();
|
||||||
void recover_print(uint8_t automatic);
|
void recover_print(uint8_t automatic);
|
||||||
|
|
|
@ -1602,6 +1602,20 @@ inline void gcode_M900() {
|
||||||
}
|
}
|
||||||
#endif // LIN_ADVANCE
|
#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
|
#ifdef TMC2130
|
||||||
bool calibrate_z_auto()
|
bool calibrate_z_auto()
|
||||||
{
|
{
|
||||||
|
|
|
@ -468,6 +468,11 @@ void CardReader::removeFile(char* name)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t CardReader::getFileSize()
|
||||||
|
{
|
||||||
|
return filesize;
|
||||||
|
}
|
||||||
|
|
||||||
void CardReader::getStatus()
|
void CardReader::getStatus()
|
||||||
{
|
{
|
||||||
if(sdprinting){
|
if(sdprinting){
|
||||||
|
@ -669,8 +674,8 @@ void CardReader::printingHasFinished()
|
||||||
sdprinting = false;
|
sdprinting = false;
|
||||||
if(SD_FINISHED_STEPPERRELEASE)
|
if(SD_FINISHED_STEPPERRELEASE)
|
||||||
{
|
{
|
||||||
//finishAndDisableSteppers();
|
finishAndDisableSteppers();
|
||||||
enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
//enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND));
|
||||||
}
|
}
|
||||||
autotempShutdown();
|
autotempShutdown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
void release();
|
void release();
|
||||||
void startFileprint();
|
void startFileprint();
|
||||||
void pauseSDPrint();
|
void pauseSDPrint();
|
||||||
|
uint32_t getFileSize();
|
||||||
void getStatus();
|
void getStatus();
|
||||||
void printingHasFinished();
|
void printingHasFinished();
|
||||||
|
|
||||||
|
|
|
@ -621,6 +621,13 @@ const char * const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM] PROGMEM = {
|
||||||
MSG_FILAMENT_LOADING_T3_CZ
|
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 MSG_FILE_PRINTED_EN[] PROGMEM = "Done printing file";
|
||||||
const char * const MSG_FILE_PRINTED_LANG_TABLE[1] PROGMEM = {
|
const char * const MSG_FILE_PRINTED_LANG_TABLE[1] PROGMEM = {
|
||||||
MSG_FILE_PRINTED_EN
|
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)
|
#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];
|
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)
|
#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];
|
extern const char* const MSG_FILE_PRINTED_LANG_TABLE[1];
|
||||||
#define MSG_FILE_PRINTED LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_PRINTED_LANG_TABLE, 0)
|
#define MSG_FILE_PRINTED LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_PRINTED_LANG_TABLE, 0)
|
||||||
extern const char* const MSG_FILE_SAVED_LANG_TABLE[1];
|
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_PLACE_STEEL_SHEET "Umistete prosim tiskovy plat na heatbed"
|
||||||
#define MSG_RECOVER_PRINT "Detekovan vypadek proudu.Obnovit tisk?"
|
#define MSG_RECOVER_PRINT "Detekovan vypadek proudu.Obnovit tisk?"
|
||||||
#define MSG_PRESS_TO_UNLOAD "Pro vysunuti filamentu stisknete prosim tlacitko"
|
#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=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=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_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) {
|
static void menu_action_function(menuFunc_t data) {
|
||||||
(*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)
|
static void menu_action_sdfile(const char* filename, char* longFilename)
|
||||||
{
|
{
|
||||||
loading_flag = false;
|
loading_flag = false;
|
||||||
char cmd[30];
|
char cmd[30];
|
||||||
char* c;
|
char* c;
|
||||||
|
bool result = true;
|
||||||
sprintf_P(cmd, PSTR("M23 %s"), filename);
|
sprintf_P(cmd, PSTR("M23 %s"), filename);
|
||||||
for (c = &cmd[4]; *c; c++)
|
for (c = &cmd[4]; *c; c++)
|
||||||
*c = tolower(*c);
|
*c = tolower(*c);
|
||||||
enquecommand(cmd);
|
|
||||||
for (int i = 0; i < 8; i++) {
|
if (!check_file(filename)) {
|
||||||
eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, filename[i]);
|
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();
|
lcd_return_to_status();
|
||||||
}
|
}
|
||||||
static void menu_action_sddirectory(const char* filename, char* longFilename)
|
static void menu_action_sddirectory(const char* filename, char* longFilename)
|
||||||
|
|
Loading…
Add table
Reference in a new issue