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.
Fork of Smoothie by
ff.h
00001 /*---------------------------------------------------------------------------/ 00002 / FatFs - FAT file system module include file R0.08b (C)ChaN, 2011 00003 /----------------------------------------------------------------------------/ 00004 / FatFs module is a generic FAT file system module for small embedded systems. 00005 / This is a free software that opened for education, research and commercial 00006 / developments under license policy of following trems. 00007 / 00008 / Copyright (C) 2011, ChaN, all right reserved. 00009 / 00010 / * The FatFs module is a free software and there is NO WARRANTY. 00011 / * No restriction on use. You can use, modify and redistribute it for 00012 / personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. 00013 / * Redistributions of source code must retain the above copyright notice. 00014 / 00015 /----------------------------------------------------------------------------*/ 00016 00017 #ifndef _FATFS 00018 #define _FATFS 8237 /* Revision ID */ 00019 00020 #ifdef __cplusplus 00021 extern "C" { 00022 #endif 00023 00024 #include "integer.h" /* Basic integer types */ 00025 #include "ffconf.h" /* FatFs configuration options */ 00026 00027 #if _FATFS != _FFCONF 00028 #error Wrong configuration file (ffconf.h). 00029 #endif 00030 00031 00032 00033 #define _DRIVES 4 00034 /* Number of logical drives to be used. This affects the size of internal table. */ 00035 /* Definitions of volume management */ 00036 00037 #if _MULTI_PARTITION /* Multiple partition configuration */ 00038 #define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive# */ 00039 #define LD2PT(vol) (VolToPart[vol].pt) /* Get partition# */ 00040 typedef struct { 00041 BYTE pd; /* Physical drive# */ 00042 BYTE pt; /* Partition # (0-3) */ 00043 } PARTITION; 00044 extern const PARTITION VolToPart[]; /* Volume - Physical location resolution table */ 00045 00046 #else /* Single partition configuration */ 00047 #define LD2PD(vol) (vol) /* Logical drive# is bound to the same physical drive# */ 00048 #define LD2PT(vol) 0 /* Always mounts the 1st partition */ 00049 00050 #endif 00051 00052 00053 00054 /* Type of path name strings on FatFs API */ 00055 00056 #if _LFN_UNICODE /* Unicode string */ 00057 #if !_USE_LFN 00058 #error _LFN_UNICODE must be 0 in non-LFN cfg. 00059 #endif 00060 #ifndef _INC_TCHAR 00061 typedef WCHAR TCHAR; 00062 #define _T(x) L ## x 00063 #define _TEXT(x) L ## x 00064 #endif 00065 00066 #else /* ANSI/OEM string */ 00067 #ifndef _INC_TCHAR 00068 typedef char TCHAR; 00069 #define _T(x) x 00070 #define _TEXT(x) x 00071 #endif 00072 00073 #endif 00074 00075 00076 00077 /* File system object structure (FATFS) */ 00078 00079 typedef struct { 00080 BYTE fs_type; /* FAT sub-type (0:Not mounted) */ 00081 BYTE drv; /* Physical drive number */ 00082 BYTE csize; /* Sectors per cluster (1,2,4...128) */ 00083 BYTE n_fats; /* Number of FAT copies (1,2) */ 00084 BYTE wflag; /* win[] dirty flag (1:must be written back) */ 00085 BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ 00086 WORD id; /* File system mount ID */ 00087 WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ 00088 #if _MAX_SS != 512 00089 WORD ssize; /* Bytes per sector (512,1024,2048,4096) */ 00090 #endif 00091 #if _FS_REENTRANT 00092 _SYNC_t sobj; /* Identifier of sync object */ 00093 #endif 00094 #if !_FS_READONLY 00095 DWORD last_clust; /* Last allocated cluster */ 00096 DWORD free_clust; /* Number of free clusters */ 00097 DWORD fsi_sector; /* fsinfo sector (FAT32) */ 00098 #endif 00099 #if _FS_RPATH 00100 DWORD cdir; /* Current directory start cluster (0:root) */ 00101 #endif 00102 DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */ 00103 DWORD fsize; /* Sectors per FAT */ 00104 DWORD fatbase; /* FAT start sector */ 00105 DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */ 00106 DWORD database; /* Data start sector */ 00107 DWORD winsect; /* Current sector appearing in the win[] */ 00108 BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */ 00109 } FATFS; 00110 00111 00112 00113 /* File object structure (FIL) */ 00114 00115 typedef struct { 00116 FATFS* fs; /* Pointer to the owner file system object */ 00117 WORD id; /* Owner file system mount ID */ 00118 BYTE flag; /* File status flags */ 00119 BYTE pad1; 00120 DWORD fptr; /* File read/write pointer (0 on file open) */ 00121 DWORD fsize; /* File size */ 00122 DWORD sclust; /* File start cluster (0 when fsize==0) */ 00123 DWORD clust; /* Current cluster */ 00124 DWORD dsect; /* Current data sector */ 00125 #if !_FS_READONLY 00126 DWORD dir_sect; /* Sector containing the directory entry */ 00127 BYTE* dir_ptr; /* Ponter to the directory entry in the window */ 00128 #endif 00129 #if _USE_FASTSEEK 00130 DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */ 00131 #endif 00132 #if _FS_SHARE 00133 UINT lockid; /* File lock ID (index of file semaphore table) */ 00134 #endif 00135 #if !_FS_TINY 00136 BYTE buf[_MAX_SS]; /* File data read/write buffer */ 00137 #endif 00138 } FIL_t; 00139 00140 00141 00142 /* Directory object structure (DIR) */ 00143 00144 typedef struct { 00145 FATFS* fs; /* Pointer to the owner file system object */ 00146 WORD id; /* Owner file system mount ID */ 00147 WORD index; /* Current read/write index number */ 00148 DWORD sclust; /* Table start cluster (0:Root dir) */ 00149 DWORD clust; /* Current cluster */ 00150 DWORD sect; /* Current sector */ 00151 BYTE* dir; /* Pointer to the current SFN entry in the win[] */ 00152 BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ 00153 #if _USE_LFN 00154 WCHAR* lfn; /* Pointer to the LFN working buffer */ 00155 WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ 00156 #endif 00157 } DIR_t; 00158 00159 00160 00161 /* File status structure (FILINFO) */ 00162 00163 typedef struct { 00164 DWORD fsize; /* File size */ 00165 WORD fdate; /* Last modified date */ 00166 WORD ftime; /* Last modified time */ 00167 BYTE fattrib; /* Attribute */ 00168 TCHAR fname[13]; /* Short file name (8.3 format) */ 00169 #if _USE_LFN 00170 TCHAR* lfname; /* Pointer to the LFN buffer */ 00171 UINT lfsize; /* Size of LFN buffer in TCHAR */ 00172 #endif 00173 } FILINFO; 00174 00175 00176 00177 /* File function return code (FRESULT) */ 00178 00179 typedef enum { 00180 FR_OK = 0, /* (0) Succeeded */ 00181 FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */ 00182 FR_INT_ERR, /* (2) Assertion failed */ 00183 FR_NOT_READY, /* (3) The physical drive cannot work */ 00184 FR_NO_FILE, /* (4) Could not find the file */ 00185 FR_NO_PATH, /* (5) Could not find the path */ 00186 FR_INVALID_NAME, /* (6) The path name format is invalid */ 00187 FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */ 00188 FR_EXIST, /* (8) Acces denied due to prohibited access */ 00189 FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ 00190 FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ 00191 FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ 00192 FR_NOT_ENABLED, /* (12) The volume has no work area */ 00193 FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */ 00194 FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ 00195 FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ 00196 FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */ 00197 FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ 00198 FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */ 00199 } FRESULT; 00200 00201 00202 00203 /*--------------------------------------------------------------*/ 00204 /* FatFs module application interface */ 00205 00206 FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ 00207 FRESULT f_open (FIL_t*, const TCHAR*, BYTE); /* Open or create a file */ 00208 FRESULT f_read (FIL_t*, void*, UINT, UINT*); /* Read data from a file */ 00209 FRESULT f_lseek (FIL_t*, DWORD); /* Move file pointer of a file object */ 00210 FRESULT f_close (FIL_t*); /* Close an open file object */ 00211 FRESULT f_opendir (DIR_t*, const TCHAR*); /* Open an existing directory */ 00212 FRESULT f_readdir (DIR_t*, FILINFO*); /* Read a directory item */ 00213 FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */ 00214 FRESULT f_write (FIL_t*, const void*, UINT, UINT*); /* Write data to a file */ 00215 FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ 00216 FRESULT f_truncate (FIL_t*); /* Truncate file */ 00217 FRESULT f_sync (FIL_t*); /* Flush cached data of a writing file */ 00218 FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */ 00219 FRESULT f_mkdir (const TCHAR*); /* Create a new directory */ 00220 FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ 00221 FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ 00222 FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */ 00223 FRESULT f_forward (FIL_t*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ 00224 FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */ 00225 FRESULT f_chdrive (BYTE); /* Change current drive */ 00226 FRESULT f_chdir (const TCHAR*); /* Change current directory */ 00227 FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */ 00228 int f_putc (TCHAR, FIL_t*); /* Put a character to the file */ 00229 int f_puts (const TCHAR*, FIL_t*); /* Put a string to the file */ 00230 int f_printf (FIL_t*, const TCHAR*, ...); /* Put a formatted string to the file */ 00231 TCHAR* f_gets (TCHAR*, int, FIL_t*); /* Get a string from the file */ 00232 00233 #ifndef EOF 00234 #define EOF (-1) 00235 #endif 00236 00237 #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) 00238 #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) 00239 #define f_tell(fp) ((fp)->fptr) 00240 #define f_size(fp) ((fp)->fsize) 00241 00242 00243 00244 00245 /*--------------------------------------------------------------*/ 00246 /* Additional user defined functions */ 00247 00248 /* RTC function */ 00249 #if !_FS_READONLY 00250 DWORD get_fattime (void); 00251 #endif 00252 00253 /* Unicode support functions */ 00254 #if _USE_LFN /* Unicode - OEM code conversion */ 00255 WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */ 00256 WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */ 00257 #if _USE_LFN == 3 /* Memory functions */ 00258 void* ff_memalloc (UINT); /* Allocate memory block */ 00259 void ff_memfree (void*); /* Free memory block */ 00260 #endif 00261 #endif 00262 00263 /* Sync functions */ 00264 #if _FS_REENTRANT 00265 int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */ 00266 int ff_req_grant (_SYNC_t); /* Lock sync object */ 00267 void ff_rel_grant (_SYNC_t); /* Unlock sync object */ 00268 int ff_del_syncobj (_SYNC_t); /* Delete a sync object */ 00269 #endif 00270 00271 00272 00273 00274 /*--------------------------------------------------------------*/ 00275 /* Flags and offset address */ 00276 00277 00278 /* File access control and file status flags (FIL.flag) */ 00279 00280 #define FA_READ 0x01 00281 #define FA_OPEN_EXISTING 0x00 00282 #define FA__ERROR 0x80 00283 00284 #if !_FS_READONLY 00285 #define FA_WRITE 0x02 00286 #define FA_CREATE_NEW 0x04 00287 #define FA_CREATE_ALWAYS 0x08 00288 #define FA_OPEN_ALWAYS 0x10 00289 #define FA__WRITTEN 0x20 00290 #define FA__DIRTY 0x40 00291 #endif 00292 00293 00294 /* FAT sub type (FATFS.fs_type) */ 00295 00296 #define FS_FAT12 1 00297 #define FS_FAT16 2 00298 #define FS_FAT32 3 00299 00300 00301 /* File attribute bits for directory entry */ 00302 00303 #define AM_RDO 0x01 /* Read only */ 00304 #define AM_HID 0x02 /* Hidden */ 00305 #define AM_SYS 0x04 /* System */ 00306 #define AM_VOL 0x08 /* Volume label */ 00307 #define AM_LFN 0x0F /* LFN entry */ 00308 #define AM_DIR 0x10 /* Directory */ 00309 #define AM_ARC 0x20 /* Archive */ 00310 #define AM_MASK 0x3F /* Mask of defined bits */ 00311 00312 00313 /* Fast seek function */ 00314 #define CREATE_LINKMAP 0xFFFFFFFF 00315 00316 00317 00318 /*--------------------------------*/ 00319 /* Multi-byte word access macros */ 00320 00321 #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ 00322 #define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) 00323 #define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) 00324 #define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) 00325 #define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) 00326 #else /* Use byte-by-byte access to the FAT structure */ 00327 #define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 00328 #define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr)) 00329 #define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8) 00330 #define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24) 00331 #endif 00332 00333 #ifdef __cplusplus 00334 } 00335 #endif 00336 00337 #endif /* _FATFS */
Generated on Tue Jul 12 2022 20:09:01 by
1.7.2
