Norimasa Okamoto / F32RFileSystem

Fork of F12RFileSystem by Norimasa Okamoto

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers F32RFileSystem.h Source File

F32RFileSystem.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2016 ARM Limited
00003  *
00004  * Permission is hereby granted, free of charge, to any person obtaining a copy
00005  * of this software and associated documentation files (the "Software"), to deal
00006  * in the Software without restriction, including without limitation the rights
00007  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00008  * copies of the Software, and to permit persons to whom the Software is
00009  * furnished to do so, subject to the following conditions:
00010  *
00011  * The above copyright notice and this permission notice shall be included in
00012  * all copies or substantial portions of the Software.
00013  *
00014  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00015  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00017  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00018  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00019  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
00020  * SOFTWARE.
00021  */
00022 #ifndef MBED_F32R_FILESYSTEM_H
00023 #define MBED_F32R_FILESYSTEM_H
00024 
00025 #include "FileSystemLike.h"
00026 #include "FileHandle.h"
00027 #include <stdint.h>
00028 #include "StorageInterface.h"
00029 
00030 typedef uint32_t sector_t;
00031 typedef uint32_t cluster_t;
00032 typedef uint32_t filesize_t;
00033 
00034 using namespace mbed;
00035 
00036 /**
00037  * F32RFileSystem
00038  */
00039 class F32RFileSystem : public FileSystemLike {
00040 public:
00041     F32RFileSystem(StorageInterface* storage_, const char* n);
00042     virtual ~F32RFileSystem();
00043 
00044     /**
00045      * Opens a file on the filesystem
00046      */
00047     virtual FileHandle *open(const char* name, int flags);
00048     
00049     /**
00050      * Removes a file path
00051      */
00052     virtual int remove(const char *filename);
00053     
00054     /**
00055      * Renames a file
00056      */
00057     virtual int rename(const char *oldname, const char *newname);
00058     
00059     /**
00060      * Formats a logical drive, FDISK artitioning rule, 512 bytes per cluster
00061      */
00062     virtual int format();
00063     
00064     /**
00065      * Opens a directory on the filesystem
00066      */
00067     virtual DirHandle *opendir(const char *name);
00068     
00069     /**
00070      * Creates a directory path
00071      */
00072     virtual int mkdir(const char *name, mode_t mode);
00073     
00074     /**
00075      * Mounts the filesystem
00076      */
00077     virtual int mount();
00078     
00079     /**
00080      * Unmounts the filesystem
00081      */
00082     virtual int unmount();
00083 
00084 private:
00085     friend class F32RFileHandle;
00086     friend class F32RDirHandle;
00087     uint32_t storage_peek(uint32_t offset, int n);
00088     cluster_t fat_read(cluster_t index);
00089     int fat32_count(cluster_t cluster); // fat32
00090     StorageInterface* storage;
00091     uint32_t base_fat;
00092     uint64_t base_data;
00093     uint32_t cluster_size;
00094     uint32_t cluster_head(uint32_t pos) const { return pos % cluster_size; }
00095     uint32_t cluster_tail(uint32_t pos) const { return cluster_size - cluster_head(pos); }
00096     union {
00097         cluster_t root_directory_first_cluster;
00098         uint32_t base_dir; // fat12/fat16
00099     };
00100     filesize_t root_directory_size;
00101     int fs_type;
00102     bool is_fat12() const { return fs_type == 0x01; }
00103     bool is_fat16() const { return fs_type == 0x04 || fs_type == 0x06 || fs_type == 0x0e; }
00104     bool is_fat32() const { return fs_type == 0x0b || fs_type == 0x0c; }
00105     bool mounted;
00106 };
00107 
00108 #endif // MBED_F32R_FILESYSTEM_H