You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.2 KiB
82 lines
2.2 KiB
/* |
|
|
|
intermediate layer for FatFs |
|
|
|
*/ |
|
#ifndef SdFatFs_h |
|
#define SdFatFs_h |
|
|
|
#include "Sd2Card.h" |
|
#include "stdio.h" |
|
|
|
#if defined(BOARD_SDCARD_CS_PIN) || defined(BOARD_DATAFLASH_FATFS) |
|
|
|
/* FatFs includes component */ |
|
#include "FatFs/drivers/sd.h" |
|
#include "FatFs/ff.h" |
|
|
|
|
|
// To match Arduino definition |
|
#define FILE_WRITE FA_WRITE |
|
#define FILE_READ FA_READ |
|
|
|
/** year part of FAT directory date field */ |
|
static inline uint16_t FAT_YEAR(uint16_t fatDate) { |
|
return 1980 + (fatDate >> 9); |
|
} |
|
/** month part of FAT directory date field */ |
|
static inline uint8_t FAT_MONTH(uint16_t fatDate) { |
|
return (fatDate >> 5) & 0XF; |
|
} |
|
/** day part of FAT directory date field */ |
|
static inline uint8_t FAT_DAY(uint16_t fatDate) { |
|
return fatDate & 0X1F; |
|
} |
|
|
|
/** hour part of FAT directory time field */ |
|
static inline uint8_t FAT_HOUR(uint16_t fatTime) { |
|
return fatTime >> 11; |
|
} |
|
/** minute part of FAT directory time field */ |
|
static inline uint8_t FAT_MINUTE(uint16_t fatTime) { |
|
return(fatTime >> 5) & 0X3F; |
|
} |
|
/** second part of FAT directory time field */ |
|
static inline uint8_t FAT_SECOND(uint16_t fatTime) { |
|
return 2*(fatTime & 0X1F); |
|
} |
|
|
|
class SdFatFs { |
|
public: |
|
|
|
SdFatFs(){} |
|
|
|
FRESULT init(Sd2Card *card); |
|
|
|
/** Return the FatFs type: 12, 16, 32 (0: unknown)*/ |
|
uint8_t fatType(void); |
|
|
|
// inline functions that return volume info |
|
/** \return The volume's cluster size in blocks. */ |
|
uint8_t blocksPerCluster(void) const {return _SDFatFs.csize ? _SDFatFs.csize : blockSize();} |
|
/** \return The total number of clusters in the volume. */ |
|
inline uint32_t clusterCount(void) const {return _SDFatFs.n_fatent? _SDFatFs.n_fatent -2:0;} |
|
|
|
// returns raw volume size |
|
inline uint32_t sectorCount(void) const { return _card->sectorCount(); } |
|
inline uint32_t sectorSize(void) const { return _card->sectorSize(); } |
|
inline uint32_t blockSize(void) const { return _card->blockSize(); } |
|
|
|
inline char* getRoot(void) { return _SDPath; }; |
|
FRESULT format(const char *filepath, Sd2Card *card); |
|
|
|
static const char *strError(FRESULT err); |
|
|
|
private: |
|
FATFS _SDFatFs; /* File system object for SD disk logical drive */ |
|
char _SDPath[4]; /* SD disk logical drive path */ |
|
Sd2Card *_card; |
|
}; |
|
#endif |
|
#endif // sdFatFs_h |
|
|
|
|