Basic working SD card.'

This commit is contained in:
2026-08-09 18:34:23 -06:00
parent 8a44887b6f
commit 0014e8697f
10 changed files with 364 additions and 22 deletions
+109
View File
@@ -228,6 +228,115 @@ fs::FS& SDManager::fs()
}
StorageCardType SDManager::cardType() const
{
if (mounted && backend != nullptr)
{
return backend->cardType();
}
return StorageCardType::None;
}
const char* SDManager::cardTypeName() const
{
return cardTypeName(cardType());
}
uint64_t SDManager::totalBytes() const
{
if (mounted && backend != nullptr)
{
return backend->totalBytes();
}
return 0;
}
uint64_t SDManager::usedBytes() const
{
if (mounted && backend != nullptr)
{
return backend->usedBytes();
}
return 0;
}
uint64_t SDManager::freeBytes() const
{
uint64_t total = totalBytes();
uint64_t used = usedBytes();
return (total > used) ? (total - used) : 0;
}
uint32_t SDManager::measureWriteSpeed()
{
if (!mounted || backend == nullptr)
{
return 0;
}
fs::FS& files = backend->fs();
const char* scratchPath = STORAGE_SPEED_MEASURE_PATH;
const size_t bufferSize = 16 * 1024;
// Remove any leftover from a previous crashed run.
files.remove(scratchPath);
uint8_t* buffer = (uint8_t*)malloc(bufferSize);
if (buffer == nullptr)
{
return 0;
}
memset(buffer, 0xA5, bufferSize);
File file = files.open(scratchPath, FILE_WRITE);
if (!file)
{
free(buffer);
return 0;
}
uint32_t remaining = STORAGE_SPEED_MEASURE_BYTES;
uint32_t startUs = micros();
while (remaining > 0)
{
size_t toWrite = (remaining < bufferSize) ? remaining : bufferSize;
size_t written = file.write(buffer, toWrite);
if (written == 0)
{
break;
}
remaining -= written;
}
file.close();
uint32_t elapsedUs = micros() - startUs;
Serial.print("Elapsed microseconds: ");
Serial.println(elapsedUs);
files.remove(scratchPath);
free(buffer);
if (remaining != 0 || elapsedUs == 0)
{
return 0;
}
uint64_t writtenBytes = (uint64_t)STORAGE_SPEED_MEASURE_BYTES - remaining;
return (uint32_t)((writtenBytes * 1000000ULL) / elapsedUs);
}
const char* SDManager::cardTypeName(StorageCardType type)
{
switch (type)