| 
							- // Copyright 2011 Olivier Gillet.
 - //
 - // Author: Olivier Gillet (ol.gillet@gmail.com)
 - // 
 - // This program is free software: you can redistribute it and/or modify
 - // it under the terms of the GNU General Public License as published by
 - // the Free Software Foundation, either version 3 of the License, or
 - // (at your option) any later version.
 - // This program is distributed in the hope that it will be useful,
 - // but WITHOUT ANY WARRANTY; without even the implied warranty of
 - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - // GNU General Public License for more details.
 - // You should have received a copy of the GNU General Public License
 - // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 - //
 - // -----------------------------------------------------------------------------
 - //
 - // FatFS wrappers.
 - 
 - #ifndef AVRLIBX_FILESYSTEM_FILE_SYSTEM_H_
 - #define AVRLIBX_FILESYSTEM_FILE_SYSTEM_H_
 - 
 - #include <string.h>
 - 
 - #include "avrlibx/avrlibx.h"
 - 
 - #include "avrlibx/third_party/ff/ff.h"
 - #include "avrlibx/third_party/ff/mmc.h"
 - 
 - namespace avrlibx {
 - 
 - enum FilesystemStatus {
 -   FS_OK = 0,
 -   FS_DISK_ERROR,
 -   FS_EXCEPTION,
 -   FS_DRIVE_NOT_READY,
 -   FS_FILE_NOT_FOUND,
 -   FS_PATH_NOT_FOUND,
 -   FS_INVALID_NAME,
 -   FS_ACCESS_DENIED,
 -   FS_FILE_EXISTS,
 -   FS_INVALID_OBJECT,
 -   FS_WRITE_PROTECTED,
 -   FS_INVALID_DRIVE,
 -   FS_VOLUME_NOT_INITIALIZED,
 -   FS_NO_FAT_VOLUME,
 -   FS_FORMAT_FAILED,
 -   FS_TIMEOUT,
 -   FS_LOCKED,
 -   FS_NOT_ENOUGH_MEMORY,
 -   FS_TOO_MANY_FILES,
 -   FS_INVALID_PARAMETER,
 -   FS_NOT_OPENED,
 -   FS_BAD_FILE_FORMAT,
 -   FS_COPY_ERROR
 - };
 - 
 - enum FileAttribute {
 -   FS_ATTRIBUTE_READ_ONLY = 1,
 -   FS_ATTRIBUTE_HIDDEN = 2,
 -   FS_ATTRIBUTE_SYSTEM = 4,
 -   FS_ATTRIBUTE_VOLUME = 8,
 -   FS_ATTRIBUTE_LFN = 15,
 -   FS_ATTRIBUTE_DIRECTORY = 16,
 -   FS_ATTRIBUTE_ARCHIVE = 32,
 -   FS_ATTRIBUTE_ATTRIBUTES = 0x3f,
 - };
 - 
 - struct FileInfo {
 -   inline uint32_t size() const {
 -     return file_info.fsize;
 -   }
 -   
 -   inline uint16_t modification_date() const {
 -     return file_info.fdate;
 -   }
 -   
 -   inline uint16_t modification_time() const {
 -     return file_info.ftime;
 -   }
 - 
 -   inline uint8_t attributes() const {
 -     return file_info.fattrib;
 -   }
 -   
 -   inline uint8_t is_read_only() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_READ_ONLY;
 -   }
 - 
 -   inline uint8_t is_hidden() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_HIDDEN;
 -   }
 - 
 -   inline uint8_t is_system() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_SYSTEM;
 -   }
 - 
 -   inline uint8_t is_volume() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_VOLUME;
 -   }
 - 
 -   inline uint8_t is_directory() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_DIRECTORY;
 -   }
 - 
 -   inline uint8_t is_archive() const {
 -     return file_info.fattrib & FS_ATTRIBUTE_ARCHIVE;
 -   }
 -   
 -   inline const char* name() const {
 -     return file_info.fname;
 -   }
 -   
 -   FILINFO file_info;
 - };
 - 
 - class Filesystem {
 -  public:
 -   Filesystem() { }
 -   
 -   static FilesystemStatus Init();
 -   static FilesystemStatus Init(uint16_t timeout_ms);
 -   
 -   static FilesystemStatus Unlink(const char* file_name);
 -   static FilesystemStatus Mkdir(const char* dir_name);
 -   static FilesystemStatus Mkdirs(char* path);
 -   static FilesystemStatus Chmod(
 -       const char* file_name,
 -       uint8_t value,
 -       uint8_t mask);
 -   static FilesystemStatus Rename(const char* old_name, const char* new_name);
 -   static FilesystemStatus FileStatus(const char* file_name, FileInfo* info);
 -   static FilesystemStatus Utime(
 -       const char* file_name,
 -       uint16_t date,
 -       uint16_t time);
 -   
 -   static FilesystemStatus Mkfs();
 -   
 -   static uint32_t GetFreeSpace();
 -   static uint16_t GetType() {
 -     uint8_t card_type;
 -     disk_ioctl(0, MMC_GET_TYPE, &card_type);
 -     return fs_.fs_type | (card_type << 8);
 -   }
 -   
 -   static inline void Tick() {
 -     disk_timerproc();
 -   }
 -   
 -   static uint8_t* buffer() { return fs_.win; }
 -   
 -  private:
 -   static FATFS fs_;
 -   
 -   DISALLOW_COPY_AND_ASSIGN(Filesystem);
 - };
 - 
 - }  // namespace avrlibx
 - 
 - #endif   // AVRLIBX_FILESYSTEM_FILE_SYSTEM_H_
 
 
  |