Преглед изворни кода

Revert "SD Sort and Buffer"

alexborro пре 9 година
родитељ
комит
ab355a90d3

+ 0
- 1
Marlin/Configuration_adv.h Прегледај датотеку

@@ -292,7 +292,6 @@
292 292
 #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
293 293
 #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
294 294
 
295
-//#define SDCARD_SORT_ALPHA // Sort SD file listings in ASCII order. Find additional options in cardreader.h
296 295
 #define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the file system block order.
297 296
 // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
298 297
 // using:

+ 1
- 3
Marlin/SdFatConfig.h Прегледај датотеку

@@ -111,12 +111,10 @@ uint8_t const SOFT_SPI_SCK_PIN = 13;
111 111
 /**
112 112
  * Defines for long (vfat) filenames
113 113
  */
114
-/** Number of UTF-16 characters per entry */
115
-#define FILENAME_LENGTH 13
116 114
 /** Number of VFAT entries used. Every entry has 13 UTF-16 characters */
117 115
 #define MAX_VFAT_ENTRIES (2)
118 116
 /** Total size of the buffer used to store the long filenames */
119
-#define LONG_FILENAME_LENGTH (FILENAME_LENGTH*MAX_VFAT_ENTRIES+1)
117
+#define LONG_FILENAME_LENGTH (13*MAX_VFAT_ENTRIES+1)
120 118
 #endif  // SdFatConfig_h
121 119
 
122 120
 

+ 33
- 186
Marlin/cardreader.cpp Прегледај датотеку

@@ -11,9 +11,6 @@
11 11
 
12 12
 CardReader::CardReader()
13 13
 {
14
-  #ifdef SDCARD_SORT_ALPHA
15
-   sort_count = 0;
16
-  #endif
17 14
    filesize = 0;
18 15
    sdpos = 0;
19 16
    sdprinting = false;
@@ -36,15 +33,19 @@ CardReader::CardReader()
36 33
   autostart_atmillis=millis()+5000;
37 34
 }
38 35
 
39
-char *createFilename(char *buffer, const dir_t &p) //buffer>12characters
36
+char *createFilename(char *buffer,const dir_t &p) //buffer>12characters
40 37
 {
41 38
   char *pos=buffer;
42
-  for (uint8_t i = 0; i < 11; i++) {
43
-    if (p.name[i] == ' ') continue;
44
-    if (i == 8) *pos++ = '.';
45
-    *pos++ = p.name[i];
39
+  for (uint8_t i = 0; i < 11; i++) 
40
+  {
41
+    if (p.name[i] == ' ')continue;
42
+    if (i == 8) 
43
+    {
44
+      *pos++='.';
45
+    }
46
+    *pos++=p.name[i];
46 47
   }
47
-  *pos++ = 0;
48
+  *pos++=0;
48 49
   return buffer;
49 50
 }
50 51
 
@@ -52,15 +53,15 @@ char *createFilename(char *buffer, const dir_t &p) //buffer>12characters
52 53
 void  CardReader::lsDive(const char *prepend,SdFile parent)
53 54
 {
54 55
   dir_t p;
55
-  uint8_t cnt=0;
56
+ uint8_t cnt=0;
56 57
  
57 58
   while (parent.readDir(p, longFilename) > 0)
58 59
   {
59 60
     if( DIR_IS_SUBDIR(&p) && lsAction!=LS_Count && lsAction!=LS_GetFilename) // hence LS_SerialPrint
60 61
     {
61 62
 
62
-      char path[FILENAME_LENGTH*2];
63
-      char lfilename[FILENAME_LENGTH];
63
+      char path[13*2];
64
+      char lfilename[13];
64 65
       createFilename(lfilename,p);
65 66
       
66 67
       path[0]=0;
@@ -86,6 +87,8 @@ void  CardReader::lsDive(const char *prepend,SdFile parent)
86 87
       }
87 88
       lsDive(path,dir);
88 89
       //close done automatically by destructor of SdFile
90
+
91
+      
89 92
     }
90 93
     else
91 94
     {
@@ -98,10 +101,11 @@ void  CardReader::lsDive(const char *prepend,SdFile parent)
98 101
         if ( p.name[1] != '.')
99 102
         continue;
100 103
       }
101
-
104
+      
102 105
       if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
103 106
       filenameIsDir=DIR_IS_SUBDIR(&p);
104
-
107
+      
108
+      
105 109
       if(!filenameIsDir)
106 110
       {
107 111
         if(p.name[8]!='G') continue;
@@ -120,8 +124,10 @@ void  CardReader::lsDive(const char *prepend,SdFile parent)
120 124
       } 
121 125
       else if(lsAction==LS_GetFilename)
122 126
       {
123
-        if (cnt == nrFiles) return;
127
+        if(cnt==nrFiles)
128
+          return;
124 129
         cnt++;
130
+        
125 131
       }
126 132
     }
127 133
   }
