瀏覽代碼

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

Thanks Chuck Hellebuyck.
Scott Lahteine 7 年之前
父節點
當前提交
22a017a856
No account linked to committer's email address
共有 4 個文件被更改,包括 38 次插入14 次删除
  1. 6
    2
      Marlin/src/lcd/malyanlcd.cpp
  2. 5
    1
      Marlin/src/lcd/ultralcd.cpp
  3. 11
    5
      Marlin/src/sd/cardreader.cpp
  4. 16
    6
      Marlin/src/sd/cardreader.h

+ 6
- 2
Marlin/src/lcd/malyanlcd.cpp 查看文件

@@ -228,7 +228,11 @@ void process_lcd_p_command(const char* command) {
228 228
     case 'X':
229 229
       // cancel print
230 230
       write_to_lcd_P(PSTR("{SYS:CANCELING}"));
231
-      card.stopSDPrint();
231
+      card.stopSDPrint(
232
+        #if SD_RESORT
233
+          true
234
+        #endif
235
+      );
232 236
       clear_command_queue();
233 237
       quickstop_stepper();
234 238
       print_job_timer.stop();
@@ -448,4 +452,4 @@ void lcd_setalertstatusPGM(const char* message) {
448 452
   write_to_lcd(message_buffer);
449 453
 }
450 454
 
451
-#endif // Malyan LCD
455
+#endif // MALYAN_LCD

+ 5
- 1
Marlin/src/lcd/ultralcd.cpp 查看文件

@@ -856,7 +856,11 @@ void kill_screen(const char* lcd_msg) {
856 856
     }
857 857
 
858 858
     void lcd_sdcard_stop() {
859
-      card.stopSDPrint();
859
+      card.stopSDPrint(
860
+        #if SD_RESORT
861
+          true
862
+        #endif
863
+      );
860 864
       clear_command_queue();
861 865
       quickstop_stepper();
862 866
       print_job_timer.stop();

+ 11
- 5
Marlin/src/sd/cardreader.cpp 查看文件

@@ -328,12 +328,19 @@ void CardReader::startFileprint() {
328 328
   }
329 329
 }
330 330
 
331
-void CardReader::stopSDPrint() {
331
+void CardReader::stopSDPrint(
332
+  #if SD_RESORT
333
+    const bool re_sort/*=false*/
334
+  #endif
335
+) {
332 336
   #if ENABLED(ADVANCED_PAUSE_FEATURE)
333 337
     did_pause_print = 0;
334 338
   #endif
335 339
   sdprinting = false;
336 340
   if (isFileOpen()) file.close();
341
+  #if SD_RESORT
342
+    if (re_sort) presort();
343
+  #endif
337 344
 }
338 345
 
339 346
 void CardReader::openLogFile(char* name) {
@@ -700,14 +707,14 @@ int8_t CardReader::updir() {
700 707
    */
701 708
   void CardReader::presort() {
702 709
 
710
+    // Throw away old sort index
711
+    flush_presort();
712
+
703 713
     // Sorting may be turned off
704 714
     #if ENABLED(SDSORT_GCODE)
705 715
       if (!sort_alpha) return;
706 716
     #endif
707 717
 
708
-    // Throw away old sort index
709
-    flush_presort();
710
-
711 718
     // If there are files, sort up to the limit
712 719
     uint16_t fileCnt = getnrfilenames();
713 720
     if (fileCnt > 0) {
@@ -940,7 +947,6 @@ void CardReader::printingHasFinished() {
940 947
     #if ENABLED(SDCARD_SORT_ALPHA)
941 948
       presort();
942 949
     #endif
943
-
944 950
     #if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
945 951
       lcd_reselect_last_file();
946 952
     #endif

+ 16
- 6
Marlin/src/sd/cardreader.h 查看文件

@@ -23,12 +23,16 @@
23 23
 #ifndef _CARDREADER_H_
24 24
 #define _CARDREADER_H_
25 25
 
26
+#include "../inc/MarlinConfig.h"
27
+
28
+#if ENABLED(SDSUPPORT)
29
+
30
+#define SD_RESORT ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_DYNAMIC_RAM)
31
+
26 32
 #define MAX_DIR_DEPTH 10          // Maximum folder depth
27 33
 
28 34
 #include "SdFile.h"
29 35
 
30
-#include "../inc/MarlinConfig.h"
31
-
32 36
 class CardReader {
33 37
 public:
34 38
   CardReader();
@@ -48,7 +52,11 @@ public:
48 52
   void release();
49 53
   void openAndPrintFile(const char *name);
50 54
   void startFileprint();
51
-  void stopSDPrint();
55
+  void stopSDPrint(
56
+    #if SD_RESORT
57
+      const bool re_sort=false
58
+    #endif
59
+  );
52 60
   void getStatus(
53 61
     #if NUM_SERIAL > 1
54 62
       const int8_t port = -1
@@ -217,10 +225,14 @@ private:
217 225
     #define IS_SD_INSERTED (READ(SD_DETECT_PIN) == LOW)
218 226
   #endif
219 227
 #else
220
-  //No card detect line? Assume the card is inserted.
228
+  // No card detect line? Assume the card is inserted.
221 229
   #define IS_SD_INSERTED true
222 230
 #endif
223 231
 
232
+extern CardReader card;
233
+
234
+#endif // SDSUPPORT
235
+
224 236
 #if ENABLED(SDSUPPORT)
225 237
   #define IS_SD_PRINTING (card.sdprinting)
226 238
   #define IS_SD_FILE_OPEN (card.isFileOpen())
@@ -229,6 +241,4 @@ private:
229 241
   #define IS_SD_FILE_OPEN (false)
230 242
 #endif
231 243
 
232
-extern CardReader card;
233
-
234 244
 #endif // _CARDREADER_H_

Loading…
取消
儲存