Support for 10 level deep SD folder hierarchy

2.0.x
Scott Lahteine 12 years ago
parent 0ef54f2f85
commit a5cd582665

@ -18,6 +18,8 @@ CardReader::CardReader()
saving = false; saving = false;
logging = false; logging = false;
autostart_atmillis=0; autostart_atmillis=0;
workDirDepth = 0;
memset(workDirParents, 0, sizeof(workDirParents));
autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware. autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
lastnr=0; lastnr=0;
@ -521,19 +523,24 @@ void CardReader::chdir(const char * relpath)
} }
else else
{ {
workDirParentParent=workDirParent; if (workDirDepth < MAX_DIR_DEPTH) {
workDirParent=*parent; for (int d = ++workDirDepth; d--;)
workDirParents[d+1] = workDirParents[d];
workDirParents[0]=*parent;
}
workDir=newfile; workDir=newfile;
} }
} }
void CardReader::updir() void CardReader::updir()
{ {
if(!workDir.isRoot()) if(workDirDepth > 0)
{ {
workDir=workDirParent; --workDirDepth;
workDirParent=workDirParentParent; workDir = workDirParents[0];
int d;
for (int d = 0; d < workDirDepth; d++)
workDirParents[d] = workDirParents[d+1];
} }
} }

@ -3,6 +3,8 @@
#ifdef SDSUPPORT #ifdef SDSUPPORT
#define MAX_DIR_DEPTH 10
#include "SdFile.h" #include "SdFile.h"
enum LsAction {LS_SerialPrint,LS_Count,LS_GetFilename}; enum LsAction {LS_SerialPrint,LS_Count,LS_GetFilename};
class CardReader class CardReader
@ -53,7 +55,8 @@ public:
bool filenameIsDir; bool filenameIsDir;
int lastnr; //last number of the autostart; int lastnr; //last number of the autostart;
private: private:
SdFile root,*curDir,workDir,workDirParent,workDirParentParent; SdFile root,*curDir,workDir,workDirParents[MAX_DIR_DEPTH];
uint16_t workDirDepth;
Sd2Card card; Sd2Card card;
SdVolume volume; SdVolume volume;
SdFile file; SdFile file;

Loading…
Cancel
Save