@@ -130,6 +136,9 @@ void  CardReader::lsDive(const char *prepend,SdFile parent)
130 136
 void CardReader::ls() 
131 137
 {
132 138
   lsAction=LS_SerialPrint;
139
+  if(lsAction==LS_Count)
140
+  nrFiles=0;
141
+
133 142
   root.rewind();
134 143
   lsDive("",root);
135 144
 }
@@ -168,9 +177,6 @@ void CardReader::initsd()
168 177
   }
169 178
   workDir=root;
170 179
   curDir=&root;
171
-  #ifdef SDCARD_SORT_ALPHA
172
-    presort();
173
-  #endif
174 180
   /*
175 181
   if(!workDir.openRoot(&volume))
176 182
   {
@@ -187,10 +193,8 @@ void CardReader::setroot()
187 193
     SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL);
188 194
   }*/
189 195
   workDir=root;
196
+  
190 197
   curDir=&workDir;
191
-  #ifdef SDCARD_SORT_ALPHA
192
-    presort();
193
-  #endif
194 198
 }
195 199
 void CardReader::release()
196 200
 {
@@ -203,7 +207,6 @@ void CardReader::startFileprint()
203 207
   if(cardOK)
204 208
   {
205 209
     sdprinting = true;
206
-    flush_presort();
207 210
   }
208 211
 }
209 212
 
@@ -232,7 +235,7 @@ void CardReader::getAbsFilename(char *t)
232 235
     while(*t!=0 && cnt< MAXPATHNAMELENGTH) 
233 236
     {t++;cnt++;}  //crawl counter forward.
234 237
   }
235
-  if(cnt<MAXPATHNAMELENGTH-FILENAME_LENGTH)
238
+  if(cnt<MAXPATHNAMELENGTH-13)
236 239
     file.getFilename(t);
237 240
   else
238 241
     t[0]=0;
@@ -302,7 +305,7 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/)
302 305
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end-name));
303 306
       if(dirname_end>0 && dirname_end>dirname_start)
304 307
       {
305
-        char subdirname[FILENAME_LENGTH];
308
+        char subdirname[13];
306 309
         strncpy(subdirname, dirname_start, dirname_end-dirname_start);
307 310
         subdirname[dirname_end-dirname_start]=0;
308 311
         SERIAL_ECHOLN(subdirname);
@@ -398,7 +401,7 @@ void CardReader::removeFile(char* name)
398 401
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end-name));
399 402
       if(dirname_end>0 && dirname_end>dirname_start)
400 403
       {
401
-        char subdirname[FILENAME_LENGTH];
404
+        char subdirname[13];
402 405
         strncpy(subdirname, dirname_start, dirname_end-dirname_start);
403 406
         subdirname[dirname_end-dirname_start]=0;
404 407
         SERIAL_ECHOLN(subdirname);
@@ -436,9 +439,6 @@ void CardReader::removeFile(char* name)
436 439
       SERIAL_PROTOCOLPGM("File deleted:");
437 440
       SERIAL_PROTOCOLLN(fname);
438 441
       sdpos = 0;
439
-      #ifdef SDCARD_SORT_ALPHA
440
-        presort();
441
-      #endif
442 442
     }
