From 1f77930e0168a76b9267c80c577ce95299afd739 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 7 Mar 2018 01:42:30 -0600 Subject: [PATCH] Rebuild SD file sort array on Stop SD Print (#9975) Thanks Chuck Hellebuyck. --- Marlin/cardreader.cpp | 18 ++++++++++++------ Marlin/cardreader.h | 8 +++++++- Marlin/malyanlcd.cpp | 6 +++++- Marlin/ultralcd.cpp | 6 +++++- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp index 860ea17a9c..c2a3e33a17 100644 --- a/Marlin/cardreader.cpp +++ b/Marlin/cardreader.cpp @@ -290,18 +290,25 @@ void CardReader::openAndPrintFile(const char *name) { void CardReader::startFileprint() { if (cardOK) { sdprinting = true; - #if ENABLED(SDCARD_SORT_ALPHA) + #if SD_RESORT flush_presort(); #endif } } -void CardReader::stopSDPrint() { +void CardReader::stopSDPrint( + #if SD_RESORT + const bool re_sort/*=false*/ + #endif +) { #if ENABLED(ADVANCED_PAUSE_FEATURE) did_pause_print = 0; #endif sdprinting = false; if (isFileOpen()) file.close(); + #if SD_RESORT + if (re_sort) presort(); + #endif } void CardReader::openLogFile(char* name) { @@ -664,14 +671,14 @@ int8_t CardReader::updir() { */ void CardReader::presort() { + // Throw away old sort index + flush_presort(); + // Sorting may be turned off #if ENABLED(SDSORT_GCODE) if (!sort_alpha) return; #endif - // Throw away old sort index - flush_presort(); - // If there are files, sort up to the limit uint16_t fileCnt = getnrfilenames(); if (fileCnt > 0) { @@ -904,7 +911,6 @@ void CardReader::printingHasFinished() { #if ENABLED(SDCARD_SORT_ALPHA) presort(); #endif - #if ENABLED(SD_REPRINT_LAST_SELECTED_FILE) lcd_reselect_last_file(); #endif diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index 7b5ccdb9f3..d0d3ae06f2 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -27,6 +27,8 @@ #if ENABLED(SDSUPPORT) +#define SD_RESORT ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_DYNAMIC_RAM) + #define MAX_DIR_DEPTH 10 // Maximum folder depth #include "SdFile.h" @@ -52,7 +54,11 @@ public: void release(); void openAndPrintFile(const char *name); void startFileprint(); - void stopSDPrint(); + void stopSDPrint( + #if SD_RESORT + const bool re_sort=false + #endif + ); void getStatus(); void printingHasFinished(); diff --git a/Marlin/malyanlcd.cpp b/Marlin/malyanlcd.cpp index aa60d22044..3a91e8c2dc 100644 --- a/Marlin/malyanlcd.cpp +++ b/Marlin/malyanlcd.cpp @@ -225,7 +225,11 @@ void process_lcd_p_command(const char* command) { case 'X': // cancel print write_to_lcd_P(PSTR("{SYS:CANCELING}")); - card.stopSDPrint(); + card.stopSDPrint( + #if SD_RESORT + true + #endif + ); clear_command_queue(); quickstop_stepper(); print_job_timer.stop(); diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index e0c15436a9..450842ee2b 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -845,7 +845,11 @@ void kill_screen(const char* lcd_msg) { } void lcd_sdcard_stop() { - card.stopSDPrint(); + card.stopSDPrint( + #if SD_RESORT + true + #endif + ); clear_command_queue(); quickstop_stepper(); print_job_timer.stop();