From eff8126db81984f62f6b18848833229266e03cbc Mon Sep 17 00:00:00 2001 From: Stanislav Khromov Date: Wed, 14 Jan 2026 01:37:17 +0100 Subject: [PATCH 1/2] feat: add format function --- .../SDCardManager/include/SDCardManager.h | 8 ++++++ .../SDCardManager/src/SDCardManager.cpp | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/libs/hardware/SDCardManager/include/SDCardManager.h b/libs/hardware/SDCardManager/include/SDCardManager.h index 1734632..63917f4 100644 --- a/libs/hardware/SDCardManager/include/SDCardManager.h +++ b/libs/hardware/SDCardManager/include/SDCardManager.h @@ -40,6 +40,14 @@ class SDCardManager { bool openFileForWrite(const char* moduleName, const String& path, FsFile& file); bool removeDir(const char* path); + /** + * Format the SD card as FAT32/exFAT (auto-selected based on size) + * WARNING: This erases ALL data on the card! + * @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: diff --git a/libs/hardware/SDCardManager/src/SDCardManager.cpp b/libs/hardware/SDCardManager/src/SDCardManager.cpp index f55d506..4ef1322 100644 --- a/libs/hardware/SDCardManager/src/SDCardManager.cpp +++ b/libs/hardware/SDCardManager/src/SDCardManager.cpp @@ -275,3 +275,30 @@ bool SDCardManager::removeDir(const char* 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; +} From 82e6f846bc427c130a3ca9ecf0b4d27214699d4e Mon Sep 17 00:00:00 2001 From: Stanislav Khromov Date: Thu, 15 Jan 2026 00:48:45 +0100 Subject: [PATCH 2/2] Update SDCardManager.h --- libs/hardware/SDCardManager/include/SDCardManager.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libs/hardware/SDCardManager/include/SDCardManager.h b/libs/hardware/SDCardManager/include/SDCardManager.h index 63917f4..216c6a4 100644 --- a/libs/hardware/SDCardManager/include/SDCardManager.h +++ b/libs/hardware/SDCardManager/include/SDCardManager.h @@ -1,9 +1,10 @@ #pragma once -#include -#include -#include #include +#include + +#include +#include class SDCardManager { public: @@ -42,13 +43,12 @@ class SDCardManager { /** * Format the SD card as FAT32/exFAT (auto-selected based on size) - * WARNING: This erases ALL data on the card! * @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; } + static SDCardManager& getInstance() { return instance; } private: static SDCardManager instance;