443 443
     else
444 444
     {
@@ -552,21 +552,14 @@ void CardReader::closefile(bool store_location)
552 552
   
553 553
 }
554 554
 
555
-void CardReader::getfilename(const uint16_t nr)
555
+void CardReader::getfilename(const uint8_t nr)
556 556
 {
557
-  #if defined(SDCARD_SORT_ALPHA) && SORT_USES_RAM && SORT_USES_MORE_RAM
558
-    if (nr < sort_count) {
559
-      strcpy(filename, sortshort[nr]);
560
-      strcpy(longFilename, sortnames[nr]);
561
-      filenameIsDir = isDir[nr];
562
-      return;
563
-    }
564
-  #endif
565 557
   curDir=&workDir;
566 558
   lsAction=LS_GetFilename;
567 559
   nrFiles=nr;
568 560
   curDir->rewind();
569 561
   lsDive("",*curDir);
562
+  
570 563
 }
571 564
 
572 565
 uint16_t CardReader::getnrfilenames()
@@ -584,7 +577,7 @@ void CardReader::chdir(const char * relpath)
584 577
 {
585 578
   SdFile newfile;
586 579
   SdFile *parent=&root;
587
-
580
+  
588 581
   if(workDir.isOpen())
589 582
     parent=&workDir;
590 583
   
@@ -602,164 +595,21 @@ void CardReader::chdir(const char * relpath)
602 595
       workDirParents[0]=*parent;
603 596
     }
604 597
     workDir=newfile;
605
-    #ifdef SDCARD_SORT_ALPHA
606
-      presort();
607
-    #endif
608 598
   }
609 599
 }
610 600
 
611 601
 void CardReader::updir()
