@@ -34,7 +34,7 @@ KB/Sec,usec,usec,usec | |||
3965.11,16733,110,127 | |||
``` | |||
The default version of SdFatConfig.h enables support for dedicated SPI and | |||
optimized access to contiguous files. This make SdFat Version 2 slightly | |||
optimized access to contiguous files. This makes SdFat Version 2 slightly | |||
larger than Version 1. If these features are disabled, Version 2 is smaller | |||
than Version 1. | |||
@@ -1,3 +0,0 @@ | |||
Ignoring ../src/DigitalIO/readme.txt; not a valid file name (cc, h, cpp, cu, cuh) | |||
Ignoring ../src/common/CPPLINT.cfg; not a valid file name (cc, h, cpp, cu, cuh) | |||
Ignoring "../src/common/PrintTemplates.h": file excluded by "C:\Users\bill\Documents\ArduinoSdFat\libraries\SdFat\src\common\CPPLINT.cfg". File path component "PrintTemplates.h" matches pattern "PrintTemplates.h" |
@@ -1,5 +1,5 @@ | |||
name=SdFat | |||
version=2.0.0-beta.1 | |||
version=2.0.0-beta.2 | |||
license=MIT | |||
author=Bill Greiman <fat16lib@sbcglobal.net> | |||
maintainer=Bill Greiman <fat16lib@sbcglobal.net> |
@@ -236,15 +236,17 @@ class ExFatPartition { | |||
bool readSector(uint32_t sector, uint8_t* dst) { | |||
return m_blockDev->readSector(sector, dst); | |||
} | |||
bool readSectors(uint32_t sector, uint8_t* dst, size_t count) { | |||
return m_blockDev->readSectors(sector, dst, count); | |||
} | |||
bool writeSector(uint32_t sector, const uint8_t* src) { | |||
return m_blockDev->writeSector(sector, src); | |||
} | |||
#if USE_MULTI_SECTOR_IO | |||
bool readSectors(uint32_t sector, uint8_t* dst, size_t count) { | |||
return m_blockDev->readSectors(sector, dst, count); | |||
} | |||
bool writeSectors(uint32_t sector, const uint8_t* src, size_t count) { | |||
return m_blockDev->writeSectors(sector, src, count); | |||
} | |||
#endif // USE_MULTI_SECTOR_IO | |||
//---------------------------------------------------------------------------- | |||
static const uint8_t m_bytesPerSectorShift = 9; | |||
static const uint16_t m_bytesPerSector = 512; |
@@ -64,7 +64,7 @@ static void printHex(print_t* pr, uint32_t val) { | |||
} | |||
} | |||
//------------------------------------------------------------------------------ | |||
static void printDir(print_t* pr, dir_t* dir) { | |||
static void printDir(print_t* pr, DirFat_t* dir) { | |||
if (!dir->name[0] || dir->name[0] == FAT_NAME_DELETED) { | |||
pr->println(F("Not Used")); | |||
} else if (isFileOrSubdir(dir)) { | |||
@@ -85,7 +85,7 @@ static void printDir(print_t* pr, dir_t* dir) { | |||
} | |||
//------------------------------------------------------------------------------ | |||
void FatPartition::dmpDirSector(print_t* pr, uint32_t sector) { | |||
dir_t dir[16]; | |||
DirFat_t dir[16]; | |||
if (!readSector(sector, reinterpret_cast<uint8_t*>(dir))) { | |||
pr->println(F("dmpDir failed")); | |||
return; |
@@ -94,7 +94,7 @@ fail: | |||
//------------------------------------------------------------------------------ | |||
// cache a file's directory entry | |||
// return pointer to cached entry or null for failure | |||
dir_t* FatFile::cacheDirEntry(uint8_t action) { | |||
DirFat_t* FatFile::cacheDirEntry(uint8_t action) { | |||
cache_t* pc; | |||
pc = m_vol->cacheFetchData(m_dirSector, action); | |||
if (!pc) { | |||
@@ -206,8 +206,8 @@ bool FatFile::preAllocate(uint32_t length) { | |||
return false; | |||
} | |||
//------------------------------------------------------------------------------ | |||
bool FatFile::dirEntry(dir_t* dst) { | |||
dir_t* dir; | |||
bool FatFile::dirEntry(DirFat_t* dst) { | |||
DirFat_t* dir; | |||
// Make sure fields on device are correct. | |||
if (!sync()) { | |||
DBG_FAIL_MACRO; | |||
@@ -220,7 +220,7 @@ bool FatFile::dirEntry(dir_t* dst) { | |||
goto fail; | |||
} | |||
// copy to caller's struct | |||
memcpy(dst, dir, sizeof(dir_t)); | |||
memcpy(dst, dir, sizeof(DirFat_t)); | |||
return true; | |||
fail: | |||
@@ -333,8 +333,8 @@ fail: | |||
//------------------------------------------------------------------------------ | |||
bool FatFile::mkdir(FatFile* parent, fname_t* fname) { | |||
uint32_t sector; | |||
dir_t dot; | |||
dir_t* dir; | |||
DirFat_t dot; | |||
DirFat_t* dir; | |||
cache_t* pc; | |||
if (!parent->isDir()) { | |||
@@ -473,7 +473,7 @@ bool FatFile::openCachedEntry(FatFile* dirFile, uint16_t dirIndex, | |||
m_vol = dirFile->m_vol; | |||
m_dirIndex = dirIndex; | |||
m_dirCluster = dirFile->m_firstCluster; | |||
dir_t* dir = reinterpret_cast<dir_t*>(m_vol->cacheAddress()); | |||
DirFat_t* dir = reinterpret_cast<DirFat_t*>(m_vol->cacheAddress()); | |||
dir += 0XF & dirIndex; | |||
// Must be file or subdirectory. | |||
@@ -549,7 +549,7 @@ fail: | |||
//------------------------------------------------------------------------------ | |||
bool FatFile::openNext(FatFile* dirFile, oflag_t oflag) { | |||
uint8_t checksum = 0; | |||
ldir_t* ldir; | |||
DirLfn_t* ldir; | |||
uint8_t lfnOrd = 0; | |||
uint16_t index; | |||
@@ -561,7 +561,7 @@ bool FatFile::openNext(FatFile* dirFile, oflag_t oflag) { | |||
while (1) { | |||
// read entry into cache | |||
index = dirFile->curPosition()/32; | |||
dir_t* dir = dirFile->readDirCache(); | |||
DirFat_t* dir = dirFile->readDirCache(); | |||
if (!dir) { | |||
if (dirFile->getError()) { | |||
DBG_FAIL_MACRO; | |||
@@ -586,7 +586,7 @@ bool FatFile::openNext(FatFile* dirFile, oflag_t oflag) { | |||
} | |||
return true; | |||
} else if (isLongName(dir)) { | |||
ldir = reinterpret_cast<ldir_t*>(dir); | |||
ldir = reinterpret_cast<DirLfn_t*>(dir); | |||
if (ldir->order & FAT_ORDER_LAST_LONG_ENTRY) { | |||
lfnOrd = ldir->order & 0X1F; | |||
checksum = ldir->checksum; | |||
@@ -761,7 +761,7 @@ fail: | |||
return -1; | |||
} | |||
//------------------------------------------------------------------------------ | |||
int8_t FatFile::readDir(dir_t* dir) { | |||
int8_t FatFile::readDir(DirFat_t* dir) { | |||
int16_t n; | |||
// if not a directory file or miss-positioned return an error | |||
if (!isDir() || (0X1F & m_curPosition)) { | |||
@@ -769,8 +769,8 @@ int8_t FatFile::readDir(dir_t* dir) { | |||
} | |||
while (1) { | |||
n = read(dir, sizeof(dir_t)); | |||
if (n != sizeof(dir_t)) { | |||
n = read(dir, sizeof(DirFat_t)); | |||
if (n != sizeof(DirFat_t)) { | |||
return n == 0 ? 0 : -1; | |||
} | |||
// last entry if FAT_NAME_FREE | |||
@@ -790,7 +790,7 @@ int8_t FatFile::readDir(dir_t* dir) { | |||
//------------------------------------------------------------------------------ | |||
// Read next directory entry into the cache | |||
// Assumes file is correctly positioned | |||
dir_t* FatFile::readDirCache(bool skipReadOk) { | |||
DirFat_t* FatFile::readDirCache(bool skipReadOk) { | |||
uint8_t i = (m_curPosition >> 5) & 0XF; | |||
if (i == 0 || !skipReadOk) { | |||
@@ -806,7 +806,7 @@ dir_t* FatFile::readDirCache(bool skipReadOk) { | |||
m_curPosition += 32; | |||
} | |||
// return pointer to entry | |||
return reinterpret_cast<dir_t*>(m_vol->cacheAddress()) + i; | |||
return reinterpret_cast<DirFat_t*>(m_vol->cacheAddress()) + i; | |||
fail: | |||
return nullptr; | |||
@@ -829,12 +829,12 @@ bool FatFile::rename(const char* newPath) { | |||
} | |||
//------------------------------------------------------------------------------ | |||
bool FatFile::rename(FatFile* dirFile, const char* newPath) { | |||
dir_t entry; | |||
DirFat_t entry; | |||
uint32_t dirCluster = 0; | |||
FatFile file; | |||
FatFile oldFile; | |||
cache_t* pc; | |||
dir_t* dir; | |||
DirFat_t* dir; | |||
// Must be an open file or subdirectory. | |||
if (!(isFile() || isSubDir())) { | |||
@@ -946,7 +946,7 @@ bool FatFile::rmdir() { | |||
// make sure directory is empty | |||
while (1) { | |||
dir_t* dir = readDirCache(true); | |||
DirFat_t* dir = readDirCache(true); | |||
if (!dir) { | |||
// EOF if no error. | |||
if (!getError()) { | |||
@@ -990,7 +990,7 @@ bool FatFile::rmRfStar() { | |||
// remember position | |||
index = m_curPosition/32; | |||
dir_t* dir = readDirCache(); | |||
DirFat_t* dir = readDirCache(); | |||
if (!dir) { | |||
// At EOF if no error. | |||
if (!getError()) { | |||
@@ -1118,7 +1118,7 @@ bool FatFile::sync() { | |||
return true; | |||
} | |||
if (m_flags & FILE_FLAG_DIR_DIRTY) { | |||
dir_t* dir = cacheDirEntry(FatCache::CACHE_FOR_WRITE); | |||
DirFat_t* dir = cacheDirEntry(FatCache::CACHE_FOR_WRITE); | |||
// check for deleted by another open file object | |||
if (!dir || dir->name[0] == FAT_NAME_DELETED) { | |||
DBG_FAIL_MACRO; | |||
@@ -1157,7 +1157,7 @@ bool FatFile::timestamp(uint8_t flags, uint16_t year, uint8_t month, | |||
uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) { | |||
uint16_t dirDate; | |||
uint16_t dirTime; | |||
dir_t* dir; | |||
DirFat_t* dir; | |||
if (!isFile() | |||
|| year < 1980 |
@@ -233,7 +233,7 @@ class FatFile { | |||
* | |||
* \return true for success or false for failure. | |||
*/ | |||
bool dirEntry(dir_t* dir); | |||
bool dirEntry(DirFat_t* dir); | |||
/** \return The number of bytes allocated to a directory or zero | |||
* if an error occurs. | |||
*/ | |||
@@ -679,7 +679,7 @@ class FatFile { | |||
int read(void* buf, size_t count); | |||
/** Read the next directory entry from a directory file. | |||
* | |||
* \param[out] dir The dir_t struct that will receive the data. | |||
* \param[out] dir The DirFat_t struct that will receive the data. | |||
* | |||
* \return For success readDir() returns the number of bytes read. | |||
* A value of zero will be returned if end of file is reached. | |||
@@ -687,7 +687,7 @@ class FatFile { | |||
* readDir() called before a directory has been opened, this is not | |||
* a directory file or an I/O error occurred. | |||
*/ | |||
int8_t readDir(dir_t* dir); | |||
int8_t readDir(DirFat_t* dir); | |||
/** Remove a file. | |||
* | |||
* The directory entry and all data for the file are deleted. | |||
@@ -936,7 +936,7 @@ class FatFile { | |||
// private functions | |||
bool addCluster(); | |||
bool addDirCluster(); | |||
dir_t* cacheDirEntry(uint8_t action); | |||
DirFat_t* cacheDirEntry(uint8_t action); | |||
static uint8_t lfnChecksum(uint8_t* name); | |||
bool lfnUniqueSfn(fname_t* fname); | |||
bool openCluster(FatFile* file); | |||
@@ -945,7 +945,7 @@ class FatFile { | |||
bool open(FatFile* dirFile, fname_t* fname, oflag_t oflag); | |||
bool openCachedEntry(FatFile* dirFile, uint16_t cacheIndex, oflag_t oflag, | |||
uint8_t lfnOrd); | |||
dir_t* readDirCache(bool skipReadOk = false); | |||
DirFat_t* readDirCache(bool skipReadOk = false); | |||
// bits defined in m_flags | |||
static const uint8_t FILE_FLAG_READ = 0X01; |
@@ -59,7 +59,7 @@ static uint16_t Bernstein(uint16_t hash, const char *str, size_t len) { | |||
* \param[in] i Index of character. | |||
* \return The 16-bit character. | |||
*/ | |||
static uint16_t lfnGetChar(ldir_t *ldir, uint8_t i) { | |||
static uint16_t lfnGetChar(DirLfn_t *ldir, uint8_t i) { | |||
if (i < 5) { | |||
return getLe16(ldir->unicode1 + 2*i); | |||
} else if (i < 11) { | |||
@@ -70,7 +70,7 @@ static uint16_t lfnGetChar(ldir_t *ldir, uint8_t i) { | |||
return 0; | |||
} | |||
//------------------------------------------------------------------------------ | |||
static bool lfnGetName(ldir_t *ldir, char* name, size_t n) { | |||
static bool lfnGetName(DirLfn_t *ldir, char* name, size_t n) { | |||
uint8_t i; | |||
size_t k = 13*((ldir->order & 0X1F) - 1); | |||
for (i = 0; i < 13; i++) { | |||
@@ -104,7 +104,7 @@ inline bool lfnLegalChar(char c) { | |||
* \param[in] i Index of character. | |||
* \param[in] c The 16-bit character. | |||
*/ | |||
static void lfnPutChar(ldir_t *ldir, uint8_t i, uint16_t c) { | |||
static void lfnPutChar(DirLfn_t *ldir, uint8_t i, uint16_t c) { | |||
if (i < 5) { | |||
setLe16(ldir->unicode1 + 2*i, c); | |||
} else if (i < 11) { | |||
@@ -114,7 +114,7 @@ static void lfnPutChar(ldir_t *ldir, uint8_t i, uint16_t c) { | |||
} | |||
} | |||
//------------------------------------------------------------------------------ | |||
static void lfnPutName(ldir_t *ldir, const char* name, size_t n) { | |||
static void lfnPutName(DirLfn_t *ldir, const char* name, size_t n) { | |||
size_t k = 13*((ldir->order & 0X1F) - 1); | |||
for (uint8_t i = 0; i < 13; i++, k++) { | |||
uint16_t c = k < n ? name[k] : k == n ? 0 : 0XFFFF; | |||
@@ -124,7 +124,7 @@ static void lfnPutName(ldir_t *ldir, const char* name, size_t n) { | |||
//============================================================================== | |||
bool FatFile::getName(char* name, size_t size) { | |||
FatFile dirFile; | |||
ldir_t* ldir; | |||
DirLfn_t* ldir; | |||
if (!isOpen() || size < 13) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -141,7 +141,7 @@ bool FatFile::getName(char* name, size_t size) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
} | |||
ldir = reinterpret_cast<ldir_t*>(dirFile.readDirCache()); | |||
ldir = reinterpret_cast<DirLfn_t*>(dirFile.readDirCache()); | |||
if (!ldir) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -305,8 +305,8 @@ bool FatFile::open(FatFile* dirFile, fname_t* fname, oflag_t oflag) { | |||
uint16_t curIndex; | |||
uint16_t date; | |||
uint16_t time; | |||
dir_t* dir; | |||
ldir_t* ldir; | |||
DirFat_t* dir; | |||
DirLfn_t* ldir; | |||
size_t len = fname->len; | |||
if (!dirFile->isDir() || isOpen()) { | |||
@@ -347,7 +347,7 @@ bool FatFile::open(FatFile* dirFile, fname_t* fname, oflag_t oflag) { | |||
if (dir->name[0] == FAT_NAME_DELETED || dir->name[0] == '.') { | |||
lfnOrd = 0; | |||
} else if (isLongName(dir)) { | |||
ldir = reinterpret_cast<ldir_t*>(dir); | |||
ldir = reinterpret_cast<DirLfn_t*>(dir); | |||
if (!lfnOrd) { | |||
if ((ldir->order & FAT_ORDER_LAST_LONG_ENTRY) == 0) { | |||
continue; | |||
@@ -452,7 +452,7 @@ create: | |||
} | |||
lfnOrd = freeNeed - 1; | |||
for (order = lfnOrd ; order ; order--) { | |||
ldir = reinterpret_cast<ldir_t*>(dirFile->readDirCache()); | |||
ldir = reinterpret_cast<DirLfn_t*>(dirFile->readDirCache()); | |||
if (!ldir) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -472,7 +472,7 @@ create: | |||
goto fail; | |||
} | |||
// initialize as empty file | |||
memset(dir, 0, sizeof(dir_t)); | |||
memset(dir, 0, sizeof(DirFat_t)); | |||
memcpy(dir->name, fname->sfn, 11); | |||
// Set base-name and extension lower case bits. | |||
@@ -508,7 +508,7 @@ size_t FatFile::printName(print_t* pr) { | |||
FatFile dirFile; | |||
uint16_t u; | |||
size_t n = 0; | |||
ldir_t* ldir; | |||
DirLfn_t* ldir; | |||
if (!isLFN()) { | |||
return printSFN(pr); | |||
@@ -522,7 +522,7 @@ size_t FatFile::printName(print_t* pr) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
} | |||
ldir = reinterpret_cast<ldir_t*>(dirFile.readDirCache()); | |||
ldir = reinterpret_cast<DirLfn_t*>(dirFile.readDirCache()); | |||
if (!ldir) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -560,8 +560,8 @@ bool FatFile::remove() { | |||
uint8_t checksum; | |||
uint8_t order; | |||
FatFile dirFile; | |||
dir_t* dir; | |||
ldir_t* ldir; | |||
DirFat_t* dir; | |||
DirLfn_t* ldir; | |||
// Cant' remove not open for write. | |||
if (!isWritable()) { | |||
@@ -606,7 +606,7 @@ bool FatFile::remove() { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
} | |||
ldir = reinterpret_cast<ldir_t*>(dirFile.readDirCache()); | |||
ldir = reinterpret_cast<DirLfn_t*>(dirFile.readDirCache()); | |||
if (!ldir) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -638,7 +638,7 @@ fail: | |||
bool FatFile::lfnUniqueSfn(fname_t* fname) { | |||
const uint8_t FIRST_HASH_SEQ = 2; // min value is 2 | |||
uint8_t pos = fname->seqPos;; | |||
dir_t *dir; | |||
DirFat_t *dir; | |||
uint16_t hex; | |||
DBG_HALT_IF(!(fname->flags & FNAME_FLAG_LOST_CHARS)); |
@@ -121,7 +121,7 @@ bool FatFile::ls(print_t* pr, uint8_t flags, uint8_t indent) { | |||
} | |||
//------------------------------------------------------------------------------ | |||
size_t FatFile::printAccessDate(print_t* pr) { | |||
dir_t dir; | |||
DirFat_t dir; | |||
if (!dirEntry(&dir)) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -133,7 +133,7 @@ fail: | |||
} | |||
//------------------------------------------------------------------------------ | |||
size_t FatFile::printCreateDateTime(print_t* pr) { | |||
dir_t dir; | |||
DirFat_t dir; | |||
if (!dirEntry(&dir)) { | |||
DBG_FAIL_MACRO; | |||
goto fail; | |||
@@ -145,7 +145,7 @@ fail: | |||
} | |||
//------------------------------------------------------------------------------ | |||
size_t FatFile::printModifyDateTime(print_t* pr) { | |||
dir_t dir; | |||
DirFat_t dir; | |||
if (!dirEntry(&dir)) { | |||
DBG_FAIL_MACRO; | |||
goto fail; |
@@ -58,7 +58,7 @@ union cache_t { | |||
/** Used to access cached FAT32 entries. */ | |||
uint32_t fat32[128]; | |||
/** Used to access cached directory entries. */ | |||
dir_t dir[16]; | |||
DirFat_t dir[16]; | |||
}; | |||
//============================================================================== | |||
/** |
@@ -40,6 +40,8 @@ | |||
*/ | |||
#if HAS_SDIO_CLASS | |||
class SdSpiCard : public SdCardInterface { | |||
#elif USE_BLOCK_DEVICE_INTERFACE | |||
class SdSpiCard : public BlockDeviceInterface { | |||
#else // HAS_SDIO_CLASS | |||
class SdSpiCard { | |||
#endif // HAS_SDIO_CLASS |
@@ -38,6 +38,8 @@ | |||
#define ENABLE_ARDUINO_SERIAL 1 | |||
/** For Debug - must be one */ | |||
#define ENABLE_ARDUINO_STRING 1 | |||
/** Set USE_BLOCK_DEVICE_INTERFACE nonzero to use generic of block device */ | |||
#define USE_BLOCK_DEVICE_INTERFACE 0 | |||
//------------------------------------------------------------------------------ | |||
#if ENABLE_ARDUINO_FEATURES | |||
#include "Arduino.h" |
@@ -25,5 +25,9 @@ | |||
#ifndef BlockDevice_h | |||
#define BlockDevice_h | |||
#include "SdCard/SdCard.h" | |||
#if HAS_SDIO_CLASS || USE_BLOCK_DEVICE_INTERFACE | |||
typedef BlockDeviceInterface BlockDevice; | |||
#else | |||
typedef SdCard BlockDevice; | |||
#endif | |||
#endif // BlockDevice_h |
@@ -22,14 +22,15 @@ | |||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |||
* DEALINGS IN THE SOFTWARE. | |||
*/ | |||
#ifndef BlockDeviceInterface_h | |||
#define BlockDeviceInterface_h | |||
/** | |||
* \file | |||
* \brief BlockDeviceInterface include file. | |||
*/ | |||
#ifndef BlockDeviceInterface_h | |||
#define BlockDeviceInterface_h | |||
#include <stdint.h> | |||
#include <stddef.h> | |||
#include "SdFatConfig.h" | |||
/** | |||
* \class BlockDeviceInterface | |||
* \brief BlockDeviceInterface class. | |||
@@ -45,7 +46,7 @@ class BlockDeviceInterface { | |||
* \return true for success or false for failure. | |||
*/ | |||
virtual bool readSector(uint32_t sector, uint8_t* dst) = 0; | |||
#if USE_MULTI_SECTOR_IO | |||
/** | |||
* Read multiple 512 byte sectors. | |||
* | |||
@@ -55,7 +56,7 @@ class BlockDeviceInterface { | |||
* \return true for success or false for failure. | |||
*/ | |||
virtual bool readSectors(uint32_t sector, uint8_t* dst, size_t ns) = 0; | |||
#endif // USE_MULTI_SECTOR_IO | |||
/** \return device size in sectors. */ | |||
virtual uint32_t sectorCount() = 0; | |||
@@ -72,7 +73,7 @@ class BlockDeviceInterface { | |||
* \return true for success or false for failure. | |||
*/ | |||
virtual bool writeSector(uint32_t sector, const uint8_t* src) = 0; | |||
#if USE_MULTI_SECTOR_IO | |||
/** | |||
* Write multiple 512 byte sectors. | |||
* | |||
@@ -82,5 +83,6 @@ class BlockDeviceInterface { | |||
* \return true for success or false for failure. | |||
*/ | |||
virtual bool writeSectors(uint32_t sector, const uint8_t* src, size_t ns) = 0; | |||
#endif // USE_MULTI_SECTOR_IO | |||
}; | |||
#endif // BlockDeviceInterface_h |
@@ -31,7 +31,7 @@ | |||
#include "Arduino.h" | |||
#ifndef DBG_FILE | |||
#error DBG_FILE not defined | |||
#endif // DBG_FILE | |||
#endif // DBG_FILE | |||
static void dbgPrint(uint16_t line) { | |||
Serial.print(F("DBG_FAIL: ")); | |||
Serial.print(F(DBG_FILE)); |
@@ -236,7 +236,6 @@ typedef struct { | |||
uint8_t firstClusterLow[2]; | |||
uint8_t fileSize[4]; | |||
} DirFat_t; | |||
typedef DirFat_t dir_t; | |||
static inline bool isFileDir(const DirFat_t* dir) { | |||
return (dir->attributes & (FAT_ATTRIB_DIRECTORY | FAT_ATTRIB_LABEL)) == 0; | |||
@@ -269,7 +268,6 @@ typedef struct { | |||
uint8_t mustBeZero2[2]; | |||
uint8_t unicode3[4]; | |||
} DirLfn_t; | |||
typedef DirLfn_t ldir_t; | |||
//============================================================================= | |||
inline uint32_t exFatChecksum(uint32_t sum, uint8_t data) { | |||
return (sum << 31) + (sum >> 1) + data; |