Rebuild SD file sort array on Stop SD Print (#9976)

Thanks Chuck Hellebuyck.
This commit is contained in:
Scott Lahteine 2018-03-07 01:42:11 -06:00 committed by GitHub
parent 920d92aa46
commit 22a017a856
Signed by: GitHub
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 14 deletions

View file

@ -228,7 +228,11 @@ void process_lcd_p_command(const char* command) {
case 'X': case 'X':
// cancel print // cancel print
write_to_lcd_P(PSTR("{SYS:CANCELING}")); write_to_lcd_P(PSTR("{SYS:CANCELING}"));
card.stopSDPrint(); card.stopSDPrint(
#if SD_RESORT
true
#endif
);
clear_command_queue(); clear_command_queue();
quickstop_stepper(); quickstop_stepper();
print_job_timer.stop(); print_job_timer.stop();
@ -448,4 +452,4 @@ void lcd_setalertstatusPGM(const char* message) {
write_to_lcd(message_buffer); write_to_lcd(message_buffer);
} }
#endif // Malyan LCD #endif // MALYAN_LCD

View file

@ -856,7 +856,11 @@ void kill_screen(const char* lcd_msg) {
} }
void lcd_sdcard_stop() { void lcd_sdcard_stop() {
card.stopSDPrint(); card.stopSDPrint(
#if SD_RESORT
true
#endif
);
clear_command_queue(); clear_command_queue();
quickstop_stepper(); quickstop_stepper();
print_job_timer.stop(); print_job_timer.stop();

View file

@ -328,12 +328,19 @@ void CardReader::startFileprint() {
} }
} }
void CardReader::stopSDPrint() { void CardReader::stopSDPrint(
#if SD_RESORT
const bool re_sort/*=false*/
#endif
) {
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
did_pause_print = 0; did_pause_print = 0;
#endif #endif
sdprinting = false; sdprinting = false;
if (isFileOpen()) file.close(); if (isFileOpen()) file.close();
#if SD_RESORT
if (re_sort) presort();
#endif
} }
void CardReader::openLogFile(char* name) { void CardReader::openLogFile(char* name) {
@ -700,14 +707,14 @@ int8_t CardReader::updir() {
*/ */
void CardReader::presort() { void CardReader::presort() {
// Throw away old sort index
flush_presort();
// Sorting may be turned off // Sorting may be turned off
#if ENABLED(SDSORT_GCODE) #if ENABLED(SDSORT_GCODE)
if (!sort_alpha) return; if (!sort_alpha) return;
#endif #endif
// Throw away old sort index
flush_presort();
// If there are files, sort up to the limit // If there are files, sort up to the limit
uint16_t fileCnt = getnrfilenames(); uint16_t fileCnt = getnrfilenames();
if (fileCnt > 0) { if (fileCnt > 0) {
@ -940,7 +947,6 @@ void CardReader::printingHasFinished() {
#if ENABLED(SDCARD_SORT_ALPHA) #if ENABLED(SDCARD_SORT_ALPHA)
presort(); presort();
#endif #endif
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE) #if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
lcd_reselect_last_file(); lcd_reselect_last_file();
#endif #endif

View file

@ -23,12 +23,16 @@
#ifndef _CARDREADER_H_ #ifndef _CARDREADER_H_
#define _CARDREADER_H_ #define _CARDREADER_H_
#include "../inc/MarlinConfig.h"
#if ENABLED(SDSUPPORT)
#define SD_RESORT ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_DYNAMIC_RAM)
#define MAX_DIR_DEPTH 10 // Maximum folder depth #define MAX_DIR_DEPTH 10 // Maximum folder depth
#include "SdFile.h" #include "SdFile.h"
#include "../inc/MarlinConfig.h"
class CardReader { class CardReader {
public: public:
CardReader(); CardReader();
@ -48,7 +52,11 @@ public:
void release(); void release();
void openAndPrintFile(const char *name); void openAndPrintFile(const char *name);
void startFileprint(); void startFileprint();
void stopSDPrint(); void stopSDPrint(
#if SD_RESORT
const bool re_sort=false
#endif
);
void getStatus( void getStatus(
#if NUM_SERIAL > 1 #if NUM_SERIAL > 1
const int8_t port = -1 const int8_t port = -1
@ -221,6 +229,10 @@ private:
#define IS_SD_INSERTED true #define IS_SD_INSERTED true
#endif #endif
extern CardReader card;
#endif // SDSUPPORT
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
#define IS_SD_PRINTING (card.sdprinting) #define IS_SD_PRINTING (card.sdprinting)
#define IS_SD_FILE_OPEN (card.isFileOpen()) #define IS_SD_FILE_OPEN (card.isFileOpen())
@ -229,6 +241,4 @@ private:
#define IS_SD_FILE_OPEN (false) #define IS_SD_FILE_OPEN (false)
#endif #endif
extern CardReader card;
#endif // _CARDREADER_H_ #endif // _CARDREADER_H_