324 lines
8.6 KiB
C++
324 lines
8.6 KiB
C++
#include"SDmanger.h"
|
|
#define sd_cmd 10
|
|
#define sd_clk 9
|
|
#define sd_dat0 11
|
|
#define sd_dat1 12
|
|
#define sd_dat2 13
|
|
#define sd_dat3 14
|
|
|
|
|
|
File Comenfile;
|
|
|
|
int sdcard::init_sdcard()
|
|
{
|
|
|
|
SD_MMC.setPins(sd_clk,sd_cmd,sd_dat0,sd_dat1,sd_dat2,sd_dat3);
|
|
// int succ = SD_MMC.begin("/sdcard", true,true,20000);
|
|
int succ = SD_MMC.begin("/sdcard", false, false,40000,5);
|
|
if (succ) {
|
|
// Serial.printf("SD_MMC Begin: %d\n", succ);
|
|
write_log(log_path,"SD_MMC Begin: "+String(succ),10);
|
|
uint8_t cardType = SD_MMC.cardType();
|
|
// Serial.print("SD_MMC Card Type: ");uj
|
|
write_log(log_path,"SD_MMC Card Type: ",10);
|
|
if (cardType == CARD_MMC) {
|
|
// Serial.println("MMC");
|
|
write_log(log_path,"MMC",10);
|
|
} else if (cardType == CARD_SD) {
|
|
// Serial.println("SDSC");
|
|
write_log(log_path,"SDSC",10);
|
|
} else if (cardType == CARD_SDHC) {
|
|
// Serial.println("SDHC");
|
|
write_log(log_path,"SDHC",10);
|
|
} else {
|
|
// Serial.println("UNKNOWN");
|
|
write_log(log_path,"UNKNOWN",10);
|
|
}
|
|
|
|
uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024);
|
|
uint32_t c = cardSize;
|
|
// Serial.printf("SD_MMC Card Size: %lluMB\n", cardSize);
|
|
write_log(log_path,"SD_MMC Card Size: "+String(c)+"MB",10);
|
|
|
|
// Serial.printf("Total space: %lluMB\n", SD_MMC.totalBytes() / (1024 * 1024));
|
|
float a = SD_MMC.totalBytes() / (1024 * 1024);
|
|
write_log(log_path,"Total space: "+String(a)+"MB",10);
|
|
// Serial.printf("Used space: %lluMB\n", SD_MMC.usedBytes() / (1024 * 1024));
|
|
a = SD_MMC.usedBytes() / (1024 * 1024);
|
|
write_log(log_path,"Used space: "+String(a)+"MB",10);
|
|
|
|
mylistDir( "/", 0);
|
|
// File file;
|
|
|
|
// file.listFiles("/");
|
|
// file.flush();
|
|
// file.close();
|
|
|
|
} else {
|
|
// Serial.printf("Failed to mount SD card VFAT filesystem. \n");
|
|
write_log(log_path,"Failed to mount SD card VFAT filesystem. ",10);
|
|
// Serial.println("Do you have an SD Card installed?");
|
|
write_log(log_path,"Do you have an SD Card installed?",10);
|
|
// Serial.println("Check pin 12 and 13, not grounded, or grounded with 10k resistors!\n\n");
|
|
write_log(log_path,"Check pin 12 and 13, not grounded, or grounded with 10k resistors!\n\n",10);
|
|
// major_fail();
|
|
}
|
|
|
|
return ESP_OK;
|
|
}
|
|
|
|
void sdcard::mylistDir( const char * dirname, uint8_t levels) {
|
|
write_log(log_path,"Listing directory: "+String(dirname),10);
|
|
String dir(dirname);
|
|
File root = SD_MMC.open(dirname);
|
|
if (!root) {
|
|
write_log(log_path,"Failed to open directory",10);
|
|
return;
|
|
}
|
|
if (!root.isDirectory()) {
|
|
write_log(log_path,"Not a directory",10);
|
|
return;
|
|
}
|
|
|
|
File filex = root.openNextFile();
|
|
while (filex) {
|
|
if (filex.isDirectory())
|
|
{
|
|
write_log(log_path," DIR : " + String(filex.name()),10);
|
|
if (levels) {
|
|
String filename=dir+"/"+String(filex.name());
|
|
mylistDir( filename.c_str(), levels - 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
write_log(log_path," FILE: " + String(filex.name()) + " size :"+ String(filex.size()) + "B",10);
|
|
}
|
|
filex = root.openNextFile();
|
|
}
|
|
}
|
|
bool sdcard::ListDir(const char * dirname,Vector <String> &stringlist)
|
|
{
|
|
stringlist.clear();
|
|
// Serial.printf("Listing directory: %s\n", dirname);
|
|
write_log(log_path,"Listing directory: "+String(dirname),10);
|
|
String dir(dirname);
|
|
File root = SD_MMC.open(dirname);
|
|
if (!root) {
|
|
// Serial.println("Failed to open directory");
|
|
write_log(log_path,"Failed to open directory",10);
|
|
return true;
|
|
}
|
|
if (!root.isDirectory()) {
|
|
// Serial.println("Not a directory");
|
|
write_log(log_path,"Not a directory",10);
|
|
return true;
|
|
}
|
|
|
|
File filex = root.openNextFile();
|
|
while (filex)
|
|
{
|
|
if (filex.isDirectory()) {
|
|
|
|
} else {
|
|
String filename=dir+"/"+String(filex.name());
|
|
stringlist.push_back(filename);
|
|
|
|
if (stringlist.size()==stringlist.max_size())
|
|
{
|
|
return false;
|
|
/* code */
|
|
}
|
|
|
|
}
|
|
filex = root.openNextFile();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
void sdcard::delete_old_stuff() {
|
|
|
|
// Serial.printf("Total space: %lluMB\n", SD_MMC.totalBytes() / (1024 * 1024));
|
|
float a = SD_MMC.totalBytes() / (1024 * 1024);
|
|
write_log(log_path,"Total space: "+String(a)+"MB",10);
|
|
// Serial.printf("Used space: %lluMB\n", SD_MMC.usedBytes() / (1024 * 1024));
|
|
a = SD_MMC.usedBytes() / (1024 * 1024);
|
|
write_log(log_path,"Used space: "+String(a)+"MB",10);
|
|
//listDir( "/", 0);
|
|
|
|
float full = 1.0 * SD_MMC.usedBytes() / SD_MMC.totalBytes();;
|
|
if (full < 0.8) {
|
|
// Serial.printf("Nothing deleted, %.1f%% disk full\n", 100.0 * full);
|
|
write_log(log_path,"Nothing deleted, "+String(100.0 * full)+"% disk full",10);
|
|
} else {
|
|
// Serial.printf("Disk is %.1f%% full ... deleting oldest file\n", 100.0 * full);
|
|
write_log(log_path,"Disk is "+String(100.0 * full)+"% full ... deleting oldest file",10);
|
|
while (full > 0.8) {
|
|
|
|
double del_number = 999999999;
|
|
char del_numbername[50];
|
|
|
|
File f = SD_MMC.open("/");
|
|
|
|
File file = f.openNextFile();
|
|
|
|
while (file) {
|
|
//Serial.println(file.name());
|
|
if (!file.isDirectory()) {
|
|
|
|
char foldname[50];
|
|
strcpy(foldname, file.name());
|
|
for ( int x = 0; x < 50; x++) {
|
|
if ( (foldname[x] >= 0x30 && foldname[x] <= 0x39) || foldname[x] == 0x2E) {
|
|
} else {
|
|
if (foldname[x] != 0) foldname[x] = 0x20;
|
|
}
|
|
}
|
|
|
|
double i = atof(foldname);
|
|
if ( i > 0 && i < del_number) {
|
|
strcpy (del_numbername, file.name());
|
|
del_number = i;
|
|
}
|
|
//Serial.printf("Name is %s, number is %f\n", foldname, i);
|
|
}
|
|
file = f.openNextFile();
|
|
|
|
}
|
|
// Serial.printf("lowest is Name is %s, number is %f\n", del_numbername, del_number);
|
|
write_log(log_path,"lowest is Name is "+String(del_numbername)+", number is "+String(del_number),10);
|
|
if (del_number < 999999999) {
|
|
deleteFolderOrFile(del_numbername);
|
|
}
|
|
full = 1.0 * SD_MMC.usedBytes() / SD_MMC.totalBytes();
|
|
// Serial.printf("Disk is %.1f%% full ... \n", 100.0 * full);
|
|
write_log(log_path,"Disk is "+String(100.0 * full)+"% full ... ",10);
|
|
f.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void sdcard::deleteFolderOrFile(const char * val) {
|
|
write_log(log_path,"Deleting : "+String(val),10);
|
|
File f = SD_MMC.open(val);
|
|
if (!f) {
|
|
write_log(log_path,"Failed to open "+String(val),10);
|
|
return;
|
|
}
|
|
|
|
if (f.isDirectory()) {
|
|
File file = f.openNextFile();
|
|
while (file) {
|
|
if (file.isDirectory()) {
|
|
write_log(log_path," DIR : ",10);
|
|
write_log(log_path,file.name(),10);
|
|
} else {
|
|
write_log(log_path," FILE: ",10);
|
|
write_log(log_path,file.name(),10);
|
|
write_log(log_path," SIZE: ",10);
|
|
write_log(log_path,String(file.size()),10);
|
|
if (SD_MMC.remove(file.name())) {
|
|
write_log(log_path," deleted.",10);
|
|
} else {
|
|
write_log(log_path," FAILED.",10);
|
|
}
|
|
}
|
|
file = f.openNextFile();
|
|
}
|
|
f.close();
|
|
if (SD_MMC.rmdir(val)) {
|
|
write_log(log_path,"Dir "+String(val)+" removed",10);
|
|
} else {
|
|
write_log(log_path,"Remove dir failed",10);
|
|
}
|
|
|
|
} else {
|
|
//Remove the file
|
|
if (SD_MMC.remove(val)) {
|
|
write_log(log_path,"File "+String(val)+" deleted",10);
|
|
} else {
|
|
write_log(log_path,"Delete failed",10);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sdcard:: testwriet()
|
|
{
|
|
File file;
|
|
file = SD_MMC.open("/try.txt", "wb");
|
|
file.println("hello world");
|
|
file.flush();
|
|
file.close();
|
|
}
|
|
|
|
|
|
|
|
void sdcard::WriteStringToFile(String name,String Str)
|
|
{
|
|
File file;
|
|
|
|
file = SD_MMC.open(name, "w+");
|
|
file.println(Str);
|
|
file.flush();
|
|
file.close();
|
|
}
|
|
void sdcard::WriteStringToFile(String name,char *data,size_t lenth)
|
|
{
|
|
File file;
|
|
|
|
file = SD_MMC.open(name, "wb");
|
|
file.write((const byte *)data,lenth);
|
|
file.flush();
|
|
file.close();
|
|
}
|
|
bool sdcard::Mkdir(String path)
|
|
{
|
|
return SD_MMC.mkdir(path);
|
|
}
|
|
|
|
namespace sdcard
|
|
{
|
|
void openFileformWirte(String Path)
|
|
{
|
|
if (Comenfile.available())
|
|
{
|
|
Comenfile.close();
|
|
/* code */
|
|
}
|
|
Comenfile = SD_MMC.open(Path, "w+");
|
|
|
|
}
|
|
|
|
void WritetoFileCommen(String Str)
|
|
{
|
|
if (Comenfile.available())
|
|
{
|
|
Comenfile.print(Str);
|
|
Comenfile.flush();
|
|
/* code */
|
|
}
|
|
}
|
|
|
|
void WritetoFileCommen(char *data,size_t lenth)
|
|
{
|
|
if (Comenfile.available())
|
|
{
|
|
Comenfile.write((const byte *)data,lenth);
|
|
Comenfile.flush();
|
|
/* code */
|
|
}
|
|
|
|
}
|
|
|
|
void closeCommenFile()
|
|
{
|
|
if (Comenfile.available())
|
|
{
|
|
Comenfile.close();
|
|
/* code */
|
|
}
|
|
|
|
}
|
|
} |