소스 검색

Add root flag to CardReader (#15275)

Robby Candra 4 년 전
부모
커밋
98233b1de0
4개의 변경된 파일11개의 추가작업 그리고 18개의 파일을 삭제
  1. 1
    2
      Marlin/src/lcd/extensible_ui/ui_api.cpp
  2. 2
    9
      Marlin/src/lcd/menu/menu_media.cpp
  3. 6
    6
      Marlin/src/sd/cardreader.cpp
  4. 2
    1
      Marlin/src/sd/cardreader.h

+ 1
- 2
Marlin/src/lcd/extensible_ui/ui_api.cpp 파일 보기

@@ -975,8 +975,7 @@ namespace ExtUI {
975 975
 
976 976
   bool FileList::isAtRootDir() {
977 977
     #if ENABLED(SDSUPPORT)
978
-      card.getWorkDirName();
979
-      return card.filename[0] == '/';
978
+      card.flag.workDirIsRoot;
980 979
     #else
981 980
       return true;
982 981
     #endif

+ 2
- 9
Marlin/src/lcd/menu/menu_media.cpp 파일 보기

@@ -127,21 +127,14 @@ void menu_media() {
127 127
 
128 128
   #if HAS_GRAPHICAL_LCD
129 129
     static uint16_t fileCnt;
130
-    static bool at_root;
131
-    if (ui.first_page) {
132
-      fileCnt = card.get_num_Files();
133
-      card.getWorkDirName();
134
-      at_root = card.filename[0] == '/';
135
-    }
130
+    if (ui.first_page) fileCnt = card.get_num_Files();
136 131
   #else
137 132
     const uint16_t fileCnt = card.get_num_Files();
138
-    card.getWorkDirName();
139
-    const bool at_root = card.filename[0] == '/';
140 133
   #endif
141 134
 
142 135
   START_MENU();
143 136
   MENU_BACK(MSG_MAIN);
144
-  if (at_root) {
137
+  if (card.flag.workDirIsRoot) {
145 138
     #if !PIN_EXISTS(SD_DETECT)
146 139
       MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
147 140
     #endif

+ 6
- 6
Marlin/src/sd/cardreader.cpp 파일 보기

@@ -629,7 +629,7 @@ void CardReader::getfilename(uint16_t nr, const char * const match/*=nullptr*/)
629 629
   lsDive(nullptr, workDir, match);
630 630
 }
631 631
 
632
-uint16_t CardReader::getnrfilenames() {
632
+uint16_t CardReader::countFilesInWorkDir() {
633 633
   lsAction = LS_Count;
634 634
   nrFiles = 0;
635 635
   workDir.rewind();
@@ -707,6 +707,7 @@ void CardReader::chdir(const char * relpath) {
707 707
 
708 708
   if (newDir.open(parent, relpath, O_READ)) {
709 709
     workDir = newDir;
710
+    flag.workDirIsRoot = false;
710 711
     if (workDirDepth < MAX_DIR_DEPTH)
711 712
       workDirParents[workDirDepth++] = workDir;
712 713
     #if ENABLED(SDCARD_SORT_ALPHA)
@@ -726,14 +727,13 @@ int8_t CardReader::updir() {
726 727
       presort();
727 728
     #endif
728 729
   }
730
+  if (!workDirDepth) flag.workDirIsRoot = true;
729 731
   return workDirDepth;
730 732
 }
731 733
 
732 734
 void CardReader::setroot() {
733
-  /*if (!workDir.openRoot(&volume)) {
734
-    SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL);
735
-  }*/
736 735
   workDir = root;
736
+  flag.workDirIsRoot = true;
737 737
   #if ENABLED(SDCARD_SORT_ALPHA)
738 738
     presort();
739 739
   #endif
@@ -801,7 +801,7 @@ void CardReader::setroot() {
801 801
     #endif
802 802
 
803 803
     // If there are files, sort up to the limit
804
-    uint16_t fileCnt = getnrfilenames();
804
+    uint16_t fileCnt = countFilesInWorkDir();
805 805
     if (fileCnt > 0) {
806 806
 
807 807
       // Never sort more than the max allowed
@@ -981,7 +981,7 @@ uint16_t CardReader::get_num_Files() {
981 981
     #if ENABLED(SDCARD_SORT_ALPHA) && SDSORT_USES_RAM && SDSORT_CACHE_NAMES
982 982
       nrFiles // no need to access the SD card for filenames
983 983
     #else
984
-      getnrfilenames()
984
+      countFilesInWorkDir()
985 985
     #endif
986 986
   ;
987 987
 }

+ 2
- 1
Marlin/src/sd/cardreader.h 파일 보기

@@ -41,6 +41,7 @@ typedef struct {
41 41
        sdprinting:1,
42 42
        mounted:1,
43 43
        filenameIsDir:1,
44
+       workDirIsRoot:1,
44 45
        abort_sd_printing:1
45 46
        #if ENABLED(BINARY_FILE_TRANSFER)
46 47
          , binary_mode:1
@@ -79,7 +80,7 @@ public:
79 80
   #endif
80 81
 
81 82
   static void getfilename(uint16_t nr, const char* const match=nullptr);
82
-  static uint16_t getnrfilenames();
83
+  static uint16_t countFilesInWorkDir();
83 84
 
84 85
   static void getAbsFilename(char *t);
85 86
 

Loading…
취소
저장