Update TemperatureDataLogger and Webserver projects to the latest FATFS library version.

pull/1469/head
Dean Camera 14 years ago
parent 67bc625109
commit 27fb44268f

@ -226,9 +226,9 @@ USB_Descriptor_String_t PROGMEM ManufacturerString =
*/ */
USB_Descriptor_String_t PROGMEM ProductString = USB_Descriptor_String_t PROGMEM ProductString =
{ {
.Header = {.Size = USB_STRING_LEN(10), .Type = DTYPE_String}, .Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},
.UnicodeString = L"Datalogger" .UnicodeString = L"Temperature Datalogger"
}; };
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"

@ -1,4 +1,4 @@
FatFs Module Source Files R0.07e (C)ChaN, 2010 FatFs Module Source Files R0.08 (C)ChaN, 2010
FILES FILES
@ -84,7 +84,7 @@ REVISION HISTORY
Added string functions: fputc(), fputs(), fprintf() and fgets(). Added string functions: fputc(), fputs(), fprintf() and fgets().
Improved performance of f_lseek() on move to the same or following cluster. Improved performance of f_lseek() on move to the same or following cluster.
Apr 01, 2010, R0.07 Merged Tiny-FatFs as a buffer configuration option. Apr 01, 2009, R0.07 Merged Tiny-FatFs as a buffer configuration option.
Added long file name support. Added long file name support.
Added multiple code page support. Added multiple code page support.
Added re-entrancy for multitask operation. Added re-entrancy for multitask operation.
@ -93,18 +93,25 @@ REVISION HISTORY
Changed result code of critical errors. Changed result code of critical errors.
Renamed string functions to avoid name collision. Renamed string functions to avoid name collision.
Apr 14, 2010, R0.07a Separated out OS dependent code on reentrant cfg. Apr 14, 2009, R0.07a Separated out OS dependent code on reentrant cfg.
Added multiple sector size support. Added multiple sector size support.
Jun 21, 2010, R0.07c Fixed f_unlink() may return FR_OK on error. Jun 21, 2009, R0.07c Fixed f_unlink() may return FR_OK on error.
Fixed wrong cache control in f_lseek(). Fixed wrong cache control in f_lseek().
Added relative path feature. Added relative path feature.
Added f_chdir(). Added f_chdir().
Added f_chdrive(). Added f_chdrive().
Added proper case conversion for extended characters. Added proper case conversion for extended characters.
Nov 03,'2010 R0.07e Separated out configuration options from ff.h to ffconf.h. Nov 03, 2009 R0.07e Separated out configuration options from ff.h to ffconf.h.
Added a configuration option, _LFN_UNICODE. Added a configuration option, _LFN_UNICODE.
Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH.
Fixed name matching error on the 13 char boundary. Fixed name matching error on the 13 char boundary.
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
May 15, 2010, R0.08 Added a memory configuration option. (_USE_LFN)
Added file lock feature. (_FS_SHARE)
Added fast seek feature. (_USE_FASTSEEK)
Changed some types on the API, XCHAR->TCHAR.
Changed fname member in the FILINFO structure on Unicode cfg.
String functions support UTF-8 encoding files on Unicode cfg.

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ FatFs - FAT file system module include file R0.07e (C)ChaN, 2010 / FatFs - FAT file system module include file R0.08 (C)ChaN, 2010
/----------------------------------------------------------------------------/ /----------------------------------------------------------------------------/
/ FatFs module is a generic FAT file system module for small embedded systems. / FatFs module is a generic FAT file system module for small embedded systems.
/ This is a free software that opened for education, research and commercial / This is a free software that opened for education, research and commercial
@ -11,15 +11,20 @@
/ * No restriction on use. You can use, modify and redistribute it for / * No restriction on use. You can use, modify and redistribute it for
/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. / personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
/ * Redistributions of source code must retain the above copyright notice. / * Redistributions of source code must retain the above copyright notice.
/
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#ifndef _FATFS #ifndef _FATFS
#define _FATFS 0x007E #define _FATFS 8085 /* Revision ID */
#ifdef __cplusplus
extern "C" {
#endif
#include "integer.h" /* Basic integer types */ #include "integer.h" /* Basic integer types */
#include "ffconf.h" /* FatFs configuration options */ #include "ffconf.h" /* FatFs configuration options */
#if _FATFS != _FFCONFIG #if _FATFS != _FFCONF
#error Wrong configuration file (ffconf.h). #error Wrong configuration file (ffconf.h).
#endif #endif
@ -219,50 +224,18 @@
/* Character code support macros */ /* Definitions corresponds to volume management */
#define IsUpper(c) (((c)>='A')&&((c)<='Z'))
#define IsLower(c) (((c)>='a')&&((c)<='z'))
#if _DF1S /* DBCS configuration */
#ifdef _DF2S /* Two 1st byte areas */
#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E))
#else /* One 1st byte area */
#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E)
#endif
#ifdef _DS3S /* Three 2nd byte areas */
#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E))
#else /* Two 2nd byte areas */
#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E))
#endif
#else /* SBCS configuration */
#define IsDBCS1(c) 0
#define IsDBCS2(c) 0
#endif /* _DF1S */
/* Definitions corresponds to multi partition */
#if _MULTI_PARTITION /* Multiple partition configuration */ #if _MULTI_PARTITION /* Multiple partition configuration */
#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */
typedef struct _PARTITION { #define LD2PT(drv) (Drives[drv].pt) /* Get partition# */
typedef struct {
BYTE pd; /* Physical drive# */ BYTE pd; /* Physical drive# */
BYTE pt; /* Partition # (0-3) */ BYTE pt; /* Partition # (0-3) */
} PARTITION; } PARTITION;
extern const PARTITION Drives[]; /* Logical drive# to physical location conversion table */
extern
const PARTITION Drives[]; /* Logical drive# to physical location conversion table */
#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */
#define LD2PT(drv) (Drives[drv].pt) /* Get partition# */
#else /* Single partition configuration */ #else /* Single partition configuration */
#define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */ #define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */
#define LD2PT(drv) 0 /* Always mounts the 1st partition */ #define LD2PT(drv) 0 /* Always mounts the 1st partition */
@ -270,120 +243,142 @@ const PARTITION Drives[]; /* Logical drive# to physical location conversion ta
/* Definitions corresponds to multiple sector size */ /* Type of path name strings on FatFs API */
#if _MAX_SS == 512 /* Single sector size */ #if _LFN_UNICODE /* Unicode string */
#define SS(fs) 512U #if !_USE_LFN
#error _LFN_UNICODE must be 0 in non-LFN cfg.
#elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096 /* Multiple sector size */ #endif
#define SS(fs) ((fs)->s_size) #ifndef _INC_TCHAR
typedef WCHAR TCHAR;
#define _T(x) L ## x
#define _TEXT(x) L ## x
#endif
#else #else /* ANSI/OEM string */
#error Sector size must be 512, 1024, 2048 or 4096. #ifndef _INC_TCHAR
typedef char TCHAR;
#define _T(x) x
#define _TEXT(x) x
#endif
#endif #endif
/* Type of file name on FatFs API */ /* Definitions corresponds to file shareing feature */
#if _LFN_UNICODE && _USE_LFN #if _FS_SHARE
typedef WCHAR XCHAR; /* Unicode */ #if _FS_READONLY
#else #error _FS_SHARE must be 0 on R/O cfg.
typedef char XCHAR; /* SBCS, DBCS */ #endif
typedef struct {
DWORD clu; /* File ID 1, directory */
WORD idx; /* File ID 2, index in the directory */
WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */
} FILESEM;
#endif #endif
/* File system object structure */ /* File system object structure (FATFS) */
typedef struct _FATFS_ { typedef struct {
BYTE fs_type; /* FAT sub type */ BYTE fs_type; /* FAT sub-type (0:Not mounted) */
BYTE drive; /* Physical drive number */ BYTE drv; /* Physical drive number */
BYTE csize; /* Number of sectors per cluster */ BYTE csize; /* Sectors per cluster (1,2,4...128) */
BYTE n_fats; /* Number of FAT copies */ BYTE n_fats; /* Number of FAT copies (1,2) */
BYTE wflag; /* win[] dirty flag (1:must be written back) */ BYTE wflag; /* win[] dirty flag (1:must be written back) */
BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
WORD id; /* File system mount ID */ WORD id; /* File system mount ID */
WORD n_rootdir; /* Number of root directory entries (0 on FAT32) */ WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
#if _FS_REENTRANT
_SYNC_t sobj; /* Identifier of sync object */
#endif
#if _MAX_SS != 512 #if _MAX_SS != 512
WORD s_size; /* Sector size */ WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
#endif
#if _FS_REENTRANT
_SYNC_t sobj; /* Identifier of sync object */
#endif #endif
#if !_FS_READONLY #if !_FS_READONLY
DWORD last_clust; /* Last allocated cluster */ DWORD last_clust; /* Last allocated cluster */
DWORD free_clust; /* Number of free clusters */ DWORD free_clust; /* Number of free clusters */
DWORD fsi_sector; /* fsinfo sector */ DWORD fsi_sector; /* fsinfo sector (FAT32) */
#endif #endif
#if _FS_RPATH #if _FS_RPATH
DWORD cdir; /* Current directory (0:root)*/ DWORD cdir; /* Current directory start cluster (0:root) */
#endif #endif
DWORD sects_fat; /* Sectors per fat */ DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */
DWORD max_clust; /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */ DWORD fsize; /* Sectors per FAT */
DWORD fatbase; /* FAT start sector */ DWORD fatbase; /* FAT start sector */
DWORD dirbase; /* Root directory start sector (Cluster# on FAT32) */ DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
DWORD database; /* Data start sector */ DWORD database; /* Data start sector */
DWORD winsect; /* Current sector appearing in the win[] */ DWORD winsect; /* Current sector appearing in the win[] */
BYTE win[_MAX_SS];/* Disk access window for Directory/FAT */ BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */
#if _FS_SHARE
FILESEM flsem[_FS_SHARE]; /* File lock semaphores */
#endif
} FATFS; } FATFS;
/* Directory object structure */ /* File object structure (FIL) */
typedef struct _DIR_ { typedef struct {
FATFS* fs; /* Pointer to the owner file system object */ FATFS* fs; /* Pointer to the owner file system object */
WORD id; /* Owner file system mount ID */ WORD id; /* Owner file system mount ID */
WORD index; /* Current read/write index number */ BYTE flag; /* File status flags */
DWORD sclust; /* Table start cluster (0:Static table) */ BYTE pad1;
DWORD clust; /* Current cluster */ DWORD fptr; /* File read/write pointer */
DWORD sect; /* Current sector */ DWORD fsize; /* File size */
BYTE* dir; /* Pointer to the current SFN entry in the win[] */ DWORD org_clust; /* File start cluster (0 when fsize==0) */
BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ DWORD curr_clust; /* Current cluster */
#if _USE_LFN DWORD dsect; /* Current data sector */
WCHAR* lfn; /* Pointer to the LFN working buffer */ #if !_FS_READONLY
WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ DWORD dir_sect; /* Sector containing the directory entry */
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
#endif #endif
} DIR; #if _USE_FASTSEEK
DWORD* cltbl; /* Pointer to the cluster link map table */
#endif
#if _FS_SHARE
UINT lockid; /* File lock ID */
#endif
#if !_FS_TINY
BYTE buf[_MAX_SS]; /* File data read/write buffer */
#endif
} FIL;
/* File object structure */ /* Directory object structure (DIR) */
typedef struct _FIL_ { typedef struct {
FATFS* fs; /* Pointer to the owner file system object */ FATFS* fs; /* Pointer to the owner file system object */
WORD id; /* Owner file system mount ID */ WORD id; /* Owner file system mount ID */
BYTE flag; /* File status flags */ WORD index; /* Current read/write index number */
BYTE csect; /* Sector address in the cluster */ DWORD sclust; /* Table start cluster (0:Root dir) */
DWORD fptr; /* File R/W pointer */ DWORD clust; /* Current cluster */
DWORD fsize; /* File size */ DWORD sect; /* Current sector */
DWORD org_clust; /* File start cluster */ BYTE* dir; /* Pointer to the current SFN entry in the win[] */
DWORD curr_clust; /* Current cluster */ BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
DWORD dsect; /* Current data sector */ #if _USE_LFN
#if !_FS_READONLY WCHAR* lfn; /* Pointer to the LFN working buffer */
DWORD dir_sect; /* Sector containing the directory entry */ WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
#endif
#if !_FS_TINY
BYTE buf[_MAX_SS];/* File R/W buffer */
#endif #endif
} FIL; } DIR;
/* File status structure */ /* File status structure (FILINFO) */
typedef struct _FILINFO_ { typedef struct {
DWORD fsize; /* File size */ DWORD fsize; /* File size */
WORD fdate; /* Last modified date */ WORD fdate; /* Last modified date */
WORD ftime; /* Last modified time */ WORD ftime; /* Last modified time */
BYTE fattrib; /* Attribute */ BYTE fattrib; /* Attribute */
char fname[13]; /* Short file name (8.3 format) */ TCHAR fname[13]; /* Short file name (8.3 format) */
#if _USE_LFN #if _USE_LFN
XCHAR* lfname; /* Pointer to the LFN buffer */ TCHAR* lfname; /* Pointer to the LFN buffer */
int lfsize; /* Size of LFN buffer [chrs] */ int lfsize; /* Size of LFN buffer [chrs] */
#endif #endif
} FILINFO; } FILINFO;
@ -392,22 +387,25 @@ typedef struct _FILINFO_ {
/* File function return code (FRESULT) */ /* File function return code (FRESULT) */
typedef enum { typedef enum {
FR_OK = 0, /* 0 */ FR_OK = 0, /* (0) Succeeded */
FR_DISK_ERR, /* 1 */ FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
FR_INT_ERR, /* 2 */ FR_INT_ERR, /* (2) Assertion failed */
FR_NOT_READY, /* 3 */ FR_NOT_READY, /* (3) The physical drive cannot work */
FR_NO_FILE, /* 4 */ FR_NO_FILE, /* (4) Could not find the file */
FR_NO_PATH, /* 5 */ FR_NO_PATH, /* (5) Could not find the path */
FR_INVALID_NAME, /* 6 */ FR_INVALID_NAME, /* (6) The path name format is invalid */
FR_DENIED, /* 7 */ FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */
FR_EXIST, /* 8 */ FR_EXIST, /* (8) Acces denied due to prohibited access */
FR_INVALID_OBJECT, /* 9 */ FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
FR_WRITE_PROTECTED, /* 10 */ FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
FR_INVALID_DRIVE, /* 11 */ FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
FR_NOT_ENABLED, /* 12 */ FR_NOT_ENABLED, /* (12) The volume has no work area */
FR_NO_FILESYSTEM, /* 13 */ FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */
FR_MKFS_ABORTED, /* 14 */ FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
FR_TIMEOUT /* 15 */ FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */
} FRESULT; } FRESULT;
@ -416,66 +414,77 @@ typedef enum {
/* FatFs module application interface */ /* FatFs module application interface */
FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */
FRESULT f_open (FIL*, const XCHAR*, BYTE); /* Open or create a file */ FRESULT f_open (FIL*, const TCHAR*, BYTE); /* Open or create a file */
FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */ FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */
FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */
FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */ FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */
FRESULT f_close (FIL*); /* Close an open file object */ FRESULT f_close (FIL*); /* Close an open file object */
FRESULT f_opendir (DIR*, const XCHAR*); /* Open an existing directory */ FRESULT f_opendir (DIR*, const TCHAR*); /* Open an existing directory */
FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */ FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */
FRESULT f_stat (const XCHAR*, FILINFO*); /* Get file status */ FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */
FRESULT f_getfree (const XCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ #if !_FS_READONLY
FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */
FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */
FRESULT f_truncate (FIL*); /* Truncate file */ FRESULT f_truncate (FIL*); /* Truncate file */
FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
FRESULT f_unlink (const XCHAR*); /* Delete an existing file or directory */ FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
FRESULT f_mkdir (const XCHAR*); /* Create a new directory */ FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
FRESULT f_chmod (const XCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */
FRESULT f_utime (const XCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */
FRESULT f_rename (const XCHAR*, const XCHAR*); /* Rename/Move a file or directory */ FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
#endif
#if _USE_FORWARD
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */ #endif
FRESULT f_chdir (const XCHAR*); /* Change current directory */ #if _USE_MKFS
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
#endif
#if _FS_RPATH
FRESULT f_chdir (const TCHAR*); /* Change current directory */
FRESULT f_chdrive (BYTE); /* Change current drive */ FRESULT f_chdrive (BYTE); /* Change current drive */
#endif
#if _USE_STRFUNC #if _USE_STRFUNC
int f_putc (int, FIL*); /* Put a character to the file */ int f_putc (TCHAR, FIL*); /* Put a character to the file */
int f_puts (const char*, FIL*); /* Put a string to the file */ int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
int f_printf (FIL*, const char*, ...); /* Put a formatted string to the file */ int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
char* f_gets (char*, int, FIL*); /* Get a string from the file */ TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
#ifndef EOF #ifndef EOF
#define EOF -1 #define EOF (-1)
#endif #endif
#endif #endif
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
/* User defined functions */ /* Additional user defined functions */
/* Real time clock */ /* RTC function */
#if !_FS_READONLY #if !_FS_READONLY
DWORD get_fattime (void); /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ DWORD get_fattime (void);
/* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */
#endif #endif
/* Unicode - OEM code conversion */ /* Unicode support functions */
#if _USE_LFN #if _USE_LFN /* Unicode - OEM code conversion */
WCHAR ff_convert (WCHAR, UINT); WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */
WCHAR ff_wtoupper (WCHAR); WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */
#if _USE_LFN == 3 /* Memory functions */
void* ff_memalloc (UINT); /* Allocate memory block */
void ff_memfree (void*); /* Free memory block */
#endif
#endif #endif
/* Sync functions */ /* Sync functions */
#if _FS_REENTRANT #if _FS_REENTRANT
BOOL ff_cre_syncobj(BYTE, _SYNC_t*); int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */
BOOL ff_del_syncobj(_SYNC_t); int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
BOOL ff_req_grant(_SYNC_t); int ff_req_grant (_SYNC_t); /* Lock sync object */
void ff_rel_grant(_SYNC_t); void ff_rel_grant (_SYNC_t); /* Unlock sync object */
#endif #endif
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
/* Flags and offset address */ /* Flags and offset address */
@ -484,7 +493,9 @@ void ff_rel_grant(_SYNC_t);
#define FA_READ 0x01 #define FA_READ 0x01
#define FA_OPEN_EXISTING 0x00 #define FA_OPEN_EXISTING 0x00
#if _FS_READONLY == 0 #define FA__ERROR 0x80
#if !_FS_READONLY
#define FA_WRITE 0x02 #define FA_WRITE 0x02
#define FA_CREATE_NEW 0x04 #define FA_CREATE_NEW 0x04
#define FA_CREATE_ALWAYS 0x08 #define FA_CREATE_ALWAYS 0x08
@ -492,7 +503,6 @@ void ff_rel_grant(_SYNC_t);
#define FA__WRITTEN 0x20 #define FA__WRITTEN 0x20
#define FA__DIRTY 0x40 #define FA__DIRTY 0x40
#endif #endif
#define FA__ERROR 0x80
/* FAT sub type (FATFS.fs_type) */ /* FAT sub type (FATFS.fs_type) */
@ -514,8 +524,12 @@ void ff_rel_grant(_SYNC_t);
#define AM_MASK 0x3F /* Mask of defined bits */ #define AM_MASK 0x3F /* Mask of defined bits */
/* FatFs refers the members in the FAT structures with byte offset instead /* Fast seek function */
/ of structure member because there are incompatibility of the packing option #define CREATE_LINKMAP 0xFFFFFFFF
/* FatFs refers the members in the FAT structures with byte offset instead of
/ structure member because there are incompatibility of the packing option
/ between various compilers. */ / between various compilers. */
#define BS_jmpBoot 0 #define BS_jmpBoot 0
@ -592,5 +606,8 @@ void ff_rel_grant(_SYNC_t);
#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) #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)
#endif #endif
#ifdef __cplusplus
}
#endif
#endif /* _FATFS */ #endif /* _FATFS */

@ -1,26 +1,26 @@
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ FatFs - FAT file system module configuration file R0.07e (C)ChaN, 2010 / FatFs - FAT file system module configuration file R0.08 (C)ChaN, 2010
/----------------------------------------------------------------------------/ /----------------------------------------------------------------------------/
/ /
/ CAUTION! Do not forget to make clean the project after any changes to / CAUTION! Do not forget to make clean the project after any changes to
/ the configuration options. / the configuration options.
/ /
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#ifndef _FFCONFIG #ifndef _FFCONF
#define _FFCONFIG 0x007E #define _FFCONF 8085 /* Revision ID */
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ Function and Buffer Configurations / Function and Buffer Configurations
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#define _FS_TINY 1 /* 0 or 1 */ #define _FS_TINY 1 /* 0:Normal or 1:Tiny */
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system /* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
/ object instead of the sector buffer in the individual file object for file / object instead of the sector buffer in the individual file object for file
/ data transfer. This reduces memory consumption 512 bytes each file object. */ / data transfer. This reduces memory consumption 512 bytes each file object. */
#define _FS_READONLY 0 /* 0 or 1 */ #define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
/* Setting _FS_READONLY to 1 defines read only configuration. This removes /* Setting _FS_READONLY to 1 defines read only configuration. This removes
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, / writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
/ f_truncate and useless f_getfree. */ / f_truncate and useless f_getfree. */
@ -36,18 +36,22 @@
/ 3: f_lseek is removed in addition to level 2. */ / 3: f_lseek is removed in addition to level 2. */
#define _USE_STRFUNC 0 /* 0, 1 or 2 */ #define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */ /* To enable string functions, set _USE_STRFUNC to 1 or 2. */
#define _USE_MKFS 0 /* 0 or 1 */ #define _USE_MKFS 0 /* 0:Disable or 1:Enable */
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */ /* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
#define _USE_FORWARD 0 /* 0 or 1 */ #define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */ /* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ Locale and Namespace Configurations / Locale and Namespace Configurations
@ -86,26 +90,27 @@
*/ */
#define _USE_LFN 0 /* 0, 1 or 2 */ #define _USE_LFN 0 /* 0 to 3 */
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */ #define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN support. /* The _USE_LFN option switches the LFN support.
/ /
/ 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect. / 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect.
/ 1: Enable LFN with static working buffer on the bss. NOT REENTRANT. / 1: Enable LFN with static working buffer on the bss. NOT REENTRANT.
/ 2: Enable LFN with dynamic working buffer on the STACK. / 2: Enable LFN with dynamic working buffer on the STACK.
/ 3: Enable LFN with dynamic working buffer on the HEAP.
/ /
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN, / The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN,
/ two Unicode handling functions ff_convert() and ff_wtoupper() must be added / Unicode handling functions ff_convert() and ff_wtoupper() must be added
/ to the project. */ / to the project. When enable to use heap, memory control functions
/ ff_memalloc() and ff_memfree() must be added to the project. */
#define _LFN_UNICODE 0 /* 0 or 1 */ #define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
/* To switch the character code set on FatFs API to Unicode, /* To switch the character code set on FatFs API to Unicode,
/ enable LFN feature and set _LFN_UNICODE to 1. / enable LFN feature and set _LFN_UNICODE to 1. */
*/
#define _FS_RPATH 0 /* 0 or 1 */ #define _FS_RPATH 0 /* 0:Disable or 1:Enable */
/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir, /* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir,
/ f_chdrive function are available. / f_chdrive function are available.
/ Note that output of the f_readdir fnction is affected by this option. */ / Note that output of the f_readdir fnction is affected by this option. */
@ -128,7 +133,7 @@
/ to the disk_ioctl function. */ / to the disk_ioctl function. */
#define _MULTI_PARTITION 0 /* 0 or 1 */ #define _MULTI_PARTITION 0 /* 0:Single parition or 1:Multiple partition */
/* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical /* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical
/ drive number and can mount only first primaly partition. When it is set to 1, / drive number and can mount only first primaly partition. When it is set to 1,
/ each volume is tied to the partitions listed in Drives[]. */ / each volume is tied to the partitions listed in Drives[]. */
@ -140,21 +145,24 @@
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#define _WORD_ACCESS 1 /* 0 or 1 */ #define _WORD_ACCESS 1 /* 0 or 1 */
/* The _WORD_ACCESS option defines which access method is used to the word /* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
/ data on the FAT volume. / option defines which access method is used to the word data on the FAT volume.
/ /
/ 0: Byte-by-byte access. Always compatible with all platforms. / 0: Byte-by-byte access.
/ 1: Word access. Do not choose this unless following condition is met. / 1: Word access. Do not choose this unless following condition is met.
/ /
/ When the byte order on the memory is big-endian or address miss-aligned / When the byte order on the memory is big-endian or address miss-aligned word
/ word access results incorrect behavior, the _WORD_ACCESS must be set to 0. / access results incorrect behavior, the _WORD_ACCESS must be set to 0.
/ If it is not the case, the value can also be set to 1 to improve the / If it is not the case, the value can also be set to 1 to improve the
/ performance and code size. */ / performance and code size. */
#define _FS_REENTRANT 0 /* 0 or 1 */ #define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ #define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ #define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
/* Include a header file here to define O/S system calls */
/* #include <windows.h>, <ucos_ii.h.h>, <semphr.h> or ohters. */
/* The _FS_REENTRANT option switches the reentrancy of the FatFs module. /* The _FS_REENTRANT option switches the reentrancy of the FatFs module.
/ /
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect. / 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
@ -163,4 +171,11 @@
/ function must be added to the project. */ / function must be added to the project. */
#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */
/* To enable file shareing feature, set _FS_SHARE to >= 1 and also user
provided memory handlers, ff_memalloc and ff_memfree function must be
added to the project. The value defines number of files can be opened
per volume. */
#endif /* _FFCONFIG */ #endif /* _FFCONFIG */

@ -3,17 +3,21 @@
/*-------------------------------------------*/ /*-------------------------------------------*/
#ifndef _INTEGER #ifndef _INTEGER
#define _INTEGER
#ifdef _WIN32 /* FatFs development platform */
#if 0
#include <windows.h> #include <windows.h>
#else #include <tchar.h>
#else /* Embedded platform */
/* These types must be 16-bit, 32-bit or larger integer */ /* These types must be 16-bit, 32-bit or larger integer */
typedef int INT; typedef int INT;
typedef unsigned int UINT; typedef unsigned int UINT;
/* These types must be 8-bit integer */ /* These types must be 8-bit integer */
typedef signed char CHAR; typedef char CHAR;
typedef unsigned char UCHAR; typedef unsigned char UCHAR;
typedef unsigned char BYTE; typedef unsigned char BYTE;
@ -28,10 +32,8 @@ typedef long LONG;
typedef unsigned long ULONG; typedef unsigned long ULONG;
typedef unsigned long DWORD; typedef unsigned long DWORD;
/* Boolean type */ typedef unsigned char BOOL;
typedef enum { FALSE = 0, TRUE } BOOL;
#endif #endif
#define _INTEGER
#endif #endif

@ -81,7 +81,7 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =
}; };
/** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */ /** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */
uint8_t EEMEM LoggingInterval500MS_EEPROM; uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL;
/** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */ /** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */
uint8_t LoggingInterval500MS_SRAM; uint8_t LoggingInterval500MS_SRAM;
@ -141,6 +141,10 @@ int main(void)
/* Fetch logging interval from EEPROM */ /* Fetch logging interval from EEPROM */
LoggingInterval500MS_SRAM = eeprom_read_byte(&LoggingInterval500MS_EEPROM); LoggingInterval500MS_SRAM = eeprom_read_byte(&LoggingInterval500MS_EEPROM);
/* Check if the logging interval is invalid (0xFF) indicating that the EEPROM is blank */
if (LoggingInterval500MS_SRAM == 0xFF)
LoggingInterval500MS_SRAM = DEFAULT_LOG_INTERVAL;
/* Mount and open the log file on the dataflash FAT partition */ /* Mount and open the log file on the dataflash FAT partition */
OpenLogFile(); OpenLogFile();
@ -266,11 +270,12 @@ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSI
/** HID class driver callback function for the creation of HID reports to the host. /** HID class driver callback function for the creation of HID reports to the host.
* *
* \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
* \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID * \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the
* \param[in] ReportType Type of the report to create, either REPORT_ITEM_TYPE_In or REPORT_ITEM_TYPE_Feature * generated report ID
* \param[out] ReportData Pointer to a buffer where the created report should be stored * \param[in] ReportType Type of the report to create, either REPORT_ITEM_TYPE_In or REPORT_ITEM_TYPE_Feature
* \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent * \param[out] ReportData Pointer to a buffer where the created report should be stored
* \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent
* *
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent * \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent
*/ */
@ -291,7 +296,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
/** HID class driver callback function for the processing of HID reports from the host. /** HID class driver callback function for the processing of HID reports from the host.
* *
* \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced
* \param[in] ReportID Report ID of the received report from the host * \param[in] ReportID Report ID of the received report from the host
* \param[in] ReportType The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature * \param[in] ReportType The type of report that the host has sent, either REPORT_ITEM_TYPE_Out or REPORT_ITEM_TYPE_Feature
* \param[in] ReportData Pointer to a buffer where the created report has been stored * \param[in] ReportData Pointer to a buffer where the created report has been stored
* \param[in] ReportSize Size in bytes of the received HID report * \param[in] ReportSize Size in bytes of the received HID report

@ -77,8 +77,8 @@
/** Filename for the log data when written to the dataflash FAT filesystem. */ /** Filename for the log data when written to the dataflash FAT filesystem. */
#define LOG_FILENAME "TEMPLOG.txt" #define LOG_FILENAME "TEMPLOG.txt"
/** Data log interval between samples, in tens of milliseconds. */ /** Default log interval when the EEPROM is blank, in 500ms ticks. */
#define LOG_INTERVAL_10MS 1000 #define DEFAULT_LOG_INTERVAL 20
/* Type Defines: */ /* Type Defines: */
typedef struct typedef struct

@ -194,6 +194,7 @@ CSTANDARD = -std=gnu99
# Place -D or -U options here for C sources # Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) $(LUFA_OPTS) CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD) $(LUFA_OPTS)
CDEFS += -DDUMMY_RTC CDEFS += -DDUMMY_RTC
CDEFS += -DLOG_WHILE_USB_CONNECTED
# Place -D or -U options here for ASM sources # Place -D or -U options here for ASM sources

@ -1,4 +1,4 @@
FatFs Module Source Files R0.07e (C)ChaN, 2010 FatFs Module Source Files R0.08 (C)ChaN, 2010
FILES FILES
@ -84,7 +84,7 @@ REVISION HISTORY
Added string functions: fputc(), fputs(), fprintf() and fgets(). Added string functions: fputc(), fputs(), fprintf() and fgets().
Improved performance of f_lseek() on move to the same or following cluster. Improved performance of f_lseek() on move to the same or following cluster.
Apr 01, 2010, R0.07 Merged Tiny-FatFs as a buffer configuration option. Apr 01, 2009, R0.07 Merged Tiny-FatFs as a buffer configuration option.
Added long file name support. Added long file name support.
Added multiple code page support. Added multiple code page support.
Added re-entrancy for multitask operation. Added re-entrancy for multitask operation.
@ -93,18 +93,25 @@ REVISION HISTORY
Changed result code of critical errors. Changed result code of critical errors.
Renamed string functions to avoid name collision. Renamed string functions to avoid name collision.
Apr 14, 2010, R0.07a Separated out OS dependent code on reentrant cfg. Apr 14, 2009, R0.07a Separated out OS dependent code on reentrant cfg.
Added multiple sector size support. Added multiple sector size support.
Jun 21, 2010, R0.07c Fixed f_unlink() may return FR_OK on error. Jun 21, 2009, R0.07c Fixed f_unlink() may return FR_OK on error.
Fixed wrong cache control in f_lseek(). Fixed wrong cache control in f_lseek().
Added relative path feature. Added relative path feature.
Added f_chdir(). Added f_chdir().
Added f_chdrive(). Added f_chdrive().
Added proper case conversion for extended characters. Added proper case conversion for extended characters.
Nov 03,'2010 R0.07e Separated out configuration options from ff.h to ffconf.h. Nov 03, 2009 R0.07e Separated out configuration options from ff.h to ffconf.h.
Added a configuration option, _LFN_UNICODE. Added a configuration option, _LFN_UNICODE.
Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH.
Fixed name matching error on the 13 char boundary. Fixed name matching error on the 13 char boundary.
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
May 15, 2010, R0.08 Added a memory configuration option. (_USE_LFN)
Added file lock feature. (_FS_SHARE)
Added fast seek feature. (_USE_FASTSEEK)
Changed some types on the API, XCHAR->TCHAR.
Changed fname member in the FILINFO structure on Unicode cfg.
String functions support UTF-8 encoding files on Unicode cfg.

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ FatFs - FAT file system module include file R0.07e (C)ChaN, 2010 / FatFs - FAT file system module include file R0.08 (C)ChaN, 2010
/----------------------------------------------------------------------------/ /----------------------------------------------------------------------------/
/ FatFs module is a generic FAT file system module for small embedded systems. / FatFs module is a generic FAT file system module for small embedded systems.
/ This is a free software that opened for education, research and commercial / This is a free software that opened for education, research and commercial
@ -11,15 +11,20 @@
/ * No restriction on use. You can use, modify and redistribute it for / * No restriction on use. You can use, modify and redistribute it for
/ personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. / personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
/ * Redistributions of source code must retain the above copyright notice. / * Redistributions of source code must retain the above copyright notice.
/
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#ifndef _FATFS #ifndef _FATFS
#define _FATFS 0x007E #define _FATFS 8085 /* Revision ID */
#ifdef __cplusplus
extern "C" {
#endif
#include "integer.h" /* Basic integer types */ #include "integer.h" /* Basic integer types */
#include "ffconf.h" /* FatFs configuration options */ #include "ffconf.h" /* FatFs configuration options */
#if _FATFS != _FFCONFIG #if _FATFS != _FFCONF
#error Wrong configuration file (ffconf.h). #error Wrong configuration file (ffconf.h).
#endif #endif
@ -219,50 +224,18 @@
/* Character code support macros */ /* Definitions corresponds to volume management */
#define IsUpper(c) (((c)>='A')&&((c)<='Z'))
#define IsLower(c) (((c)>='a')&&((c)<='z'))
#if _DF1S /* DBCS configuration */
#ifdef _DF2S /* Two 1st byte areas */
#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E))
#else /* One 1st byte area */
#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E)
#endif
#ifdef _DS3S /* Three 2nd byte areas */
#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E))
#else /* Two 2nd byte areas */
#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E))
#endif
#else /* SBCS configuration */
#define IsDBCS1(c) 0
#define IsDBCS2(c) 0
#endif /* _DF1S */
/* Definitions corresponds to multi partition */
#if _MULTI_PARTITION /* Multiple partition configuration */ #if _MULTI_PARTITION /* Multiple partition configuration */
#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */
typedef struct _PARTITION { #define LD2PT(drv) (Drives[drv].pt) /* Get partition# */
typedef struct {
BYTE pd; /* Physical drive# */ BYTE pd; /* Physical drive# */
BYTE pt; /* Partition # (0-3) */ BYTE pt; /* Partition # (0-3) */
} PARTITION; } PARTITION;
extern const PARTITION Drives[]; /* Logical drive# to physical location conversion table */
extern
const PARTITION Drives[]; /* Logical drive# to physical location conversion table */
#define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */
#define LD2PT(drv) (Drives[drv].pt) /* Get partition# */
#else /* Single partition configuration */ #else /* Single partition configuration */
#define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */ #define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */
#define LD2PT(drv) 0 /* Always mounts the 1st partition */ #define LD2PT(drv) 0 /* Always mounts the 1st partition */
@ -270,120 +243,142 @@ const PARTITION Drives[]; /* Logical drive# to physical location conversion ta
/* Definitions corresponds to multiple sector size */ /* Type of path name strings on FatFs API */
#if _MAX_SS == 512 /* Single sector size */ #if _LFN_UNICODE /* Unicode string */
#define SS(fs) 512U #if !_USE_LFN
#error _LFN_UNICODE must be 0 in non-LFN cfg.
#elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096 /* Multiple sector size */ #endif
#define SS(fs) ((fs)->s_size) #ifndef _INC_TCHAR
typedef WCHAR TCHAR;
#define _T(x) L ## x
#define _TEXT(x) L ## x
#endif
#else #else /* ANSI/OEM string */
#error Sector size must be 512, 1024, 2048 or 4096. #ifndef _INC_TCHAR
typedef char TCHAR;
#define _T(x) x
#define _TEXT(x) x
#endif
#endif #endif
/* Type of file name on FatFs API */ /* Definitions corresponds to file shareing feature */
#if _LFN_UNICODE && _USE_LFN #if _FS_SHARE
typedef WCHAR XCHAR; /* Unicode */ #if _FS_READONLY
#else #error _FS_SHARE must be 0 on R/O cfg.
typedef char XCHAR; /* SBCS, DBCS */ #endif
typedef struct {
DWORD clu; /* File ID 1, directory */
WORD idx; /* File ID 2, index in the directory */
WORD ctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:in write open */
} FILESEM;
#endif #endif
/* File system object structure */ /* File system object structure (FATFS) */
typedef struct _FATFS_ { typedef struct {
BYTE fs_type; /* FAT sub type */ BYTE fs_type; /* FAT sub-type (0:Not mounted) */
BYTE drive; /* Physical drive number */ BYTE drv; /* Physical drive number */
BYTE csize; /* Number of sectors per cluster */ BYTE csize; /* Sectors per cluster (1,2,4...128) */
BYTE n_fats; /* Number of FAT copies */ BYTE n_fats; /* Number of FAT copies (1,2) */
BYTE wflag; /* win[] dirty flag (1:must be written back) */ BYTE wflag; /* win[] dirty flag (1:must be written back) */
BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
WORD id; /* File system mount ID */ WORD id; /* File system mount ID */
WORD n_rootdir; /* Number of root directory entries (0 on FAT32) */ WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
#if _FS_REENTRANT
_SYNC_t sobj; /* Identifier of sync object */
#endif
#if _MAX_SS != 512 #if _MAX_SS != 512
WORD s_size; /* Sector size */ WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
#endif
#if _FS_REENTRANT
_SYNC_t sobj; /* Identifier of sync object */
#endif #endif
#if !_FS_READONLY #if !_FS_READONLY
DWORD last_clust; /* Last allocated cluster */ DWORD last_clust; /* Last allocated cluster */
DWORD free_clust; /* Number of free clusters */ DWORD free_clust; /* Number of free clusters */
DWORD fsi_sector; /* fsinfo sector */ DWORD fsi_sector; /* fsinfo sector (FAT32) */
#endif #endif
#if _FS_RPATH #if _FS_RPATH
DWORD cdir; /* Current directory (0:root)*/ DWORD cdir; /* Current directory start cluster (0:root) */
#endif #endif
DWORD sects_fat; /* Sectors per fat */ DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */
DWORD max_clust; /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */ DWORD fsize; /* Sectors per FAT */
DWORD fatbase; /* FAT start sector */ DWORD fatbase; /* FAT start sector */
DWORD dirbase; /* Root directory start sector (Cluster# on FAT32) */ DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
DWORD database; /* Data start sector */ DWORD database; /* Data start sector */
DWORD winsect; /* Current sector appearing in the win[] */ DWORD winsect; /* Current sector appearing in the win[] */
BYTE win[_MAX_SS];/* Disk access window for Directory/FAT */ BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */
#if _FS_SHARE
FILESEM flsem[_FS_SHARE]; /* File lock semaphores */
#endif
} FATFS; } FATFS;
/* Directory object structure */ /* File object structure (FIL) */
typedef struct _DIR_ { typedef struct {
FATFS* fs; /* Pointer to the owner file system object */ FATFS* fs; /* Pointer to the owner file system object */
WORD id; /* Owner file system mount ID */ WORD id; /* Owner file system mount ID */
WORD index; /* Current read/write index number */ BYTE flag; /* File status flags */
DWORD sclust; /* Table start cluster (0:Static table) */ BYTE pad1;
DWORD clust; /* Current cluster */ DWORD fptr; /* File read/write pointer */
DWORD sect; /* Current sector */ DWORD fsize; /* File size */
BYTE* dir; /* Pointer to the current SFN entry in the win[] */ DWORD org_clust; /* File start cluster (0 when fsize==0) */
BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ DWORD curr_clust; /* Current cluster */
#if _USE_LFN DWORD dsect; /* Current data sector */
WCHAR* lfn; /* Pointer to the LFN working buffer */ #if !_FS_READONLY
WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ DWORD dir_sect; /* Sector containing the directory entry */
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
#endif #endif
} DIR; #if _USE_FASTSEEK
DWORD* cltbl; /* Pointer to the cluster link map table */
#endif
#if _FS_SHARE
UINT lockid; /* File lock ID */
#endif
#if !_FS_TINY
BYTE buf[_MAX_SS]; /* File data read/write buffer */
#endif
} FIL;
/* File object structure */ /* Directory object structure (DIR) */
typedef struct _FIL_ { typedef struct {
FATFS* fs; /* Pointer to the owner file system object */ FATFS* fs; /* Pointer to the owner file system object */
WORD id; /* Owner file system mount ID */ WORD id; /* Owner file system mount ID */
BYTE flag; /* File status flags */ WORD index; /* Current read/write index number */
BYTE csect; /* Sector address in the cluster */ DWORD sclust; /* Table start cluster (0:Root dir) */
DWORD fptr; /* File R/W pointer */ DWORD clust; /* Current cluster */
DWORD fsize; /* File size */ DWORD sect; /* Current sector */
DWORD org_clust; /* File start cluster */ BYTE* dir; /* Pointer to the current SFN entry in the win[] */
DWORD curr_clust; /* Current cluster */ BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
DWORD dsect; /* Current data sector */ #if _USE_LFN
#if !_FS_READONLY WCHAR* lfn; /* Pointer to the LFN working buffer */
DWORD dir_sect; /* Sector containing the directory entry */ WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
#endif
#if !_FS_TINY
BYTE buf[_MAX_SS];/* File R/W buffer */
#endif #endif
} FIL; } DIR;
/* File status structure */ /* File status structure (FILINFO) */
typedef struct _FILINFO_ { typedef struct {
DWORD fsize; /* File size */ DWORD fsize; /* File size */
WORD fdate; /* Last modified date */ WORD fdate; /* Last modified date */
WORD ftime; /* Last modified time */ WORD ftime; /* Last modified time */
BYTE fattrib; /* Attribute */ BYTE fattrib; /* Attribute */
char fname[13]; /* Short file name (8.3 format) */ TCHAR fname[13]; /* Short file name (8.3 format) */
#if _USE_LFN #if _USE_LFN
XCHAR* lfname; /* Pointer to the LFN buffer */ TCHAR* lfname; /* Pointer to the LFN buffer */
int lfsize; /* Size of LFN buffer [chrs] */ int lfsize; /* Size of LFN buffer [chrs] */
#endif #endif
} FILINFO; } FILINFO;
@ -392,22 +387,25 @@ typedef struct _FILINFO_ {
/* File function return code (FRESULT) */ /* File function return code (FRESULT) */
typedef enum { typedef enum {
FR_OK = 0, /* 0 */ FR_OK = 0, /* (0) Succeeded */
FR_DISK_ERR, /* 1 */ FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
FR_INT_ERR, /* 2 */ FR_INT_ERR, /* (2) Assertion failed */
FR_NOT_READY, /* 3 */ FR_NOT_READY, /* (3) The physical drive cannot work */
FR_NO_FILE, /* 4 */ FR_NO_FILE, /* (4) Could not find the file */
FR_NO_PATH, /* 5 */ FR_NO_PATH, /* (5) Could not find the path */
FR_INVALID_NAME, /* 6 */ FR_INVALID_NAME, /* (6) The path name format is invalid */
FR_DENIED, /* 7 */ FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */
FR_EXIST, /* 8 */ FR_EXIST, /* (8) Acces denied due to prohibited access */
FR_INVALID_OBJECT, /* 9 */ FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
FR_WRITE_PROTECTED, /* 10 */ FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
FR_INVALID_DRIVE, /* 11 */ FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
FR_NOT_ENABLED, /* 12 */ FR_NOT_ENABLED, /* (12) The volume has no work area */
FR_NO_FILESYSTEM, /* 13 */ FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */
FR_MKFS_ABORTED, /* 14 */ FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
FR_TIMEOUT /* 15 */ FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */
} FRESULT; } FRESULT;
@ -416,66 +414,77 @@ typedef enum {
/* FatFs module application interface */ /* FatFs module application interface */
FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */
FRESULT f_open (FIL*, const XCHAR*, BYTE); /* Open or create a file */ FRESULT f_open (FIL*, const TCHAR*, BYTE); /* Open or create a file */
FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */ FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */
FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */
FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */ FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */
FRESULT f_close (FIL*); /* Close an open file object */ FRESULT f_close (FIL*); /* Close an open file object */
FRESULT f_opendir (DIR*, const XCHAR*); /* Open an existing directory */ FRESULT f_opendir (DIR*, const TCHAR*); /* Open an existing directory */
FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */ FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */
FRESULT f_stat (const XCHAR*, FILINFO*); /* Get file status */ FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */
FRESULT f_getfree (const XCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ #if !_FS_READONLY
FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */
FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */
FRESULT f_truncate (FIL*); /* Truncate file */ FRESULT f_truncate (FIL*); /* Truncate file */
FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
FRESULT f_unlink (const XCHAR*); /* Delete an existing file or directory */ FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
FRESULT f_mkdir (const XCHAR*); /* Create a new directory */ FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
FRESULT f_chmod (const XCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */
FRESULT f_utime (const XCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */
FRESULT f_rename (const XCHAR*, const XCHAR*); /* Rename/Move a file or directory */ FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
#endif
#if _USE_FORWARD
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */ #endif
FRESULT f_chdir (const XCHAR*); /* Change current directory */ #if _USE_MKFS
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
#endif
#if _FS_RPATH
FRESULT f_chdir (const TCHAR*); /* Change current directory */
FRESULT f_chdrive (BYTE); /* Change current drive */ FRESULT f_chdrive (BYTE); /* Change current drive */
#endif
#if _USE_STRFUNC #if _USE_STRFUNC
int f_putc (int, FIL*); /* Put a character to the file */ int f_putc (TCHAR, FIL*); /* Put a character to the file */
int f_puts (const char*, FIL*); /* Put a string to the file */ int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
int f_printf (FIL*, const char*, ...); /* Put a formatted string to the file */ int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
char* f_gets (char*, int, FIL*); /* Get a string from the file */ TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
#ifndef EOF #ifndef EOF
#define EOF -1 #define EOF (-1)
#endif #endif
#endif #endif
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
/* User defined functions */ /* Additional user defined functions */
/* Real time clock */ /* RTC function */
#if !_FS_READONLY #if !_FS_READONLY
DWORD get_fattime (void); /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ DWORD get_fattime (void);
/* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */
#endif #endif
/* Unicode - OEM code conversion */ /* Unicode support functions */
#if _USE_LFN #if _USE_LFN /* Unicode - OEM code conversion */
WCHAR ff_convert (WCHAR, UINT); WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */
WCHAR ff_wtoupper (WCHAR); WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */
#if _USE_LFN == 3 /* Memory functions */
void* ff_memalloc (UINT); /* Allocate memory block */
void ff_memfree (void*); /* Free memory block */
#endif
#endif #endif
/* Sync functions */ /* Sync functions */
#if _FS_REENTRANT #if _FS_REENTRANT
BOOL ff_cre_syncobj(BYTE, _SYNC_t*); int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */
BOOL ff_del_syncobj(_SYNC_t); int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
BOOL ff_req_grant(_SYNC_t); int ff_req_grant (_SYNC_t); /* Lock sync object */
void ff_rel_grant(_SYNC_t); void ff_rel_grant (_SYNC_t); /* Unlock sync object */
#endif #endif
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
/* Flags and offset address */ /* Flags and offset address */
@ -484,7 +493,9 @@ void ff_rel_grant(_SYNC_t);
#define FA_READ 0x01 #define FA_READ 0x01
#define FA_OPEN_EXISTING 0x00 #define FA_OPEN_EXISTING 0x00
#if _FS_READONLY == 0 #define FA__ERROR 0x80
#if !_FS_READONLY
#define FA_WRITE 0x02 #define FA_WRITE 0x02
#define FA_CREATE_NEW 0x04 #define FA_CREATE_NEW 0x04
#define FA_CREATE_ALWAYS 0x08 #define FA_CREATE_ALWAYS 0x08
@ -492,7 +503,6 @@ void ff_rel_grant(_SYNC_t);
#define FA__WRITTEN 0x20 #define FA__WRITTEN 0x20
#define FA__DIRTY 0x40 #define FA__DIRTY 0x40
#endif #endif
#define FA__ERROR 0x80
/* FAT sub type (FATFS.fs_type) */ /* FAT sub type (FATFS.fs_type) */
@ -514,8 +524,12 @@ void ff_rel_grant(_SYNC_t);
#define AM_MASK 0x3F /* Mask of defined bits */ #define AM_MASK 0x3F /* Mask of defined bits */
/* FatFs refers the members in the FAT structures with byte offset instead /* Fast seek function */
/ of structure member because there are incompatibility of the packing option #define CREATE_LINKMAP 0xFFFFFFFF
/* FatFs refers the members in the FAT structures with byte offset instead of
/ structure member because there are incompatibility of the packing option
/ between various compilers. */ / between various compilers. */
#define BS_jmpBoot 0 #define BS_jmpBoot 0
@ -592,5 +606,8 @@ void ff_rel_grant(_SYNC_t);
#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) #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)
#endif #endif
#ifdef __cplusplus
}
#endif
#endif /* _FATFS */ #endif /* _FATFS */

@ -1,26 +1,26 @@
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ FatFs - FAT file system module configuration file R0.07e (C)ChaN, 2010 / FatFs - FAT file system module configuration file R0.08 (C)ChaN, 2010
/----------------------------------------------------------------------------/ /----------------------------------------------------------------------------/
/ /
/ CAUTION! Do not forget to make clean the project after any changes to / CAUTION! Do not forget to make clean the project after any changes to
/ the configuration options. / the configuration options.
/ /
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#ifndef _FFCONFIG #ifndef _FFCONF
#define _FFCONFIG 0x007E #define _FFCONF 8085 /* Revision ID */
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ Function and Buffer Configurations / Function and Buffer Configurations
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#define _FS_TINY 1 /* 0 or 1 */ #define _FS_TINY 1 /* 0:Normal or 1:Tiny */
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system /* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
/ object instead of the sector buffer in the individual file object for file / object instead of the sector buffer in the individual file object for file
/ data transfer. This reduces memory consumption 512 bytes each file object. */ / data transfer. This reduces memory consumption 512 bytes each file object. */
#define _FS_READONLY 1 /* 0 or 1 */ #define _FS_READONLY 1 /* 0:Read/Write or 1:Read only */
/* Setting _FS_READONLY to 1 defines read only configuration. This removes /* Setting _FS_READONLY to 1 defines read only configuration. This removes
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, / writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
/ f_truncate and useless f_getfree. */ / f_truncate and useless f_getfree. */
@ -36,18 +36,22 @@
/ 3: f_lseek is removed in addition to level 2. */ / 3: f_lseek is removed in addition to level 2. */
#define _USE_STRFUNC 0 /* 0, 1 or 2 */ #define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */ /* To enable string functions, set _USE_STRFUNC to 1 or 2. */
#define _USE_MKFS 0 /* 0 or 1 */ #define _USE_MKFS 0 /* 0:Disable or 1:Enable */
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */ /* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
#define _USE_FORWARD 0 /* 0 or 1 */ #define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */ /* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
#define _USE_FASTSEEK 0 /* 0:Disable or 1:Enable */
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
/*---------------------------------------------------------------------------/ /*---------------------------------------------------------------------------/
/ Locale and Namespace Configurations / Locale and Namespace Configurations
@ -86,26 +90,27 @@
*/ */
#define _USE_LFN 0 /* 0, 1 or 2 */ #define _USE_LFN 0 /* 0 to 3 */
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */ #define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN support. /* The _USE_LFN option switches the LFN support.
/ /
/ 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect. / 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect.
/ 1: Enable LFN with static working buffer on the bss. NOT REENTRANT. / 1: Enable LFN with static working buffer on the bss. NOT REENTRANT.
/ 2: Enable LFN with dynamic working buffer on the STACK. / 2: Enable LFN with dynamic working buffer on the STACK.
/ 3: Enable LFN with dynamic working buffer on the HEAP.
/ /
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN, / The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN,
/ two Unicode handling functions ff_convert() and ff_wtoupper() must be added / Unicode handling functions ff_convert() and ff_wtoupper() must be added
/ to the project. */ / to the project. When enable to use heap, memory control functions
/ ff_memalloc() and ff_memfree() must be added to the project. */
#define _LFN_UNICODE 0 /* 0 or 1 */ #define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
/* To switch the character code set on FatFs API to Unicode, /* To switch the character code set on FatFs API to Unicode,
/ enable LFN feature and set _LFN_UNICODE to 1. / enable LFN feature and set _LFN_UNICODE to 1. */
*/
#define _FS_RPATH 0 /* 0 or 1 */ #define _FS_RPATH 0 /* 0:Disable or 1:Enable */
/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir, /* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir,
/ f_chdrive function are available. / f_chdrive function are available.
/ Note that output of the f_readdir fnction is affected by this option. */ / Note that output of the f_readdir fnction is affected by this option. */
@ -128,7 +133,7 @@
/ to the disk_ioctl function. */ / to the disk_ioctl function. */
#define _MULTI_PARTITION 0 /* 0 or 1 */ #define _MULTI_PARTITION 0 /* 0:Single parition or 1:Multiple partition */
/* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical /* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical
/ drive number and can mount only first primaly partition. When it is set to 1, / drive number and can mount only first primaly partition. When it is set to 1,
/ each volume is tied to the partitions listed in Drives[]. */ / each volume is tied to the partitions listed in Drives[]. */
@ -140,21 +145,24 @@
/----------------------------------------------------------------------------*/ /----------------------------------------------------------------------------*/
#define _WORD_ACCESS 1 /* 0 or 1 */ #define _WORD_ACCESS 1 /* 0 or 1 */
/* The _WORD_ACCESS option defines which access method is used to the word /* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
/ data on the FAT volume. / option defines which access method is used to the word data on the FAT volume.
/ /
/ 0: Byte-by-byte access. Always compatible with all platforms. / 0: Byte-by-byte access.
/ 1: Word access. Do not choose this unless following condition is met. / 1: Word access. Do not choose this unless following condition is met.
/ /
/ When the byte order on the memory is big-endian or address miss-aligned / When the byte order on the memory is big-endian or address miss-aligned word
/ word access results incorrect behavior, the _WORD_ACCESS must be set to 0. / access results incorrect behavior, the _WORD_ACCESS must be set to 0.
/ If it is not the case, the value can also be set to 1 to improve the / If it is not the case, the value can also be set to 1 to improve the
/ performance and code size. */ / performance and code size. */
#define _FS_REENTRANT 0 /* 0 or 1 */ #define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ #define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
#define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */ #define _SYNC_t HANDLE /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
/* Include a header file here to define O/S system calls */
/* #include <windows.h>, <ucos_ii.h.h>, <semphr.h> or ohters. */
/* The _FS_REENTRANT option switches the reentrancy of the FatFs module. /* The _FS_REENTRANT option switches the reentrancy of the FatFs module.
/ /
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect. / 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
@ -163,4 +171,11 @@
/ function must be added to the project. */ / function must be added to the project. */
#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */
/* To enable file shareing feature, set _FS_SHARE to >= 1 and also user
provided memory handlers, ff_memalloc and ff_memfree function must be
added to the project. The value defines number of files can be opened
per volume. */
#endif /* _FFCONFIG */ #endif /* _FFCONFIG */

@ -3,17 +3,21 @@
/*-------------------------------------------*/ /*-------------------------------------------*/
#ifndef _INTEGER #ifndef _INTEGER
#define _INTEGER
#ifdef _WIN32 /* FatFs development platform */
#if 0
#include <windows.h> #include <windows.h>
#else #include <tchar.h>
#else /* Embedded platform */
/* These types must be 16-bit, 32-bit or larger integer */ /* These types must be 16-bit, 32-bit or larger integer */
typedef int INT; typedef int INT;
typedef unsigned int UINT; typedef unsigned int UINT;
/* These types must be 8-bit integer */ /* These types must be 8-bit integer */
typedef signed char CHAR; typedef char CHAR;
typedef unsigned char UCHAR; typedef unsigned char UCHAR;
typedef unsigned char BYTE; typedef unsigned char BYTE;
@ -28,10 +32,8 @@ typedef long LONG;
typedef unsigned long ULONG; typedef unsigned long ULONG;
typedef unsigned long DWORD; typedef unsigned long DWORD;
/* Boolean type */ typedef unsigned char BOOL;
typedef enum { FALSE = 0, TRUE } BOOL;
#endif #endif
#define _INTEGER
#endif #endif

Loading…
Cancel
Save