612 602
 {
613
-  if (workDirDepth > 0)
603
+  if(workDirDepth > 0)
614 604
   {
615 605
     --workDirDepth;
616 606
     workDir = workDirParents[0];
607
+    int d;
617 608
     for (int d = 0; d < workDirDepth; d++)
618 609
       workDirParents[d] = workDirParents[d+1];
619
-    #ifdef SDCARD_SORT_ALPHA
620
-      presort();
621
-    #endif
622
-  }
623
-}
624
-
625
-#ifdef SDCARD_SORT_ALPHA
626
-
627
-/**
628
- * Get the name of a file in the current directory by sort-index
629
- */
630
-void CardReader::getfilename_sorted(const uint16_t nr) {
631
-  getfilename(nr < sort_count ? sort_order[nr] : nr);
632
-}
633
-
634
-/**
635
- * Read all the files and produce a sort key
636
- *
637
- * We can do this in 3 ways...
638
- *  - Minimal RAM: Read two filenames at a time sorting along...
639
- *  - Some RAM: Buffer the directory and return filenames from RAM
640
- *  - Some RAM: Buffer the directory just for this sort
641
- */
642
-void CardReader::presort()
643
-{
644
-  flush_presort();
645
-
646
-  uint16_t fileCnt = getnrfilenames();
647
-  if (fileCnt > 0) {
648
-
649
-    if (fileCnt > SORT_LIMIT) fileCnt = SORT_LIMIT;
650
-
651
-    #if SORT_USES_RAM
652
-      #if SORT_USES_MORE_RAM
653
-        sortshort = (char**)calloc(fileCnt, sizeof(char*));
654
-        sortnames = (char**)calloc(fileCnt, sizeof(char*));
655
-      #else
656
-        char *sortnames[fileCnt];
657
-      #endif
658
-    #else
659
-      char name1[LONG_FILENAME_LENGTH+1];
660
-    #endif
661
-
662
-    #if FOLDER_SORTING != 0
663
-      #if SORT_USES_RAM && SORT_USES_MORE_RAM
664
-        isDir = (uint8_t*)calloc(fileCnt, sizeof(uint8_t));
665
-      #else
666
-        uint8_t isDir[fileCnt];
667
-      #endif
668
-    #endif
669
-
670
-    sort_order = new uint8_t[fileCnt];
671
-
672
-    if (fileCnt > 1) {
673
-
674
-      // Init sort order. If using RAM then read all filenames now.
675
-      for (uint16_t i=0; i<fileCnt; i++) {
676
-        sort_order[i] = i;
677
-        #if SORT_USES_RAM
678
-          getfilename(i);
679
-          sortnames[i] = strdup(longFilename[0] ? longFilename : filename);
680
-          #if SORT_USES_MORE_RAM
681
-            sortshort[i] = strdup(filename);
682
-          #endif
683
-          // char out[30];
684
-          // sprintf_P(out, PSTR("---- %i %s %s"), i, filenameIsDir ? "D" : " ", sortnames[i]);
685
-          // SERIAL_ECHOLN(out);
686
-          #if FOLDER_SORTING != 0
687
-            isDir[i] = filenameIsDir;
688
-          #endif
689
-        #endif
690
-      }
691
-
692
-      // Bubble Sort
693
-      for (uint16_t i=fileCnt; --i;) {
694
-        bool cmp, didSwap = false;
695
-        for (uint16_t j=0; j<i; ++j) {
696
-          uint16_t s1 = j, s2 = j+1, o1 = sort_order[s1], o2 = sort_order[s2];
697
-          #if SORT_USES_RAM
698
-            #if FOLDER_SORTING != 0
699
-              cmp = (isDir[o1] == isDir[o2]) ? (strcasecmp(sortnames[o1], sortnames[o2]) > 0) : isDir[FOLDER_SORTING > 0 ? o1 : o2];
700
-            #else
701
-              cmp = strcasecmp(sortnames[o1], sortnames[o2]) > 0;
702
-            #endif
703
-          #else
704
-            getfilename(o1);
705
-            strcpy(name1, longFilename[0] ? longFilename : filename);
706
-            #if FOLDER_SORTING != 0
707
-              bool dir1 = filenameIsDir;
708
-            #endif
709
-            getfilename(o2);
710
-            char *name2 = longFilename[0] ? longFilename : filename;
711
-            #if FOLDER_SORTING != 0
712
-              cmp = (dir1 == filenameIsDir) ? (strcasecmp(name1, name2) > 0) : (FOLDER_SORTING > 0 ? dir1 : !dir1);
713
-            #else
714
-              cmp = strcasecmp(name1, name2) > 0;
715
-            #endif
716
-          #endif
717
-          if (cmp) {
718
-            sort_order[s1] = o2;
719
-            sort_order[s2] = o1;
720
-            didSwap = true;
721
-          }
722
-        }
723
-        if (!didSwap) break;
724
-      }
725
-
726
-      #if SORT_USES_RAM && !SORT_USES_MORE_RAM
727
-        for (uint16_t i=0; i<fileCnt; ++i) free(sortnames[i]);
728
-      #endif
729
-    }
730
-    else {
731
-      sort_order[0] = 0;
732
-      #if SORT_USES_RAM && SORT_USES_MORE_RAM
733
-        sortnames = (char**)malloc(sizeof(char*));
734
-        sortshort = (char**)malloc(sizeof(char*));
735
-        isDir = (uint8_t*)malloc(sizeof(uint8_t));
736
-        getfilename(0);
737
-        sortnames[0] = strdup(longFilename[0] ? longFilename : filename);
738
-        sortshort[0] = strdup(filename);
739
-        isDir[0] = filenameIsDir;
740
-      #endif
741
-    }
742
-
743
-    sort_count = fileCnt;
744
-  }
745
-}
746
-
747
-void CardReader::flush_presort() {
748
-  if (sort_count > 0) {
749
-    #if SORT_USES_RAM && SORT_USES_MORE_RAM
750
-      for (uint8_t i=0; i<sort_count; ++i) {
751
-        free(sortshort[i]);
752
-        free(sortnames[i]);
753
-      }
754
-      free(sortshort);
755
-      free(sortnames);
756
-    #endif
757
-    delete sort_order;
758
-    sort_count = 0;
759 610
   }
760 611
 }
