37 #define FATFS_R(major, minor, patch) ((major << 16) | (minor << 8) | (0x ## patch))
41 #define FATFS_REVISON FATFS_R(0, 7, c)
43 #define FATFS_REVISON FATFS_R(0, 7, e)
44 #elif (_FATFS == 8085)
45 #define FATFS_REVISON FATFS_R(0, 8, 0)
46 #elif (_FATFS == 8255)
47 #define FATFS_REVISON FATFS_R(0, 8, a)
48 #elif (_FATFS == 8237)
49 #define FATFS_REVISON FATFS_R(0, 8, b)
50 #elif (_FATFS == 6502)
51 #define FATFS_REVISON FATFS_R(0, 9, 0)
52 #elif (_FATFS == 4004)
53 #define FATFS_REVISON FATFS_R(0, 9, a)
54 #elif (_FATFS == 82786)
55 #define FATFS_REVISON FATFS_R(0, 9, b)
56 #elif (_FATFS == 80960)
57 #define FATFS_REVISON FATFS_R(0, 10, 0)
58 #elif (_FATFS == 29000)
59 #define FATFS_REVISON FATFS_R(0, 10, a)
60 #elif (_FATFS == 8051)
61 #define FATFS_REVISON FATFS_R(0, 10, b)
62 #elif (_FATFS == 80376)
63 #define FATFS_REVISON FATFS_R(0, 10, c)
64 #elif (_FATFS == 32020)
65 #define FATFS_REVISON FATFS_R(0, 11, 0)
66 #elif (_FATFS == 64180)
67 #define FATFS_REVISON FATFS_R(0, 11, a)
68 #elif (_FATFS == 88100)
69 #define FATFS_REVISON FATFS_R(0, 12, 0)
70 #elif (_FATFS == 80186)
71 #define FATFS_REVISON FATFS_R(0, 12, a)
72 #elif (_FATFS == 68020)
73 #define FATFS_REVISON FATFS_R(0, 12, b)
74 #elif (_FATFS == 68300)
75 #define FATFS_REVISON FATFS_R(0, 12, c)
76 #elif (FF_DEFINED == 87030)
77 #define FATFS_REVISON FATFS_R(0, 13, 0)
78 #elif (FF_DEFINED == 89352)
79 #define FATFS_REVISON FATFS_R(0, 13, a)
80 #elif (FF_DEFINED == 63463)
81 #define FATFS_REVISON FATFS_R(0, 13, b)
82 #elif (FF_DEFINED == 86604)
83 #define FATFS_REVISON FATFS_R(0, 13, c)
84 #elif (FF_DEFINED == 86606)
85 #define FATFS_REVISON FATFS_R(0, 14, 0)
86 #elif (FF_DEFINED == 80196)
87 #define FATFS_REVISON FATFS_R(0, 14, a)
88 #elif (FF_DEFINED == 86631)
89 #define FATFS_REVISON FATFS_R(0, 14, b)
90 #elif (FF_DEFINED == 80286)
91 #define FATFS_REVISON FATFS_R(0, 15, 0)
93 #define FATFS_REVISON FATFS_R(0, 0, 0)
115 osMemset(fileTable, 0,
sizeof(fileTable));
116 osMemset(dirTable, 0,
sizeof(dirTable));
126 #if (FATFS_REVISON <= FATFS_R(0, 9, b))
127 res = f_mount(0, &fs);
129 res = f_mount(&fs,
"", 1);
157 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
166 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
167 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
173 res = f_stat(path, &fno);
175 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
176 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
186 if(fno.fattrib & AM_DIR)
205 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
211 if(path == NULL || size == NULL)
214 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
215 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
221 res = f_stat(path, &fno);
223 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
224 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
234 if(fno.fattrib & AM_DIR)
257 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
263 if(path == NULL || fileStat == NULL)
266 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
267 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
273 res = f_stat(path, &fno);
275 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
276 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
291 fileStat->
size = fno.fsize;
294 fileStat->
modified.
year = 1980 + ((fno.fdate >> 9) & 0x7F);
323 #if (_FS_READONLY == 1 || FF_FS_READONLY ==1)
330 if(oldPath == NULL || newPath == NULL)
333 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
334 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
340 res = f_rename(oldPath, newPath);
342 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
343 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
366 #if (_FS_READONLY == 1 || FF_FS_READONLY ==1)
376 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
377 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
383 res = f_unlink(path);
385 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
386 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
429 #if (FATFS_REVISON <= FATFS_R(0, 11, a))
430 if(fileTable[i].fs == NULL)
432 if(fileTable[i].obj.fs == NULL)
446 flags |= FA_OPEN_ALWAYS;
449 flags |= FA_CREATE_ALWAYS;
452 res = f_open(&fileTable[i], path,
flags);
456 file = &fileTable[i];
487 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
488 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
497 offset += f_tell((FIL *)
file);
502 offset += f_size((FIL *)
file);
510 res = f_lseek((FIL *)
file, offset);
512 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
513 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
537 #if (_FS_READONLY == 1 || FF_FS_READONLY ==1)
548 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
549 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
557 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
558 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
598 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
599 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
607 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
608 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
642 f_close((FIL *)
file);
645 #if (FATFS_REVISON <= FATFS_R(0, 11, a))
646 ((FIL *)
file)->fs = NULL;
648 ((FIL *)
file)->obj.fs = NULL;
668 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
681 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
682 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
688 res = f_stat(path, &fno);
690 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
691 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
701 if(fno.fattrib & AM_DIR)
716 #if (_FS_READONLY == 1 || FF_FS_READONLY ==1)
726 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
727 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
735 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
736 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
759 #if (_FS_READONLY == 1 || FF_FS_READONLY ==1)
769 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
770 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
776 res = f_unlink(path);
778 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
779 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
819 #if (FATFS_REVISON <= FATFS_R(0, 11, a))
820 if(dirTable[i].fs == NULL)
822 if(dirTable[i].obj.fs == NULL)
826 res = f_opendir(&dirTable[i], path);
858 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
861 fno.lfsize =
sizeof(lfn);
868 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
869 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
875 res = f_readdir((DIR *) dir, &fno);
877 #if ((FATFS_REVISON <= FATFS_R(0, 12, c) && _FS_REENTRANT == 0) || \
878 (FATFS_REVISON >= FATFS_R(0, 13, 0) && FF_FS_REENTRANT == 0))
888 if(fno.fname[0] ==
'\0')
892 #if (FATFS_REVISON <= FATFS_R(0, 11, a) && _USE_LFN != 0)
893 fn = (*fno.lfname !=
'\0') ? fno.lfname : fno.fname;
901 dirEntry->
size = fno.fsize;
904 dirEntry->
modified.
year = 1980 + ((fno.fdate >> 9) & 0x7F);
927 dirEntry->
name[
n] =
'\0';
947 #if (FATFS_REVISON >= FATFS_R(0, 10, 0))
949 f_closedir((DIR *) dir);
953 #if (FATFS_REVISON <= FATFS_R(0, 11, a))
954 ((DIR *) dir)->fs = NULL;
956 ((DIR *) dir)->obj.fs = NULL;
@ ERROR_FAILURE
Generic error code.
@ ERROR_INVALID_PARAMETER
Invalid parameter.
File system abstraction layer.
error_t fsSeekFile(FsFile *file, int_t offset, uint_t origin)
Move to specified position in file.
bool_t fsFileExists(const char_t *path)
Check whether a file exists.
error_t fsInit(void)
File system initialization.
error_t fsRemoveDir(const char_t *path)
Remove a directory.
error_t fsDeleteFile(const char_t *path)
Delete a file.
bool_t fsDirExists(const char_t *path)
Check whether a directory exists.
error_t fsGetFileSize(const char_t *path, uint32_t *size)
Retrieve the size of the specified file.
void fsCloseFile(FsFile *file)
Close a file.
error_t fsRenameFile(const char_t *oldPath, const char_t *newPath)
Rename the specified file.
FsDir * fsOpenDir(const char_t *path)
Open a directory stream.
error_t fsCreateDir(const char_t *path)
Create a directory.
void fsCloseDir(FsDir *dir)
Close a directory stream.
error_t fsGetFileStat(const char_t *path, FsFileStat *fileStat)
Retrieve the attributes of the specified file.
error_t fsWriteFile(FsFile *file, void *data, size_t length)
Write data to the specified file.
FsFile * fsOpenFile(const char_t *path, uint_t mode)
Open the specified file for reading or writing.
error_t fsReadFile(FsFile *file, void *data, size_t size, size_t *length)
Read data from the specified file.
error_t fsReadDir(FsDir *dir, FsDirEntry *dirEntry)
Read an entry from the specified directory stream.
File system abstraction layer (FatFs)
void FsFile
File descriptor.
#define osMemset(p, value, length)
#define osStrncpy(s1, s2, length)
bool_t osCreateMutex(OsMutex *mutex)
Create a mutex object.
void osDeleteMutex(OsMutex *mutex)
Delete a mutex object.
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
char_t name[FS_MAX_NAME_LEN+1]