Browse Source

Add root flag to CardReader (#15275)

pull/1/head
Robby Candra 5 years ago
committed by Scott Lahteine
parent
commit
98233b1de0
  1. 3
      Marlin/src/lcd/extensible_ui/ui_api.cpp
  2. 11
      Marlin/src/lcd/menu/menu_media.cpp
  3. 12
      Marlin/src/sd/cardreader.cpp
  4. 3
      Marlin/src/sd/cardreader.h

3
Marlin/src/lcd/extensible_ui/ui_api.cpp

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

11
Marlin/src/lcd/menu/menu_media.cpp

@ -127,21 +127,14 @@ void menu_media() {
#if HAS_GRAPHICAL_LCD #if HAS_GRAPHICAL_LCD
static uint16_t fileCnt; static uint16_t fileCnt;
static bool at_root; if (ui.first_page) fileCnt = card.get_num_Files();
if (ui.first_page) {
fileCnt = card.get_num_Files();
card.getWorkDirName();
at_root = card.filename[0] == '/';
}
#else #else
const uint16_t fileCnt = card.get_num_Files(); const uint16_t fileCnt = card.get_num_Files();
card.getWorkDirName();
const bool at_root = card.filename[0] == '/';
#endif #endif
START_MENU(); START_MENU();
MENU_BACK(MSG_MAIN); MENU_BACK(MSG_MAIN);
if (at_root) { if (card.flag.workDirIsRoot) {
#if !PIN_EXISTS(SD_DETECT) #if !PIN_EXISTS(SD_DETECT)
MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh); MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
#endif #endif

12
Marlin/src/sd/cardreader.cpp

@ -629,7 +629,7 @@ void CardReader::getfilename(uint16_t nr, const char * const match/*=nullptr*/)
lsDive(nullptr, workDir, match); lsDive(nullptr, workDir, match);
} }
uint16_t CardReader::getnrfilenames() { uint16_t CardReader::countFilesInWorkDir() {
lsAction = LS_Count; lsAction = LS_Count;
nrFiles = 0; nrFiles = 0;
workDir.rewind(); workDir.rewind();
@ -707,6 +707,7 @@ void CardReader::chdir(const char * relpath) {
if (newDir.open(parent, relpath, O_READ)) { if (newDir.open(parent, relpath, O_READ)) {
workDir = newDir; workDir = newDir;
flag.workDirIsRoot = false;
if (workDirDepth < MAX_DIR_DEPTH) if (workDirDepth < MAX_DIR_DEPTH)
workDirParents[workDirDepth++] = workDir; workDirParents[workDirDepth++] = workDir;
#if ENABLED(SDCARD_SORT_ALPHA) #if ENABLED(SDCARD_SORT_ALPHA)
@ -726,14 +727,13 @@ int8_t CardReader::updir() {
presort(); presort();
#endif #endif
} }
if (!workDirDepth) flag.workDirIsRoot = true;
return workDirDepth; return workDirDepth;
} }
void CardReader::setroot() { void CardReader::setroot() {
/*if (!workDir.openRoot(&volume)) {
SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL);
}*/
workDir = root; workDir = root;
flag.workDirIsRoot = true;
#if ENABLED(SDCARD_SORT_ALPHA) #if ENABLED(SDCARD_SORT_ALPHA)
presort(); presort();
#endif #endif
@ -801,7 +801,7 @@ void CardReader::setroot() {
#endif #endif
// 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 = countFilesInWorkDir();
if (fileCnt > 0) { if (fileCnt > 0) {
// Never sort more than the max allowed // Never sort more than the max allowed
@ -981,7 +981,7 @@ uint16_t CardReader::get_num_Files() {
#if ENABLED(SDCARD_SORT_ALPHA) && SDSORT_USES_RAM && SDSORT_CACHE_NAMES #if ENABLED(SDCARD_SORT_ALPHA) && SDSORT_USES_RAM && SDSORT_CACHE_NAMES
nrFiles // no need to access the SD card for filenames nrFiles // no need to access the SD card for filenames
#else #else
getnrfilenames() countFilesInWorkDir()
#endif #endif
; ;
} }

3
Marlin/src/sd/cardreader.h

@ -41,6 +41,7 @@ typedef struct {
sdprinting:1, sdprinting:1,
mounted:1, mounted:1,
filenameIsDir:1, filenameIsDir:1,
workDirIsRoot:1,
abort_sd_printing:1 abort_sd_printing:1
#if ENABLED(BINARY_FILE_TRANSFER) #if ENABLED(BINARY_FILE_TRANSFER)
, binary_mode:1 , binary_mode:1
@ -79,7 +80,7 @@ public:
#endif #endif
static void getfilename(uint16_t nr, const char* const match=nullptr); static void getfilename(uint16_t nr, const char* const match=nullptr);
static uint16_t getnrfilenames(); static uint16_t countFilesInWorkDir();
static void getAbsFilename(char *t); static void getAbsFilename(char *t);

Loading…
Cancel
Save