761 612
 
762
-#endif // SDCARD_SORT_ALPHA
763 613
 
764 614
 void CardReader::printingHasFinished()
765 615
 {
@@ -783,9 +633,6 @@ void CardReader::printingHasFinished()
783 633
           enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND));
784 634
       }
785 635
       autotempShutdown();
786
-      #ifdef SDCARD_SORT_ALPHA
787
-        presort();
788
-      #endif
789 636
     }
790 637
 }
791 638
 #endif //SDSUPPORT

+ 7
- 29
Marlin/cardreader.h Прегледај датотеку

@@ -3,14 +3,7 @@
3 3
 
4 4
 #ifdef SDSUPPORT
5 5
 
6
-#define MAX_DIR_DEPTH 10          // Maximum folder depth
7
-
8
-#ifdef SDCARD_SORT_ALPHA
9
-  #define SORT_USES_RAM false      // Buffer while sorting, else re-read from SD
10
-  #define SORT_USES_MORE_RAM false // Always keep the directory in RAM
11
-  #define SORT_LIMIT 256           // Maximum number of sorted items
12
-  #define FOLDER_SORTING -1        // -1=above  0=none  1=below
13
-#endif
6
+#define MAX_DIR_DEPTH 10
14 7
 
15 8
 #include "SdFile.h"
16 9
 enum LsAction {LS_SerialPrint,LS_Count,LS_GetFilename};
@@ -35,7 +28,7 @@ public:
35 28
   void getStatus();
36 29
   void printingHasFinished();
37 30
 
38
-  void getfilename(const uint16_t nr);
31
+  void getfilename(const uint8_t nr);
39 32
   uint16_t getnrfilenames();
40 33
   
41 34
   void getAbsFilename(char *t);
@@ -46,12 +39,6 @@ public:
46 39
   void updir();
47 40
   void setroot();
48 41
 
49
-#ifdef SDCARD_SORT_ALPHA
50
-  void presort();
51
-  void flush_presort();
52
-  void getfilename_sorted(const uint16_t nr);
53
-#endif
54
-
55 42
 
56 43
   FORCE_INLINE bool isFileOpen() { return file.isOpen(); }
57 44
   FORCE_INLINE bool eof() { return sdpos>=filesize ;};
@@ -63,29 +50,20 @@ public:
63 50
 public:
64 51
   bool saving;
65 52
   bool logging;
66
-  bool sdprinting;
67
-  bool cardOK;
68
-  char filename[FILENAME_LENGTH];
53
+  bool sdprinting ;  
54
+  bool cardOK ;
55
+  char filename[13];
69 56
   char longFilename[LONG_FILENAME_LENGTH];
70 57
   bool filenameIsDir;
71 58
   int lastnr; //last number of the autostart;
72 59
 private:
73 60
   SdFile root,*curDir,workDir,workDirParents[MAX_DIR_DEPTH];
74 61
   uint16_t workDirDepth;
75
-#ifdef SDCARD_SORT_ALPHA
76
-  uint16_t sort_count;
77
-  uint8_t *sort_order;
78
-  #if SORT_USES_MORE_RAM
79
-    char **sortshort;
80
-    char **sortnames;
81
-    uint8_t *isDir;
82
-  #endif
83
-#endif
84 62
   Sd2Card card;
85 63
   SdVolume volume;
86 64
   SdFile file;
87 65
   #define SD_PROCEDURE_DEPTH 1
88
-  #define MAXPATHNAMELENGTH (FILENAME_LENGTH*MAX_DIR_DEPTH+MAX_DIR_DEPTH+1)
66
+  #define MAXPATHNAMELENGTH (13*MAX_DIR_DEPTH+MAX_DIR_DEPTH+1)
89 67
   uint8_t file_subcall_ctr;
90 68
   uint32_t filespos[SD_PROCEDURE_DEPTH];
91 69
   char filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH];
@@ -97,7 +75,7 @@ private:
97 75
   bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
