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];
276 typedef struct FN_FILEINT FN_FILEINT;
278 typedef 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;
399 extern 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 452 extern int fn_delvolume(F_MULTI *fm,
int drvnumber);
453 extern int fn_get_volume_count(F_MULTI *fm);
454 extern int fn_get_volume_list(F_MULTI *fm,
int *buf);
455 extern int fn_checkvolume(F_MULTI *fm,
int drvnumber);
456 extern int fn_format(F_MULTI *fm,
int drivenum,
long fattype);
457 extern int fn_getcwd(F_MULTI *fm,
char *buffer,
int maxlen);
458 extern int fn_getdcwd(F_MULTI *fm,
int drivenum,
char *buffer,
int maxlen);
459 extern int fn_chdrive(F_MULTI *fm,
int drivenum);
460 extern int fn_getdrive(F_MULTI *fm);
461 extern int fn_getfreespace(F_MULTI *fm,
int drivenum, FN_SPACE *pspace);
463 extern int fn_chdir(F_MULTI *fm,
const char *dirname);
464 extern int fn_mkdir(F_MULTI *fm,
const char *dirname);
465 extern int fn_rmdir(F_MULTI *fm,
const char *dirname);
467 extern int fn_findfirst(F_MULTI *fm,
const char *filename, FN_FIND *find);
468 extern int fn_findnext(F_MULTI *fm, FN_FIND *find);
469 extern int fn_rename(F_MULTI *fm,
const char *filename,
const char *newname);
470 extern int fn_move(F_MULTI *fm,
const char *filename,
const char *newname);
471 extern long fn_filelength(F_MULTI *fm,
const char *filename);
473 extern int fn_close(F_MULTI *fm, FN_FILE *filehandle);
474 extern int fn_flush(F_MULTI *fm, FN_FILE *file);
475 extern FN_FILE *fn_open(F_MULTI *fm,
const char *filename,
const char *mode);
476 extern FN_FILE *fn_truncate(F_MULTI *fm,
const char *filename,
unsigned long length);
478 extern long fn_read(F_MULTI *fm,
void *buf,
long size,
long size_st, FN_FILE *filehandle);
479 extern long fn_write(F_MULTI *fm,
const void *buf,
long size,
long size_st, FN_FILE *filehandle);
481 extern int fn_seek(F_MULTI *fm, FN_FILE *filehandle,
long offset,
long whence);
482 extern int fn_seteof(F_MULTI *fm, FN_FILE *filehandle);
484 extern long fn_tell(F_MULTI *fm, FN_FILE *filehandle);
485 extern int fn_getc(F_MULTI *fm, FN_FILE *filehandle);
486 extern int fn_putc(F_MULTI *fm,
int ch, FN_FILE *filehandle);
487 extern int fn_rewind(F_MULTI *fm, FN_FILE *filehandle);
488 extern int fn_eof(F_MULTI *, FN_FILE *filehandle);
490 extern int fn_gettimedate(F_MULTI *fm,
const char *filename,
unsigned short *pctime,
unsigned short *pcdate);
491 extern int fn_settimedate(F_MULTI *fm,
const char *filename,
unsigned short ctime,
unsigned short cdate);
492 extern int fn_delete(F_MULTI *fm,
const char *filename);
493 extern int fn_stat(F_MULTI *fm,
const char *filename, F_STAT *stat);
495 extern int fn_getattr(F_MULTI *fm,
const char *filename,
unsigned char *attr);
496 extern int fn_setattr(F_MULTI *fm,
const char *filename,
unsigned char attr);
498 extern int fn_getlabel(F_MULTI *fm,
int drivenum,
char *label,
long len);
499 extern int fn_setlabel(F_MULTI *fm,
int drivenum,
const char *label);
501 extern int fn_get_oem(F_MULTI *fm,
int drivenum,
char *str,
long maxlen);
504 extern int fn_wgetcwd(F_MULTI *fm, wchar *buffer,
int maxlen);
505 extern int fn_wgetdcwd(F_MULTI *fm,
int drivenum, wchar *buffer,
int maxlen);
506 extern int fn_wchdir(F_MULTI *fm,
const wchar *dirname);
507 extern int fn_wmkdir(F_MULTI *fm,
const wchar *dirname);
508 extern int fn_wrmdir(F_MULTI *fm,
const wchar *dirname);
509 extern int fn_wfindfirst(F_MULTI *fm,
const wchar *filename, FN_WFIND *find);
510 extern int fn_wfindnext(F_MULTI *fm, FN_WFIND *find);
511 extern int fn_wrename(F_MULTI *fm,
const wchar *filename,
const wchar *newname);
512 extern int fn_wmove(F_MULTI *fm,
const wchar *filename,
const wchar *newname);
513 extern long fn_wfilelength(F_MULTI *fm,
const wchar *filename);
514 extern FN_FILE *fn_wopen(F_MULTI *fm,
const wchar *filename,
const wchar *mode);
515 extern FN_FILE *fn_wtruncate(F_MULTI *fm,
const wchar *filename,
unsigned long length);
516 extern int fn_wstat(F_MULTI *fm,
const wchar *filename, F_STAT *stat);
517 extern int fn_wgettimedate(F_MULTI *fm,
const wchar *filename,
unsigned short *pctime,
unsigned short *pcdate);
518 extern int fn_wsettimedate(F_MULTI *fm,
const wchar *filename,
unsigned short ctime,
unsigned short cdate);
519 extern int fn_wdelete(F_MULTI *fm,
const wchar *filename);
520 extern int fn_wgetattr(F_MULTI *fm,
const wchar *filename,
unsigned char *attr);
521 extern 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)) 529 extern wchar *_towchar(wchar *nconv,
const char *s);
531 extern int _f_addentry(F_VOLUME *vi, F_NAME *fsname, F_POS *pos, F_DIRENTRY **pde);
532 extern int _f_getdirsector(F_VOLUME *vi,
unsigned long sector);
Embedded Flash File System API - FAT.