/* 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