#include <SD.h>
#define CS_PIN 5
File Myfile;
void listDir(String Path)
{
Serial.printf("Listing directory: %s\n", Path);
File root;
root = SD.open(Path);
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());
}
else
{
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
}
String Encryption(String Value)
{
Serial.println(Value);
char Key = 'Q';
int length = Value.length();
for (int i = 0; i < length; i++)
{
Value[i] = (Value[i] ^ Key);
}
return Value;
}
String ReadFile(String filename)
{
if (!SD.exists(filename))
{
return "";
}
Myfile.setTimeout(10000);
Myfile = SD.open(filename, FILE_READ);
if (Myfile.available())
{
String read_data = Myfile.readString();
Myfile.close();
return read_data;
}
}
String format_file_name(String filename)
{
filename.trim();
if (!filename.startsWith("/"))
{
filename = "/" + filename;
}
if (!filename.endsWith(".txt"))
{
filename = filename + ".ino";
}
return filename;
}
void print_on_serial(String Orignal_Data, String Modified_Data, String filename,String flag) {
if (Orignal_Data == "")
{
Serial.printf("%s Dosen`t exist", filename);
}
else
{
if (flag[0] == 'r')
{
Serial.print("\n-----------------------------------------------\n");
Serial.print("\nData From File is:");
Serial.print(Orignal_Data);
Serial.print("\nResult Data is :");
Serial.print(Modified_Data);
Serial.print("\n-----------------------------------------------\n");
}
else if (flag[0] == 'w')
{
Serial.print("\n-----------------------------------------------\n");
Serial.print("\nSerial Input is : ");
Serial.print(Orignal_Data);
Serial.print("\nData : ");
Serial.print(Modified_Data);
Serial.print("\nSaved in :");
Serial.print(filename);
Serial.print("\n-----------------------------------------------\n");
}
}
}
boolean WriteFile(String filename, String Input)
{
Serial.printf("Writing file: %s\n", filename);
File file = SD.open(filename, FILE_WRITE);
if (!file)
{
Serial.println("Failed to open file for writing");
return false;
}
if (file.print(Input))
{
Serial.println("File written");
return true;
}
else
{
Serial.println("Write failed");
return false;
}
file.close();
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.setTimeout(600);
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("\ninitialization done.");
listDir("/");
}
void loop() {
while (Serial.available() > 0) {
String S_input = Serial.readString();
Serial.println(S_input);
int edrt = S_input.indexOf("@");
int didx = S_input.indexOf("@", edrt + 1 );
String Mode = S_input.substring(0, edrt);
Mode.toLowerCase();
String F_name = S_input.substring(edrt + 1, didx);
String In_Da = S_input.substring(didx + 1, S_input.length());
In_Da.trim();
Mode.trim();
String F_F_name = format_file_name(F_name);
if (Mode[0] == 'r' || Mode[3] == 'd') {
String Read_Data = ReadFile(F_F_name);
String Result = Encryption(Read_Data);
print_on_serial(Read_Data,Result,F_name,Mode);
}
if (Mode[0] == 'w' || Mode[4] == 'e') {
String Data_After_Encrypt = Encryption(In_Da);
boolean wrtn = WriteFile(F_F_name,Data_After_Encrypt);
if(!wrtn){
Serial.println("We can`t Write Data in file!");
}
print_on_serial(In_Da,Data_After_Encrypt,F_F_name,Mode);
}
}
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}