Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: nRF51_Vdd TextLCD BME280
FATFileSystem.h
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2012 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_FATFILESYSTEM_H 00023 #define MBED_FATFILESYSTEM_H 00024 00025 #include "FileSystem.h" 00026 #include "BlockDevice.h" 00027 #include "FileHandle.h" 00028 #include "ff.h" 00029 #include <stdint.h> 00030 #include "PlatformMutex.h" 00031 00032 00033 /** 00034 * FATFileSystem based on ChaN's Fat Filesystem library v0.8 00035 * 00036 * Synchronization level: Thread safe 00037 */ 00038 class FATFileSystem : public mbed::FileSystem { 00039 public: 00040 /** Lifetime of the FATFileSystem 00041 * 00042 * @param name Name to add filesystem to tree as 00043 * @param bd BlockDevice to mount, may be passed instead to mount call 00044 */ 00045 FATFileSystem(const char *name = NULL, BlockDevice *bd = NULL); 00046 virtual ~FATFileSystem(); 00047 00048 /** Formats a logical drive, FDISK partitioning rule. 00049 * 00050 * The block device to format should be mounted when this function is called. 00051 * 00052 * @param bd 00053 * This is the block device that will be formatted. 00054 * 00055 * @param cluster_size 00056 * This is the number of bytes per cluster. A larger cluster size will decrease 00057 * the overhead of the FAT table, but also increase the minimum file size. The 00058 * cluster_size must be a multiple of the underlying device's allocation unit 00059 * and is currently limited to a max of 32,768 bytes. If zero, a cluster size 00060 * will be determined from the device's allocation unit. Defaults to zero. 00061 * 00062 * @return 0 on success, negative error code on failure 00063 */ 00064 static int format(BlockDevice *bd, bd_size_t cluster_size = 0); 00065 00066 /** Mounts a filesystem to a block device 00067 * 00068 * @param bd BlockDevice to mount to 00069 * @return 0 on success, negative error code on failure 00070 */ 00071 virtual int mount(BlockDevice *bd); 00072 00073 /** Unmounts a filesystem from the underlying block device 00074 * 00075 * @return 0 on success, negative error code on failure 00076 */ 00077 virtual int unmount(); 00078 00079 /** Reformats a filesystem, results in an empty and mounted filesystem 00080 * 00081 * @param bd 00082 * BlockDevice to reformat and mount. If NULL, the mounted 00083 * block device will be used. 00084 * Note: if mount fails, bd must be provided. 00085 * Default: NULL 00086 * 00087 * @param allocation_unit 00088 * This is the number of bytes per cluster size. The valid value is N 00089 * times the sector size. N is a power of 2 from 1 to 128 for FAT 00090 * volume and upto 16MiB for exFAT volume. If zero is given, 00091 * the default allocation unit size is selected by the underlying 00092 * filesystem, which depends on the volume size. 00093 * 00094 * @return 0 on success, negative error code on failure 00095 */ 00096 virtual int reformat(BlockDevice *bd, int allocation_unit); 00097 00098 /** Reformats a filesystem, results in an empty and mounted filesystem 00099 * 00100 * @param bd BlockDevice to reformat and mount. If NULL, the mounted 00101 * block device will be used. 00102 * Note: if mount fails, bd must be provided. 00103 * Default: NULL 00104 * @return 0 on success, negative error code on failure 00105 */ 00106 virtual int reformat(BlockDevice *bd = NULL) 00107 { 00108 // required for virtual inheritance shenanigans 00109 return reformat(bd, 0); 00110 } 00111 00112 /** Remove a file from the filesystem. 00113 * 00114 * @param path The name of the file to remove. 00115 * @return 0 on success, negative error code on failure 00116 */ 00117 virtual int remove(const char *path); 00118 00119 /** Rename a file in the filesystem. 00120 * 00121 * @param path The name of the file to rename. 00122 * @param newpath The name to rename it to 00123 * @return 0 on success, negative error code on failure 00124 */ 00125 virtual int rename(const char *path, const char *newpath); 00126 00127 /** Store information about the file in a stat structure 00128 * 00129 * @param path The name of the file to find information about 00130 * @param st The stat buffer to write to 00131 * @return 0 on success, negative error code on failure 00132 */ 00133 virtual int stat(const char *path, struct stat *st); 00134 00135 /** Create a directory in the filesystem. 00136 * 00137 * @param path The name of the directory to create. 00138 * @param mode The permissions with which to create the directory 00139 * @return 0 on success, negative error code on failure 00140 */ 00141 virtual int mkdir(const char *path, mode_t mode); 00142 00143 /** Store information about the mounted filesystem in a statvfs structure 00144 * 00145 * @param path The name of the file to find information about 00146 * @param buf The stat buffer to write to 00147 * @return 0 on success, negative error code on failure 00148 */ 00149 virtual int statvfs(const char *path, struct statvfs *buf); 00150 00151 protected: 00152 /** Open a file on the filesystem 00153 * 00154 * @param file Destination for the handle to a newly created file 00155 * @param path The name of the file to open 00156 * @param flags The flags to open the file in, one of O_RDONLY, O_WRONLY, O_RDWR, 00157 * bitwise or'd with one of O_CREAT, O_TRUNC, O_APPEND 00158 * @return 0 on success, negative error code on failure 00159 */ 00160 virtual int file_open(mbed::fs_file_t *file, const char *path, int flags); 00161 00162 /** Close a file 00163 * 00164 * @param file File handle 00165 * @return 0 on success, negative error code on failure 00166 */ 00167 virtual int file_close(mbed::fs_file_t file); 00168 00169 /** Read the contents of a file into a buffer 00170 * 00171 * @param file File handle 00172 * @param buffer The buffer to read in to 00173 * @param len The number of bytes to read 00174 * @return The number of bytes read, 0 at end of file, negative error on failure 00175 */ 00176 virtual ssize_t file_read(mbed::fs_file_t file, void *buffer, size_t len); 00177 00178 /** Write the contents of a buffer to a file 00179 * 00180 * @param file File handle 00181 * @param buffer The buffer to write from 00182 * @param len The number of bytes to write 00183 * @return The number of bytes written, negative error on failure 00184 */ 00185 virtual ssize_t file_write(mbed::fs_file_t file, const void *buffer, size_t len); 00186 00187 /** Flush any buffers associated with the file 00188 * 00189 * @param file File handle 00190 * @return 0 on success, negative error code on failure 00191 */ 00192 virtual int file_sync(mbed::fs_file_t file); 00193 00194 /** Move the file position to a given offset from from a given location 00195 * 00196 * @param file File handle 00197 * @param offset The offset from whence to move to 00198 * @param whence The start of where to seek 00199 * SEEK_SET to start from beginning of file, 00200 * SEEK_CUR to start from current position in file, 00201 * SEEK_END to start from end of file 00202 * @return The new offset of the file 00203 */ 00204 virtual off_t file_seek(mbed::fs_file_t file, off_t offset, int whence); 00205 00206 /** Get the file position of the file 00207 * 00208 * @param file File handle 00209 * @return The current offset in the file 00210 */ 00211 virtual off_t file_tell(mbed::fs_file_t file); 00212 00213 /** Get the size of the file 00214 * 00215 * @param file File handle 00216 * @return Size of the file in bytes 00217 */ 00218 virtual off_t file_size(mbed::fs_file_t file); 00219 00220 /** Open a directory on the filesystem 00221 * 00222 * @param dir Destination for the handle to the directory 00223 * @param path Name of the directory to open 00224 * @return 0 on success, negative error code on failure 00225 */ 00226 virtual int dir_open(mbed::fs_dir_t *dir, const char *path); 00227 00228 /** Close a directory 00229 * 00230 * @param dir Dir handle 00231 * @return 0 on success, negative error code on failure 00232 */ 00233 virtual int dir_close(mbed::fs_dir_t dir); 00234 00235 /** Read the next directory entry 00236 * 00237 * @param dir Dir handle 00238 * @param ent The directory entry to fill out 00239 * @return 1 on reading a filename, 0 at end of directory, negative error on failure 00240 */ 00241 virtual ssize_t dir_read(mbed::fs_dir_t dir, struct dirent *ent); 00242 00243 /** Set the current position of the directory 00244 * 00245 * @param dir Dir handle 00246 * @param offset Offset of the location to seek to, 00247 * must be a value returned from dir_tell 00248 */ 00249 virtual void dir_seek(mbed::fs_dir_t dir, off_t offset); 00250 00251 /** Get the current position of the directory 00252 * 00253 * @param dir Dir handle 00254 * @return Position of the directory that can be passed to dir_rewind 00255 */ 00256 virtual off_t dir_tell(mbed::fs_dir_t dir); 00257 00258 /** Rewind the current position to the beginning of the directory 00259 * 00260 * @param dir Dir handle 00261 */ 00262 virtual void dir_rewind(mbed::fs_dir_t dir); 00263 00264 private: 00265 FATFS _fs; // Work area (file system object) for logical drive 00266 char _fsid[sizeof("0:")]; 00267 int _id; 00268 00269 protected: 00270 virtual void lock(); 00271 virtual void unlock(); 00272 virtual int mount(BlockDevice *bd, bool mount); 00273 }; 00274 00275 #endif
Generated on Tue Jul 12 2022 15:15:44 by
