LPCOpen Platform
LPCOpen Platform for NXP LPC Microcontrollers
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
ff.h
Go to the documentation of this file.
1
/*---------------------------------------------------------------------------/
2
/ FatFs - FAT file system module include file R0.09 (C)ChaN, 2011
3
/----------------------------------------------------------------------------/
4
/ FatFs module is a generic FAT file system module for small embedded systems.
5
/ This is a free software that opened for education, research and commercial
6
/ developments under license policy of following trems.
7
/
8
/ Copyright (C) 2011, ChaN, all right reserved.
9
/
10
/ * The FatFs module is a free software and there is NO WARRANTY.
11
/ * No restriction on use. You can use, modify and redistribute it for
12
/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
13
/ * Redistributions of source code must retain the above copyright notice.
14
/
15
/----------------------------------------------------------------------------*/
16
17
#ifndef _FATFS
18
#define _FATFS 6502
/* Revision ID */
19
20
#ifdef __cplusplus
21
extern
"C"
{
22
#endif
23
24
#include "
integer.h
"
/* Basic integer types */
25
#include "
ffconf.h
"
/* FatFs configuration options */
26
27
#if _FATFS != _FFCONF
28
#error Wrong configuration file (ffconf.h).
29
#endif
30
31
32
33
/* Definitions of volume management */
34
35
#if _MULTI_PARTITION
/* Multiple partition configuration */
36
typedef
struct
{
37
BYTE
pd;
/* Physical drive number */
38
BYTE
pt;
/* Partition: 0:Auto detect, 1-4:Forced partition) */
39
} PARTITION;
40
extern
PARTITION VolToPart[];
/* Volume - Partition resolution table */
41
#define LD2PD(vol) (VolToPart[vol].pd)
/* Get physical drive number */
42
#define LD2PT(vol) (VolToPart[vol].pt)
/* Get partition index */
43
44
#else
/* Single partition configuration */
45
#define LD2PD(vol) (vol)
/* Each logical drive is bound to the same physical drive number */
46
#define LD2PT(vol) 0
/* Always mounts the 1st partition or in SFD */
47
48
#endif
49
50
51
52
/* Type of path name strings on FatFs API */
53
54
#if _LFN_UNICODE
/* Unicode string */
55
#if !_USE_LFN
56
#error _LFN_UNICODE must be 0 in non-LFN cfg.
57
#endif
58
#ifndef _INC_TCHAR
59
typedef
WCHAR
TCHAR
;
60
#define _T(x) L ## x
61
#define _TEXT(x) L ## x
62
#endif
63
64
#else
/* ANSI/OEM string */
65
#ifndef _INC_TCHAR
66
typedef
char
TCHAR
;
67
#define _T(x) x
68
#define _TEXT(x) x
69
#endif
70
71
#endif
72
73
74
75
/* File system object structure (FATFS) */
76
77
typedef
struct
{
78
BYTE
fs_type
;
/* FAT sub-type (0:Not mounted) */
79
BYTE
drv
;
/* Physical drive number */
80
BYTE
csize
;
/* Sectors per cluster (1,2,4...128) */
81
BYTE
n_fats
;
/* Number of FAT copies (1,2) */
82
BYTE
wflag
;
/* win[] dirty flag (1:must be written back) */
83
BYTE
fsi_flag
;
/* fsinfo dirty flag (1:must be written back) */
84
WORD
id
;
/* File system mount ID */
85
WORD
n_rootdir
;
/* Number of root directory entries (FAT12/16) */
86
#if _MAX_SS != 512
87
WORD
ssize;
/* Bytes per sector (512, 1024, 2048 or 4096) */
88
#endif
89
#if _FS_REENTRANT
90
_SYNC_t sobj;
/* Identifier of sync object */
91
#endif
92
#if !_FS_READONLY
93
DWORD
last_clust
;
/* Last allocated cluster */
94
DWORD
free_clust
;
/* Number of free clusters */
95
DWORD
fsi_sector
;
/* fsinfo sector (FAT32) */
96
#endif
97
#if _FS_RPATH
98
DWORD
cdir;
/* Current directory start cluster (0:root) */
99
#endif
100
DWORD
n_fatent
;
/* Number of FAT entries (= number of clusters + 2) */
101
DWORD
fsize
;
/* Sectors per FAT */
102
DWORD
fatbase
;
/* FAT start sector */
103
DWORD
dirbase
;
/* Root directory start sector (FAT32:Cluster#) */
104
DWORD
database
;
/* Data start sector */
105
DWORD
winsect
;
/* Current sector appearing in the win[] */
106
BYTE
win[_MAX_SS];
/* Disk access window for Directory, FAT (and Data on tiny cfg) */
107
}
FATFS
;
108
109
110
111
/* File object structure (FIL) */
112
113
typedef
struct
{
114
FATFS
*
fs
;
/* Pointer to the owner file system object */
115
WORD
id
;
/* Owner file system mount ID */
116
BYTE
flag
;
/* File status flags */
117
BYTE
pad1
;
118
DWORD
fptr
;
/* File read/write pointer (0 on file open) */
119
DWORD
fsize
;
/* File size */
120
DWORD
sclust
;
/* File start cluster (0 when fsize==0) */
121
DWORD
clust
;
/* Current cluster */
122
DWORD
dsect
;
/* Current data sector */
123
#if !_FS_READONLY
124
DWORD
dir_sect
;
/* Sector containing the directory entry */
125
BYTE
*
dir_ptr
;
/* Ponter to the directory entry in the window */
126
#endif
127
#if _USE_FASTSEEK
128
DWORD
* cltbl;
/* Pointer to the cluster link map table (null on file open) */
129
#endif
130
#if _FS_SHARE
131
UINT
lockid;
/* File lock ID (index of file semaphore table) */
132
#endif
133
#if !_FS_TINY
134
BYTE
buf[_MAX_SS];
/* File data read/write buffer */
135
#endif
136
}
FIL
;
137
138
139
140
/* Directory object structure (DIR) */
141
142
typedef
struct
{
143
FATFS
*
fs
;
/* Pointer to the owner file system object */
144
WORD
id
;
/* Owner file system mount ID */
145
WORD
index
;
/* Current read/write index number */
146
DWORD
sclust
;
/* Table start cluster (0:Root dir) */
147
DWORD
clust
;
/* Current cluster */
148
DWORD
sect
;
/* Current sector */
149
BYTE
*
dir
;
/* Pointer to the current SFN entry in the win[] */
150
BYTE
*
fn
;
/* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
151
#if _USE_LFN
152
WCHAR
* lfn;
/* Pointer to the LFN working buffer */
153
WORD
lfn_idx;
/* Last matched LFN index number (0xFFFF:No LFN) */
154
#endif
155
}
DIR
;
156
157
158
159
/* File status structure (FILINFO) */
160
161
typedef
struct
{
162
DWORD
fsize
;
/* File size */
163
WORD
fdate
;
/* Last modified date */
164
WORD
ftime
;
/* Last modified time */
165
BYTE
fattrib
;
/* Attribute */
166
TCHAR fname[13];
/* Short file name (8.3 format) */
167
#if _USE_LFN
168
TCHAR* lfname;
/* Pointer to the LFN buffer */
169
UINT
lfsize;
/* Size of LFN buffer in TCHAR */
170
#endif
171
}
FILINFO
;
172
173
174
175
/* File function return code (FRESULT) */
176
177
typedef
enum
{
178
FR_OK
= 0,
/* (0) Succeeded */
179
FR_DISK_ERR
,
/* (1) A hard error occured in the low level disk I/O layer */
180
FR_INT_ERR
,
/* (2) Assertion failed */
181
FR_NOT_READY
,
/* (3) The physical drive cannot work */
182
FR_NO_FILE
,
/* (4) Could not find the file */
183
FR_NO_PATH
,
/* (5) Could not find the path */
184
FR_INVALID_NAME
,
/* (6) The path name format is invalid */
185
FR_DENIED
,
/* (7) Acces denied due to prohibited access or directory full */
186
FR_EXIST
,
/* (8) Acces denied due to prohibited access */
187
FR_INVALID_OBJECT
,
/* (9) The file/directory object is invalid */
188
FR_WRITE_PROTECTED
,
/* (10) The physical drive is write protected */
189
FR_INVALID_DRIVE
,
/* (11) The logical drive number is invalid */
190
FR_NOT_ENABLED
,
/* (12) The volume has no work area */
191
FR_NO_FILESYSTEM
,
/* (13) There is no valid FAT volume */
192
FR_MKFS_ABORTED
,
/* (14) The f_mkfs() aborted due to any parameter error */
193
FR_TIMEOUT
,
/* (15) Could not get a grant to access the volume within defined period */
194
FR_LOCKED
,
/* (16) The operation is rejected according to the file shareing policy */
195
FR_NOT_ENOUGH_CORE
,
/* (17) LFN working buffer could not be allocated */
196
FR_TOO_MANY_OPEN_FILES
,
/* (18) Number of open files > _FS_SHARE */
197
FR_INVALID_PARAMETER
/* (19) Given parameter is invalid */
198
}
FRESULT
;
199
200
201
202
/*--------------------------------------------------------------*/
203
/* FatFs module application interface */
204
205
FRESULT
f_mount
(
BYTE
,
FATFS
*);
/* Mount/Unmount a logical drive */
206
FRESULT
f_open
(
FIL
*,
const
TCHAR*,
BYTE
);
/* Open or create a file */
207
FRESULT
f_read
(
FIL
*,
void
*,
UINT
,
UINT
*);
/* Read data from a file */
208
FRESULT
f_lseek
(
FIL
*,
DWORD
);
/* Move file pointer of a file object */
209
FRESULT
f_close
(
FIL
*);
/* Close an open file object */
210
FRESULT
f_opendir
(
DIR
*,
const
TCHAR*);
/* Open an existing directory */
211
FRESULT
f_readdir
(
DIR
*,
FILINFO
*);
/* Read a directory item */
212
FRESULT
f_stat
(
const
TCHAR*,
FILINFO
*);
/* Get file status */
213
FRESULT
f_write
(
FIL
*,
const
void
*,
UINT
,
UINT
*);
/* Write data to a file */
214
FRESULT
f_getfree
(
const
TCHAR*,
DWORD
*,
FATFS
**);
/* Get number of free clusters on the drive */
215
FRESULT
f_truncate
(
FIL
*);
/* Truncate file */
216
FRESULT
f_sync
(
FIL
*);
/* Flush cached data of a writing file */
217
FRESULT
f_unlink
(
const
TCHAR*);
/* Delete an existing file or directory */
218
FRESULT
f_mkdir
(
const
TCHAR*);
/* Create a new directory */
219
FRESULT
f_chmod
(
const
TCHAR*,
BYTE
,
BYTE
);
/* Change attriburte of the file/dir */
220
FRESULT
f_utime
(
const
TCHAR*,
const
FILINFO
*);
/* Change timestamp of the file/dir */
221
FRESULT
f_rename
(
const
TCHAR*,
const
TCHAR*);
/* Rename/Move a file or directory */
222
FRESULT
f_chdrive
(
BYTE
);
/* Change current drive */
223
FRESULT
f_chdir
(
const
TCHAR*);
/* Change current directory */
224
FRESULT
f_getcwd
(TCHAR*,
UINT
);
/* Get current directory */
225
FRESULT
f_forward
(
FIL
*,
UINT
(*)(
const
BYTE
*,
UINT
),
UINT
,
UINT
*);
/* Forward data to the stream */
226
FRESULT
f_mkfs
(
BYTE
,
BYTE
,
UINT
);
/* Create a file system on the drive */
227
FRESULT
f_fdisk
(
BYTE
,
const
DWORD
[],
void
*);
/* Divide a physical drive into some partitions */
228
int
f_putc
(TCHAR,
FIL
*);
/* Put a character to the file */
229
int
f_puts
(
const
TCHAR*,
FIL
*);
/* Put a string to the file */
230
int
f_printf
(
FIL
*,
const
TCHAR*, ...);
/* Put a formatted string to the file */
231
TCHAR*
f_gets
(TCHAR*,
int
,
FIL
*);
/* Get a string from the file */
232
233
#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
234
#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
235
#define f_tell(fp) ((fp)->fptr)
236
#define f_size(fp) ((fp)->fsize)
237
238
#ifndef EOF
239
#define EOF (-1)
240
#endif
241
242
243
244
245
/*--------------------------------------------------------------*/
246
/* Additional user defined functions */
247
248
/* RTC function */
249
#if !_FS_READONLY
250
DWORD
get_fattime
(
void
);
251
#endif
252
253
/* Unicode support functions */
254
#if _USE_LFN
/* Unicode - OEM code conversion */
255
WCHAR
ff_convert (
WCHAR
,
UINT
);
/* OEM-Unicode bidirectional conversion */
256
WCHAR
ff_wtoupper (
WCHAR
);
/* Unicode upper-case conversion */
257
#if _USE_LFN == 3
/* Memory functions */
258
void
* ff_memalloc (
UINT
);
/* Allocate memory block */
259
void
ff_memfree (
void
*);
/* Free memory block */
260
#endif
261
#endif
262
263
/* Sync functions */
264
#if _FS_REENTRANT
265
int
ff_cre_syncobj (
BYTE
, _SYNC_t*);
/* Create a sync object */
266
int
ff_req_grant (_SYNC_t);
/* Lock sync object */
267
void
ff_rel_grant (_SYNC_t);
/* Unlock sync object */
268
int
ff_del_syncobj (_SYNC_t);
/* Delete a sync object */
269
#endif
270
271
272
273
274
/*--------------------------------------------------------------*/
275
/* Flags and offset address */
276
277
278
/* File access control and file status flags (FIL.flag) */
279
280
#define FA_READ 0x01
281
#define FA_OPEN_EXISTING 0x00
282
#define FA__ERROR 0x80
283
284
#if !_FS_READONLY
285
#define FA_WRITE 0x02
286
#define FA_CREATE_NEW 0x04
287
#define FA_CREATE_ALWAYS 0x08
288
#define FA_OPEN_ALWAYS 0x10
289
#define FA__WRITTEN 0x20
290
#define FA__DIRTY 0x40
291
#endif
292
293
294
/* FAT sub type (FATFS.fs_type) */
295
296
#define FS_FAT12 1
297
#define FS_FAT16 2
298
#define FS_FAT32 3
299
300
301
/* File attribute bits for directory entry */
302
303
#define AM_RDO 0x01
/* Read only */
304
#define AM_HID 0x02
/* Hidden */
305
#define AM_SYS 0x04
/* System */
306
#define AM_VOL 0x08
/* Volume label */
307
#define AM_LFN 0x0F
/* LFN entry */
308
#define AM_DIR 0x10
/* Directory */
309
#define AM_ARC 0x20
/* Archive */
310
#define AM_MASK 0x3F
/* Mask of defined bits */
311
312
313
/* Fast seek feature */
314
#define CREATE_LINKMAP 0xFFFFFFFF
315
316
317
318
/*--------------------------------*/
319
/* Multi-byte word access macros */
320
321
#if _WORD_ACCESS == 1
/* Enable word access to the FAT structure */
322
#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))
323
#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr))
324
#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val)
325
#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val)
326
#else
/* Use byte-by-byte access to the FAT structure */
327
#define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr))
328
#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr))
329
#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8)
330
#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)
331
#endif
332
333
#ifdef __cplusplus
334
}
335
#endif
336
337
#endif
/* _FATFS */
applications
lpc18xx_43xx
examples
LPCUSBlib
lpcusblib_MassStorageDevice
sdmmc
ff.h
Generated on Fri Nov 16 2012 13:36:36 for LPCOpen Platform by
1.8.2