39#include <effs_fat/port_f.h>
40#include <effs_fat/udefs_f.h>
43#define STDRAM_DRV_NUM 1
47#define FATRAM_DRV_NUM 4
48#define ONBOARD_MMC_DRV_NUM 5
67#define f_mountfat f_initvolume
69#define F_SECTOR_SIZE 512
73 unsigned char jump_code[3];
74 unsigned char OEM_name[8];
75 unsigned short bytes_per_sector;
76 unsigned char sector_per_cluster;
77 unsigned short reserved_sectors;
78 unsigned char number_of_FATs;
79 unsigned short max_root_entry;
80 unsigned short number_of_sectors_less32;
81 unsigned char media_descriptor;
82 unsigned short sector_per_FAT;
83 unsigned short sector_per_Track;
84 unsigned short number_of_heads;
85 unsigned long number_of_hidden_sectors;
86 unsigned long number_of_sectors;
89 unsigned long sector_per_FAT32;
90 unsigned short extflags;
91 unsigned short fsversion;
92 unsigned long rootcluster;
93 unsigned short fsinfo;
94 unsigned short bkbootsec;
95 unsigned char reserved[12];
98 unsigned short logical_drive_num;
99 unsigned char extended_signature;
100 unsigned long serial_number;
101 unsigned char volume_name[11];
102 unsigned char FAT_name[8];
103 unsigned char executable_marker[2];
107#define F_SPACE_AFTER_MBR 63
119 unsigned char chksum;
137 char name[F_MAXNAME];
142 unsigned char crttimetenth;
143 unsigned char crttime[2];
144 unsigned char crtdate[2];
145 unsigned char lastaccessdate[2];
147 unsigned char clusterhi[2];
148 unsigned char ctime[2];
149 unsigned char cdate[2];
150 unsigned char clusterlo[2];
151 unsigned char filesize[4];
155#define F_DELETED_CHAR ((char)0xe5)
158#define NTRES_LOW 0x08
161#define F_ATTR_LFN (F_ATTR_VOLUME | F_ATTR_SYSTEM | F_ATTR_HIDDEN | F_ATTR_READONLY)
170 unsigned char lfnhi_1;
173 unsigned char lfnhi_2;
176 unsigned char lfnhi_3;
179 unsigned char lfnhi_4;
182 unsigned char lfnhi_5;
187 unsigned char chksum;
190 unsigned char lfnhi_6;
193 unsigned char lfnhi_7;
196 unsigned char lfnhi_8;
199 unsigned char lfnhi_9;
201 unsigned char lfn_10;
202 unsigned char lfnhi_10;
204 unsigned char lfn_11;
205 unsigned char lfnhi_11;
207 unsigned char clusterlo[2];
209 unsigned char lfn_12;
210 unsigned char lfnhi_12;
212 unsigned char lfn_13;
213 unsigned char lfnhi_13;
220#define F_CLUSTER_FREE ((unsigned long)0x00000000)
221#define F_CLUSTER_RESERVED ((unsigned long)0x0ffffff0)
222#define F_CLUSTER_BAD ((unsigned long)0x0ffffff7)
223#define F_CLUSTER_LAST ((unsigned long)0x0ffffff8)
224#define F_CLUSTER_LASTF32R ((unsigned long)0x0fffffff)
228 unsigned long sector;
232#if F_MAXFILES > 0xffff
233#error F_MAXFILES should be less than 65535
234#elif F_MAXFILES > 0x7fff
235#define F_MAXFILES_SHIFT 16
236#elif F_MAXFILES > 0x3fff
237#define F_MAXFILES_SHIFT 15
238#elif F_MAXFILES > 0x1fff
239#define F_MAXFILES_SHIFT 14
240#elif F_MAXFILES > 0x0fff
241#define F_MAXFILES_SHIFT 13
242#elif F_MAXFILES > 0x07ff
243#define F_MAXFILES_SHIFT 12
244#elif F_MAXFILES > 0x03ff
245#define F_MAXFILES_SHIFT 11
246#elif F_MAXFILES > 0x01ff
247#define F_MAXFILES_SHIFT 10
248#elif F_MAXFILES > 0x00ff
249#define F_MAXFILES_SHIFT 9
250#elif F_MAXFILES > 0x007f
251#define F_MAXFILES_SHIFT 8
252#elif F_MAXFILES > 0x003f
253#define F_MAXFILES_SHIFT 7
254#elif F_MAXFILES > 0x001f
255#define F_MAXFILES_SHIFT 6
256#elif F_MAXFILES > 0x000f
257#define F_MAXFILES_SHIFT 5
259#define F_MAXFILES_SHIFT 4
272 F_POS posbuf[WR_DATACACHE_SIZE];
276typedef struct FN_FILEINT FN_FILEINT;
278typedef struct FN_FILEINT
283 unsigned long abspos;
284 unsigned long relpos;
285 unsigned long filesize;
286 unsigned char data[F_SECTOR_SIZE];
288 t_WrDataCache WrDataCache;
289 unsigned long startcluster;
294 long seekpos[F_MAXSEEKPOS];
295 long seekprev[F_MAXSEEKPOS];
298 FN_FILEINT *syncfile;
304#define F_FILE_ST_SYNC 0x0001
305#define F_FILE_ST_EOF 0x0002
309 unsigned long clfree;
310 unsigned long clused;
314#ifdef FATCACHE_ENABLE
317 unsigned long sector;
328 t_CacheDsc dsc_array[FATCACHE_SIZE];
329 unsigned char data[FATCACHE_SIZE * F_SECTOR_SIZE];
338 F_BOOTRECORD bootrecord;
345#ifdef FATCACHE_ENABLE
349 unsigned char fat[F_SECTOR_SIZE];
351 unsigned long fatsector;
355#ifdef DIRCACHE_ENABLE
357 unsigned char *dircache;
359 unsigned char dircache[DIRCACHE_SIZE * F_SECTOR_SIZE];
361 unsigned long dircache_start;
362 unsigned long dircache_size;
365 unsigned char direntry[F_SECTOR_SIZE];
366 unsigned long direntrysector;
368 unsigned long lastalloccluster;
375#if defined FATBITFIELD_ENABLE && defined USE_MALLOC
376 unsigned char *fatbitfield;
379 unsigned long sectorstart;
380 unsigned long sectornum;
385 unsigned char sectorbuffer[F_SECTOR_SIZE];
389#define F_FAT12_MAX_CLUSTER 0xFF0
390#define F_FAT16_MAX_CLUSTER 0xFFF0
394 F_VOLUME volumes[FN_MAXVOLUME];
395 FN_FILEINT files[F_MAXFILES];
396 unsigned long drvbldnum;
399extern FN_FILESYSTEM f_filesystem;
409 W_CHAR cwd[FN_MAXPATH];
410 } f_vols[FN_MAXVOLUME];
412 FN_MUTEX_TYPE *pmutex;
413 unsigned char current_bank;
433#define FN_FILE_ABORT_FLAG 0x40
452extern int fn_delvolume(F_MULTI *fm,
int drvnumber);
453extern int fn_get_volume_count(F_MULTI *fm);
454extern int fn_get_volume_list(F_MULTI *fm,
int *buf);
455extern int fn_checkvolume(F_MULTI *fm,
int drvnumber);
456extern int fn_format(F_MULTI *fm,
int drivenum,
long fattype);
457extern int fn_getcwd(F_MULTI *fm,
char *buffer,
int maxlen);
458extern int fn_getdcwd(F_MULTI *fm,
int drivenum,
char *buffer,
int maxlen);
459extern int fn_chdrive(F_MULTI *fm,
int drivenum);
460extern int fn_getdrive(F_MULTI *fm);
461extern int fn_getfreespace(F_MULTI *fm,
int drivenum, FN_SPACE *pspace);
463extern int fn_chdir(F_MULTI *fm,
const char *dirname);
464extern int fn_mkdir(F_MULTI *fm,
const char *dirname);
465extern int fn_rmdir(F_MULTI *fm,
const char *dirname);
467extern int fn_findfirst(F_MULTI *fm,
const char *filename, FN_FIND *find);
468extern int fn_findnext(F_MULTI *fm, FN_FIND *find);
469extern int fn_rename(F_MULTI *fm,
const char *filename,
const char *newname);
470extern int fn_move(F_MULTI *fm,
const char *filename,
const char *newname);
471extern long fn_filelength(F_MULTI *fm,
const char *filename);
473extern int fn_close(F_MULTI *fm, FN_FILE *filehandle);
474extern int fn_flush(F_MULTI *fm, FN_FILE *file);
475extern FN_FILE *fn_open(F_MULTI *fm,
const char *filename,
const char *mode);
476extern FN_FILE *fn_truncate(F_MULTI *fm,
const char *filename,
unsigned long length);
478extern long fn_read(F_MULTI *fm,
void *buf,
long size,
long size_st, FN_FILE *filehandle);
479extern long fn_write(F_MULTI *fm,
const void *buf,
long size,
long size_st, FN_FILE *filehandle);
481extern int fn_seek(F_MULTI *fm, FN_FILE *filehandle,
long offset,
long whence);
482extern int fn_seteof(F_MULTI *fm, FN_FILE *filehandle);
484extern long fn_tell(F_MULTI *fm, FN_FILE *filehandle);
485extern int fn_getc(F_MULTI *fm, FN_FILE *filehandle);
486extern int fn_putc(F_MULTI *fm,
int ch, FN_FILE *filehandle);
487extern int fn_rewind(F_MULTI *fm, FN_FILE *filehandle);
488extern int fn_eof(F_MULTI *, FN_FILE *filehandle);
490extern int fn_gettimedate(F_MULTI *fm,
const char *filename,
unsigned short *pctime,
unsigned short *pcdate);
491extern int fn_settimedate(F_MULTI *fm,
const char *filename,
unsigned short ctime,
unsigned short cdate);
492extern int fn_delete(F_MULTI *fm,
const char *filename);
493extern int fn_stat(F_MULTI *fm,
const char *filename, F_STAT *stat);
495extern int fn_getattr(F_MULTI *fm,
const char *filename,
unsigned char *attr);
496extern int fn_setattr(F_MULTI *fm,
const char *filename,
unsigned char attr);
498extern int fn_getlabel(F_MULTI *fm,
int drivenum,
char *label,
long len);
499extern int fn_setlabel(F_MULTI *fm,
int drivenum,
const char *label);
501extern int fn_get_oem(F_MULTI *fm,
int drivenum,
char *str,
long maxlen);
504extern int fn_wgetcwd(F_MULTI *fm, wchar *buffer,
int maxlen);
505extern int fn_wgetdcwd(F_MULTI *fm,
int drivenum, wchar *buffer,
int maxlen);
506extern int fn_wchdir(F_MULTI *fm,
const wchar *dirname);
507extern int fn_wmkdir(F_MULTI *fm,
const wchar *dirname);
508extern int fn_wrmdir(F_MULTI *fm,
const wchar *dirname);
509extern int fn_wfindfirst(F_MULTI *fm,
const wchar *filename, FN_WFIND *find);
510extern int fn_wfindnext(F_MULTI *fm, FN_WFIND *find);
511extern int fn_wrename(F_MULTI *fm,
const wchar *filename,
const wchar *newname);
512extern int fn_wmove(F_MULTI *fm,
const wchar *filename,
const wchar *newname);
513extern long fn_wfilelength(F_MULTI *fm,
const wchar *filename);
514extern FN_FILE *fn_wopen(F_MULTI *fm,
const wchar *filename,
const wchar *mode);
515extern FN_FILE *fn_wtruncate(F_MULTI *fm,
const wchar *filename,
unsigned long length);
516extern int fn_wstat(F_MULTI *fm,
const wchar *filename, F_STAT *stat);
517extern int fn_wgettimedate(F_MULTI *fm,
const wchar *filename,
unsigned short *pctime,
unsigned short *pcdate);
518extern int fn_wsettimedate(F_MULTI *fm,
const wchar *filename,
unsigned short ctime,
unsigned short cdate);
519extern int fn_wdelete(F_MULTI *fm,
const wchar *filename);
520extern int fn_wgetattr(F_MULTI *fm,
const wchar *filename,
unsigned char *attr);
521extern int fn_wsetattr(F_MULTI *fm,
const wchar *filename,
unsigned char attr);
526#define _f_toupper(ch) (((ch) >= 'a' && (ch) <= 'z') ? ((ch) - 'a' + 'A') : (ch))
529extern wchar *_towchar(wchar *nconv,
const char *s);
531extern int _f_addentry(F_VOLUME *vi, F_NAME *fsname, F_POS *pos, F_DIRENTRY **pde);
532extern int _f_getdirsector(F_VOLUME *vi,
unsigned long sector);
Embedded Flash File System - FAT.