Merge 82e6f846bc427c130a3ca9ecf0b4d27214699d4e into c39f253a7dabbc193a8d7d310fb8777dca0ab8f1

This commit is contained in:
Stanislav Khromov 2026-01-21 21:28:36 +11:00 committed by GitHub
commit 6a3473a4a4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 4 deletions

View File

@ -1,9 +1,10 @@
#pragma once #pragma once
#include <WString.h>
#include <vector>
#include <string>
#include <SdFat.h> #include <SdFat.h>
#include <WString.h>
#include <string>
#include <vector>
class SDCardManager { class SDCardManager {
public: public:
@ -40,7 +41,14 @@ class SDCardManager {
bool openFileForWrite(const char* moduleName, const String& path, FsFile& file); bool openFileForWrite(const char* moduleName, const String& path, FsFile& file);
bool removeDir(const char* path); bool removeDir(const char* path);
static SDCardManager& getInstance() { return instance; } /**
* Format the SD card as FAT32/exFAT (auto-selected based on size)
* @param pr Optional Print destination for progress output (e.g., &Serial)
* @return true on success, false on failure
*/
bool format(Print* pr = nullptr);
static SDCardManager& getInstance() { return instance; }
private: private:
static SDCardManager instance; static SDCardManager instance;

View File

@ -275,3 +275,30 @@ bool SDCardManager::removeDir(const char* path) {
return sd.rmdir(path); return sd.rmdir(path);
} }
bool SDCardManager::format(Print* pr) {
if (!initialized) {
if (pr) pr->println("[SD] SDCardManager: not initialized");
return false;
}
Serial.printf("[%lu] [SD] Starting format...\n", millis());
if (pr) pr->println("[SD] Formatting card, please wait...");
// SdFat's format() method handles FAT16/FAT32/exFAT selection automatically
// based on card size (<=32GB = FAT, >32GB = exFAT)
bool success = sd.format(pr);
if (success) {
Serial.printf("[%lu] [SD] Format succeeded, re-initializing...\n", millis());
if (pr) pr->println("[SD] Format complete, remounting...");
// Re-initialize after format to mount the new filesystem
initialized = false;
success = begin();
} else {
Serial.printf("[%lu] [SD] Format failed\n", millis());
if (pr) pr->println("[SD] Format failed!");
}
return success;
}