| 
							- // 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.
 - 
 - #include "avrlibx/filesystem/filesystem.h"
 - #include "avrlibx/system/time.h"
 - 
 - namespace avrlibx {
 - 
 - /* static */
 - FATFS Filesystem::fs_;
 - 
 - /* static */
 - FilesystemStatus Filesystem::Init() {
 -   f_mount(0, &fs_);
 -   return disk_initialize(0) ? FS_DISK_ERROR : FS_OK;
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Init(uint16_t timeout_ms) {
 -   f_mount(0, &fs_);
 -   for (uint32_t t = milliseconds() + timeout_ms; milliseconds() < t; ) {
 -     if (!disk_initialize(0)) {
 -       return FS_OK;
 -     }
 -   }
 -   return FS_DISK_ERROR;
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Unlink(const char* file_name) {
 -   return static_cast<FilesystemStatus>(f_unlink(file_name));
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Mkdir(const char* dir_name) {
 -   return static_cast<FilesystemStatus>(f_mkdir(dir_name));
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Mkdirs(char* path) {
 -   for (char* p = path + 1; *p; ++p) {
 -     // For each path prefix, attempt to create the path.
 -     if (*p == '/') {
 -       *p = '\0';
 -       FilesystemStatus status = Mkdir(path);
 -       *p = '/';
 -       if (status != FS_OK && status != FS_FILE_EXISTS) {
 -         return status;
 -       }
 -     }
 -   }
 -   return FS_OK;
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Chmod(
 -     const char* file_name,
 -     uint8_t value,
 -     uint8_t mask) {
 -   return static_cast<FilesystemStatus>(f_chmod(file_name, value, mask));
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Rename(
 -     const char* old_name,
 -     const char* new_name) {
 -   return static_cast<FilesystemStatus>(f_rename(old_name, new_name));
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Mkfs() {
 -   return static_cast<FilesystemStatus>(f_mkfs(0, 0, 0));
 - }
 -   
 - /* static */
 - uint32_t Filesystem::GetFreeSpace() {
 -   FATFS* p;
 -   DWORD free_clusters = 0;
 -   f_getfree("/", &free_clusters, &p);
 -   return free_clusters * p->csize * 512;  // 0 if error.
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::FileStatus(const char* file_name, FileInfo* info) {
 -   return static_cast<FilesystemStatus>(f_stat(file_name, &info->file_info));
 - }
 - 
 - /* static */
 - FilesystemStatus Filesystem::Utime(
 -     const char* file_name,
 -     uint16_t date,
 -     uint16_t time) {
 -   FILINFO f;
 -   f.fdate = date;
 -   f.ftime = time;
 -   return static_cast<FilesystemStatus>(f_utime(file_name, &f));
 - }
 - 
 - }  // namespace avrlibx
 
 
  |