102 lines
2.6 KiB
C++
102 lines
2.6 KiB
C++
|
/************************ SD Card Code ************************/
|
||
|
// As per: https://github.com/espressif/arduino-esp32/tree/master/libraries/SD/examples/SD_Test
|
||
|
|
||
|
|
||
|
|
||
|
void listDir(fs::FS &fs, const char * dirname, uint8_t levels, bool add_to_gif_list = false){
|
||
|
Serial.printf("Listing directory: %s\n", dirname);
|
||
|
|
||
|
File root = fs.open(dirname);
|
||
|
if(!root){
|
||
|
Serial.println("Failed to open directory");
|
||
|
return;
|
||
|
}
|
||
|
if(!root.isDirectory()){
|
||
|
Serial.println("Not a directory");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
File file = root.openNextFile();
|
||
|
while(file){
|
||
|
if(file.isDirectory()){
|
||
|
Serial.print(" DIR : ");
|
||
|
Serial.println(file.name());
|
||
|
if(levels){
|
||
|
listDir(fs, file.path(), levels -1, false);
|
||
|
}
|
||
|
} else {
|
||
|
Serial.print(" FILE: ");
|
||
|
Serial.print(file.name());
|
||
|
Serial.print(" SIZE: ");
|
||
|
Serial.println(file.size());
|
||
|
|
||
|
if (add_to_gif_list && levels == 0)
|
||
|
{
|
||
|
GifFiles.push_back( std::string(dirname) + file.name() );
|
||
|
Serial.println("Adding to gif list:" + String(dirname) +"/" + file.name());
|
||
|
totalFiles++;
|
||
|
}
|
||
|
}
|
||
|
file = root.openNextFile();
|
||
|
}
|
||
|
|
||
|
file.close();
|
||
|
}
|
||
|
|
||
|
void readFile(fs::FS &fs, const char * path){
|
||
|
Serial.printf("Reading file: %s\n", path);
|
||
|
|
||
|
File file = fs.open(path);
|
||
|
if(!file){
|
||
|
Serial.println("Failed to open file for reading");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Serial.print("Read from file: ");
|
||
|
while(file.available()){
|
||
|
Serial.write(file.read());
|
||
|
}
|
||
|
file.close();
|
||
|
}
|
||
|
|
||
|
void testFileIO(fs::FS &fs, const char * path){
|
||
|
File file = fs.open(path);
|
||
|
static uint8_t buf[512];
|
||
|
size_t len = 0;
|
||
|
uint32_t start = millis();
|
||
|
uint32_t end = start;
|
||
|
if(file){
|
||
|
len = file.size();
|
||
|
size_t flen = len;
|
||
|
start = millis();
|
||
|
while(len){
|
||
|
size_t toRead = len;
|
||
|
if(toRead > 512){
|
||
|
toRead = 512;
|
||
|
}
|
||
|
file.read(buf, toRead);
|
||
|
len -= toRead;
|
||
|
}
|
||
|
end = millis() - start;
|
||
|
Serial.printf("%u bytes read for %u ms\n", flen, end);
|
||
|
file.close();
|
||
|
} else {
|
||
|
Serial.println("Failed to open file for reading");
|
||
|
}
|
||
|
|
||
|
|
||
|
file = fs.open(path, FILE_WRITE);
|
||
|
if(!file){
|
||
|
Serial.println("Failed to open file for writing");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
size_t i;
|
||
|
start = millis();
|
||
|
for(i=0; i<2048; i++){
|
||
|
file.write(buf, 512);
|
||
|
}
|
||
|
end = millis() - start;
|
||
|
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
|
||
|
file.close();
|
||
|
}
|