98 76
   
99 77
   LsAction lsAction; //stored for recursion.
100
-  uint16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory.
78
+  int16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory.
101 79
   char* diveDirName;
102 80
   void lsDive(const char *prepend,SdFile parent);
103 81
 };

+ 0
- 1
Marlin/example_configurations/SCARA/Configuration_adv.h Прегледај датотеку

@@ -295,7 +295,6 @@
295 295
 #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
296 296
 #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
297 297
 
298
-//#define SDCARD_SORT_ALPHA // Sort SD file listings in ASCII order. Find additional options in cardreader.h
299 298
 #define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the file system block order.
300 299
 // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
301 300
 // using:

+ 0
- 1
Marlin/example_configurations/delta/Configuration_adv.h Прегледај датотеку

@@ -287,7 +287,6 @@
287 287
 #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
288 288
 #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
289 289
 
290
-//#define SDCARD_SORT_ALPHA // Sort SD file listings in ASCII order. Find additional options in cardreader.h
291 290
 #define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the filesystem block order. 
292 291
 // if a file is deleted, it frees a block. hence, the order is not purely cronological. To still have auto0.g accessible, there is again the option to do that.
293 292
 // using:

+ 0
- 1
Marlin/example_configurations/makibox/Configuration_adv.h Прегледај датотеку

@@ -291,7 +291,6 @@
291 291
 #define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
292 292
 #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
293 293
 
294
-//#define SDCARD_SORT_ALPHA // Sort SD file listings in ASCII order. Find additional options in cardreader.h
295 294
 #define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the file system block order.
296 295
 // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
297 296
 // using:

+ 11
- 18
Marlin/ultralcd.cpp Прегледај датотеку

@@ -993,9 +993,9 @@ void lcd_sdcard_menu()
993 993
     card.getWorkDirName();
994 994
     if(card.filename[0]=='/')
995 995
     {
996
-      #if SDCARDDETECT == -1
996
+#if SDCARDDETECT == -1
997 997
         MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
998
-      #endif
998
+#endif
999 999
     }else{
1000 1000
         MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir);
1001 1001
     }
@@ -1004,23 +1004,16 @@ void lcd_sdcard_menu()
1004 1004
     {
1005 1005
         if (_menuItemNr == _lineNr)
1006 1006
         {
1007
-            #if defined(SDCARD_RATHERRECENTFIRST) && !defined(SDCARD_SORT_ALPHA)
1008
-              int nr = fileCnt-1-i;
1007
+            #ifndef SDCARD_RATHERRECENTFIRST
1008
+              card.getfilename(i);
1009 1009
             #else
1010
-              int nr = i;
1010
+              card.getfilename(fileCnt-1-i);
1011 1011
             #endif
1012
-
1013
-            #ifdef SDCARD_SORT_ALPHA
1014
-              card.getfilename_sorted(nr);
1015
-            #else
1016
-              card.getfilename(nr);
1017
-            #endif
1018
-
1019
-            if (card.filenameIsDir) {
1020
-              MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
1021
-            }
1022
-            else {
1023
-              MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
1012
+            if (card.filenameIsDir)
1013
+            {
1014
+                MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
1015
+            }else{
1016
+                MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
1024 1017
             }
1025 1018
         }else{
1026 1019
             MENU_ITEM_DUMMY();
@@ -1226,7 +1219,7 @@ void lcd_init()
1226 1219
   #endif // SR_LCD_2W_NL
1227 1220
 #endif//!NEWPANEL
1228 1221
 
1229
-#if defined(SDSUPPORT) && defined(SDCARDDETECT) && (SDCARDDETECT > 0)
1222
+#if defined (SDSUPPORT) && defined(SDCARDDETECT) && (SDCARDDETECT > 0)
1230 1223
     pinMode(SDCARDDETECT,INPUT);
1231 1224
     WRITE(SDCARDDETECT, HIGH);
1232 1225
     lcd_oldcardstatus = IS_SD_INSERTED;

Loading…
Откажи
Сачувај