#include <LittleFS.h>
//LittleFS_RAM myfs;
//LittleFS_SPIFlash myfs;
LittleFS_QSPIFlash myfs;
char buf[200000];
File file1, file2, file3;
char fname[32] = "my_file1";
int szLen = strlen( buf );
elapsedMicros my_us;
uint32_t lCnt = 0;
uint32_t cCnt = 0;
//define a struct of various data types
struct MYDATA_t {
bool data_0;
float data_1;
long data_2;
int data_3;
char data_4[32];
};
//define a struct joining MYDATA_t to an array of bytes to be stored
union MYDATA4RAM_t {
MYDATA_t datastruct;
char Packet[sizeof(MYDATA_t)];
};
MYDATA4RAM_t mydata; //data to be written in memory
MYDATA4RAM_t readdata; //data read from memory
void setup() {
//pinMode(13, OUTPUT);
//digitalWrite(13, HIGH);
while (!Serial) ; // wait
Serial.println("\n" __FILE__ " " __DATE__ " " __TIME__);
Serial.println("LittleFS Timer Test"); delay(5);
//if (!myfs.begin(buf, sizeof(buf))) {
pinMode(10, OUTPUT); digitalWrite(10, HIGH);
//if(!myfs.begin(10)) {
if(!myfs.begin()) {
Serial.println("Error starting ramdisk");
while (1) ;
}
//printDirectory();
//Serial.printf("Disk Usuage:\n");
//Serial.printf("Bytes Used: %d, Bytes Total:%llu\n", myfs.usedSize(), myfs.totalSize());
//test of print
Serial.println("Using println and printf to printoutput file");
file1 = myfs.open("PRINTOUTPUT1.txt", FILE_WRITE);
Serial.println("opened PRINTOUTPUT1.txt");
file2 = myfs.open("PRINTOUTPUT2.txt", FILE_WRITE);
Serial.println("opened PRINTOUTPUT2.txt");
for(uint8_t i = 0; i < 10; i++) {
file1.println("abcdefghijklmnopqrstuvwxyz");
file1.printf("Rec: %d, Float: %f, Int: %d\n",i,i+26.4, i+98);
file2.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
//eRAM.println("THIS IS A TEST");
file2.printf("Rec: %d, Float: %f, Int: %d\n",i,i+56.4, i+198);
}
file1.close();
file2.close();
printDirectory();
Serial.println("-------------------------------");
Serial.println("File1 contents:");
Serial.println("-------------------------------");
file1 = myfs.open("PRINTOUTPUT1.txt");
Serial.printf("File1 size: %d\n", file1.size());
int filesize = file1.size();
for(uint8_t i = 0; i <30; i++){
char buf[256];
int n = file1.read(buf, 256);
//Serial.printf("read %d bytes\n", n);
if (n > 255) n = 255;
buf[n] = 0;
Serial.println(buf);
//Used this in place of a file1.eof() function
//if((file1.position()+1) > filesize) break;
if(file1.available() == 0) break;
}
file1.close();
structuredWrite();
}
void structuredWrite(){
Serial.println("-------------------------------");
Serial.println("File3 byte conversion test:");
Serial.println("-------------------------------");
Serial.println();
uint32_t arraySize = sizeof(MYDATA_t);
//---------init data - load array
mydata.datastruct.data_0 = true;
Serial.print("Data_0: ");
if (mydata.datastruct.data_0) Serial.println("true");
if (!mydata.datastruct.data_0) Serial.println("false");
mydata.datastruct.data_1 = 1.3575;
Serial.print("Data_1: ");
Serial.println(mydata.datastruct.data_1, DEC);
mydata.datastruct.data_2 = 314159L;
Serial.print("Data_2: ");
Serial.println(mydata.datastruct.data_2, DEC);
mydata.datastruct.data_3 = 142;
Serial.print("Data_3: ");
Serial.println(mydata.datastruct.data_3, DEC);
//string test
String string_test = "The Quick Brown Fox";
int stringLen = string_test.length();
Serial.println(stringLen);
string_test.toCharArray(mydata.datastruct.data_4,stringLen+1);
Serial.println(string_test);
Serial.println("Init Done - array loaded");
Serial.println("...... ...... ......");
Serial.println("create folder");
if (myfs.mkdir("structuredData")) {
Serial.println(" success");
} else {
Serial.println(" failed");
}
Serial.println();
//lets try something more interesting and complicated
file3 = myfs.open("/structuredData/logger.txt", FILE_WRITE);
for(int32_t i = 0; i < 10; i++) {
file3.write(mydata.Packet, arraySize);
}
file3.close();
Serial.println();
Serial.println("2nd Directory contents:");
printDirectory();
Serial.println();
file3 = myfs.open("/structuredData/logger.txt");
for(uint8_t i = 0; i <30; i++){
//if(eRAM.f_eof(file3)) //break loop on EOF
// break;
int n = file3.read(readdata.Packet, arraySize);
//Used this in place of a file1.eof() function
//---------Send data to serial
if (readdata.datastruct.data_0) Serial.print("true");
if (!readdata.datastruct.data_0) Serial.print("false");
Serial.print(", ");
Serial.print(readdata.datastruct.data_1, DEC);
Serial.print(", ");
Serial.print(readdata.datastruct.data_2, DEC);
Serial.print(", ");
Serial.print(readdata.datastruct.data_3, DEC);
Serial.print(", ");
for (uint8_t j = 0; j < stringLen; j++) {
Serial.print(readdata.datastruct.data_4[j]);
}
Serial.println();
if((file3.position()+1) > file3.size()) break;
//if(file3.available() == 0) break;
}
file3.close();
file1 = myfs.open("file1.txt", FILE_WRITE);
file2 = myfs.open("file2.txt", FILE_WRITE);
file3 = myfs.open("file3.txt", FILE_WRITE);
file1.println("this is a test");
file2.println("this is a test");
file3.println("this is a test");
file1.close();
file2.close();
file3.close();
file1 = myfs.open("file10.txt", FILE_WRITE);
file2 = myfs.open("file20.txt", FILE_WRITE);
file3 = myfs.open("file30.txt", FILE_WRITE);
file1.println("this is a test");
file2.println("this is a test");
file3.println("this is a test");
file1.close();
file2.close();
file3.close();
//next test
//lets make a few files and directories.
Serial.println();
file1 = myfs.open("file1.txt", FILE_WRITE);
file2 = myfs.open("file2.txt", FILE_WRITE);
file3 = myfs.open("file3.txt", FILE_WRITE);
file1.println("this is a test");
file2.println("this is a test");
file3.println("this is a test");
file1.close();
file2.close();
file3.close();
myfs.mkdir("test1");
myfs.mkdir("test2");
myfs.mkdir("test3");
printDirectory();
file1 = myfs.open("/test1/file1.txt", FILE_WRITE);
file2 = myfs.open("/test2/file2.txt", FILE_WRITE);
file3 = myfs.open("/test3/file3.txt", FILE_WRITE);
file1.println("this is a test");
file2.println("this is a test");
file3.println("this is a test");
file1.close();
file2.close();
file3.close();
printDirectory();
//now lets remove them
/* if(myfs.remove("/test3/file3") == true)
Serial.println("file /test3/file3 removed!");
if(myfs.rmdir("test3") == true)
Serial.println("directory /test3 removed!");
myfs.remove("/test2/file2");
myfs.rmdir("test2");
*/
printDirectory();
Serial.printf("Disk Usuage:\n");
Serial.printf("Bytes Used: %d, Bytes Total:%llu\n", myfs.usedSize(), myfs.totalSize());
}
void printDirectory() {
Serial.println("printDirectory\n--------------");
printDirectory(myfs.open("/"), 0);
Serial.println();
}
void printDirectory(File dir, int numTabs) {
//dir.whoami();
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
//Serial.println("**nomorefiles**");
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
if(entry.isDirectory()) {
Serial.print("DIR\t");
} else {
Serial.print("FILE\t");
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println(" / ");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
void loop() {
}