Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cores/esp8266/FS.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#include <memory>
#include <Arduino.h>

class SDClass;

namespace fs {

class File;
Expand Down Expand Up @@ -208,8 +210,10 @@ class FS

bool gc();

friend class ::SDClass; // More of a frenemy, but SD needs internal implementation to get private FAT bits
protected:
FSImplPtr _impl;
FSImplPtr getImpl() { return _impl; }
};

} // namespace fs
Expand Down
28 changes: 21 additions & 7 deletions libraries/SD/src/SD.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,35 +84,49 @@ class SDClass {
}

uint8_t type() {
return 0;//card.type();
sdfs::SDFSImpl* sd = static_cast<sdfs::SDFSImpl*>(SDFS.getImpl().get());
return sd->type();
}

uint8_t fatType() {
return 0;//volume.fatType();
sdfs::SDFSImpl* sd = static_cast<sdfs::SDFSImpl*>(SDFS.getImpl().get());
return sd->fatType();
}

size_t blocksPerCluster() {
return 0;//volume.blocksPerCluster();
sdfs::SDFSImpl* sd = static_cast<sdfs::SDFSImpl*>(SDFS.getImpl().get());
return sd->blocksPerCluster();
}

size_t totalClusters() {
return 0;//volume.clusterCount();
sdfs::SDFSImpl* sd = static_cast<sdfs::SDFSImpl*>(SDFS.getImpl().get());
return sd->totalClusters();
}

size_t blockSize() {
return 512;
}

size_t totalBlocks() {
return 0;//(totalClusters() / blocksPerCluster());
return (totalClusters() / blocksPerCluster());
}

size_t clusterSize() {
return 0;//blocksPerCluster() * blockSize();
return blocksPerCluster() * blockSize();
}

size_t size() {
return 0;//(clusterSize() * totalClusters());
uint64_t sz = size64();
#ifdef DEBUG_ESP_PORT
if (sz > (uint64_t)SIZE_MAX) {
DEBUG_ESP_PORT.printf_P(PSTR("WARNING: SD card size overflow (%lld>= 4GB). Please update source to use size64().\n"), sz);
}
#endif
return (size_t)sz;
}

uint64_t size64() {
return ((uint64_t)clusterSize() * (uint64_t)totalClusters());
}

private:
Expand Down
24 changes: 24 additions & 0 deletions libraries/SDFS/src/SDFS.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,30 @@ class SDFSImpl : public FSImpl

bool format() override;

// The following are not common FS interfaces, but are needed only to
// support the older SD.h exports
uint8_t type() {
return _fs.card()->type();
}
uint8_t fatType() {
return _fs.vol()->fatType();
}
size_t blocksPerCluster() {
return _fs.vol()->blocksPerCluster();
}
size_t totalClusters() {
return _fs.vol()->clusterCount();
}
size_t totalBlocks() {
return (totalClusters() / blocksPerCluster());
}
size_t clusterSize() {
return blocksPerCluster() * 512; // 512b block size
}
size_t size() {
return (clusterSize() * totalClusters());
}

protected:
friend class SDFileImpl;
friend class SDFSDirImpl;
Expand Down