forked from mfulz_github/qmk_firmware
Update FatFS library copies to the latest R0.09a version.
This commit is contained in:
parent
376160e2c0
commit
c4aeb6d5ab
|
@ -1,4 +1,4 @@
|
||||||
FatFs Module Source Files R0.08b (C)ChaN, 2011
|
FatFs Module Source Files R0.09a (C)ChaN, 2012
|
||||||
|
|
||||||
|
|
||||||
FILES
|
FILES
|
||||||
|
@ -7,7 +7,8 @@ FILES
|
||||||
ff.h Common include file for FatFs and application module.
|
ff.h Common include file for FatFs and application module.
|
||||||
ff.c FatFs module.
|
ff.c FatFs module.
|
||||||
diskio.h Common include file for FatFs and disk I/O module.
|
diskio.h Common include file for FatFs and disk I/O module.
|
||||||
integer.h Alternative type definitions for integer variables.
|
diskio.c An example of glue function to attach existing disk I/O module to FatFs.
|
||||||
|
integer.h Integer type definitions for FatFs.
|
||||||
option Optional external functions.
|
option Optional external functions.
|
||||||
|
|
||||||
Low level disk I/O module is not included in this archive because the FatFs
|
Low level disk I/O module is not included in this archive because the FatFs
|
||||||
|
@ -23,7 +24,7 @@ AGREEMENTS
|
||||||
small embedded systems. This is a free software and is opened for education,
|
small embedded systems. This is a free software and is opened for education,
|
||||||
research and commercial developments under license policy of following trems.
|
research and commercial developments under license policy of following trems.
|
||||||
|
|
||||||
Copyright (C) 2011, ChaN, all right reserved.
|
Copyright (C) 2012, ChaN, all right reserved.
|
||||||
|
|
||||||
* The FatFs module is a free software and there is NO WARRANTY.
|
* The FatFs module is a free software and there is NO WARRANTY.
|
||||||
* No restriction on use. You can use, modify and redistribute it for
|
* No restriction on use. You can use, modify and redistribute it for
|
||||||
|
@ -125,3 +126,10 @@ REVISION HISTORY
|
||||||
f_lseek() reports required table size on creating CLMP.
|
f_lseek() reports required table size on creating CLMP.
|
||||||
Extended format syntax of f_printf function.
|
Extended format syntax of f_printf function.
|
||||||
Ignores duplicated directory separators in given path names.
|
Ignores duplicated directory separators in given path names.
|
||||||
|
|
||||||
|
Sep 06,'11 R0.09 f_mkfs() supports multiple partition to finish the multiple partition feature.
|
||||||
|
Added f_fdisk(). (_MULTI_PARTITION = 2)
|
||||||
|
|
||||||
|
Aug 27,'12 R0.09a Fixed assertion failure due to OS/2 EA on FAT12/16.
|
||||||
|
Changed API rejects null object pointer to avoid crash.
|
||||||
|
Changed option name _FS_SHARE to _FS_LOCK.
|
||||||
|
|
|
@ -38,7 +38,7 @@ DRESULT disk_read (
|
||||||
BYTE drv, /* Physical drive number (0..) */
|
BYTE drv, /* Physical drive number (0..) */
|
||||||
BYTE *buff, /* Data buffer to store read data */
|
BYTE *buff, /* Data buffer to store read data */
|
||||||
DWORD sector, /* Sector address (LBA) */
|
DWORD sector, /* Sector address (LBA) */
|
||||||
BYTE count /* Number of sectors to read (1..255) */
|
BYTE count /* Number of sectors to read (1..128) */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DataflashManager_ReadBlocks_RAM(sector, count, buff);
|
DataflashManager_ReadBlocks_RAM(sector, count, buff);
|
||||||
|
@ -55,7 +55,7 @@ DRESULT disk_write (
|
||||||
BYTE drv, /* Physical drive number (0..) */
|
BYTE drv, /* Physical drive number (0..) */
|
||||||
const BYTE *buff, /* Data to be written */
|
const BYTE *buff, /* Data to be written */
|
||||||
DWORD sector, /* Sector address (LBA) */
|
DWORD sector, /* Sector address (LBA) */
|
||||||
BYTE count /* Number of sectors to write (1..255) */
|
BYTE count /* Number of sectors to write (1..128) */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DataflashManager_WriteBlocks_RAM(sector, count, buff);
|
DataflashManager_WriteBlocks_RAM(sector, count, buff);
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
/ Low level disk interface module include file
|
/ Low level disk interface module include file
|
||||||
/-----------------------------------------------------------------------*/
|
/-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef _DISKIO
|
#ifndef _DISKIO_DEFINED
|
||||||
|
#define _DISKIO_DEFINED
|
||||||
|
|
||||||
#define _READONLY 0 /* 1: Read-only mode */
|
#ifdef __cplusplus
|
||||||
#define _USE_IOCTL 1
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "integer.h"
|
#include "integer.h"
|
||||||
|
|
||||||
|
@ -45,23 +47,9 @@ DRESULT disk_ioctl (BYTE, BYTE, void*);
|
||||||
|
|
||||||
/* Generic command */
|
/* Generic command */
|
||||||
#define CTRL_SYNC 0 /* Mandatory for write functions */
|
#define CTRL_SYNC 0 /* Mandatory for write functions */
|
||||||
#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */
|
|
||||||
#define GET_SECTOR_SIZE 2 /* Mandatory for multiple sector size cfg */
|
|
||||||
#define GET_BLOCK_SIZE 3 /* Mandatory for only f_mkfs() */
|
|
||||||
#define CTRL_POWER 4
|
|
||||||
#define CTRL_LOCK 5
|
|
||||||
#define CTRL_EJECT 6
|
|
||||||
/* MMC/SDC command */
|
|
||||||
#define MMC_GET_TYPE 10
|
|
||||||
#define MMC_GET_CSD 11
|
|
||||||
#define MMC_GET_CID 12
|
|
||||||
#define MMC_GET_OCR 13
|
|
||||||
#define MMC_GET_SDSTAT 14
|
|
||||||
/* ATA/CF command */
|
|
||||||
#define ATA_GET_REV 20
|
|
||||||
#define ATA_GET_MODEL 21
|
|
||||||
#define ATA_GET_SN 22
|
|
||||||
|
|
||||||
#define _DISKIO
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,11 +1,11 @@
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module include file R0.08b (C)ChaN, 2011
|
/ FatFs - FAT file system module include file R0.09a (C)ChaN, 2012
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/ 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
|
||||||
/ developments under license policy of following terms.
|
/ developments under license policy of following terms.
|
||||||
/
|
/
|
||||||
/ Copyright (C) 2011, ChaN, all right reserved.
|
/ Copyright (C) 2012, ChaN, all right reserved.
|
||||||
/
|
/
|
||||||
/ * The FatFs module is a free software and there is NO WARRANTY.
|
/ * The FatFs module is a free software and there is NO WARRANTY.
|
||||||
/ * No restriction on use. You can use, modify and redistribute it for
|
/ * No restriction on use. You can use, modify and redistribute it for
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
/----------------------------------------------------------------------------*/
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef _FATFS
|
#ifndef _FATFS
|
||||||
#define _FATFS 8237 /* Revision ID */
|
#define _FATFS 4004 /* Revision ID */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -33,17 +33,17 @@ extern "C" {
|
||||||
/* Definitions of volume management */
|
/* Definitions of volume management */
|
||||||
|
|
||||||
#if _MULTI_PARTITION /* Multiple partition configuration */
|
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||||
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive# */
|
|
||||||
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition# */
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BYTE pd; /* Physical drive# */
|
BYTE pd; /* Physical drive number */
|
||||||
BYTE pt; /* Partition # (0-3) */
|
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||||
} PARTITION;
|
} PARTITION;
|
||||||
extern const PARTITION VolToPart[]; /* Volume - Physical location resolution table */
|
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||||
|
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||||
|
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||||
|
|
||||||
#else /* Single partition configuration */
|
#else /* Single partition configuration */
|
||||||
#define LD2PD(vol) (vol) /* Logical drive# is bound to the same physical drive# */
|
#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||||
#define LD2PT(vol) 0 /* Always mounts the 1st partition */
|
#define LD2PT(vol) 0 /* Always mounts the 1st partition or in SFD */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ typedef struct {
|
||||||
WORD id; /* File system mount ID */
|
WORD id; /* File system mount ID */
|
||||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||||
#if _MAX_SS != 512
|
#if _MAX_SS != 512
|
||||||
WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
|
WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
|
||||||
#endif
|
#endif
|
||||||
#if _FS_REENTRANT
|
#if _FS_REENTRANT
|
||||||
_SYNC_t sobj; /* Identifier of sync object */
|
_SYNC_t sobj; /* Identifier of sync object */
|
||||||
|
@ -111,24 +111,24 @@ typedef struct {
|
||||||
/* File object structure (FIL) */
|
/* File object structure (FIL) */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FATFS* fs; /* Pointer to the owner file system object */
|
FATFS* fs; /* Pointer to the related file system object */
|
||||||
WORD id; /* Owner file system mount ID */
|
WORD id; /* File system mount ID of the related file system object */
|
||||||
BYTE flag; /* File status flags */
|
BYTE flag; /* File status flags */
|
||||||
BYTE pad1;
|
BYTE pad1;
|
||||||
DWORD fptr; /* File read/write pointer (0 on file open) */
|
DWORD fptr; /* File read/write pointer (0ed on file open) */
|
||||||
DWORD fsize; /* File size */
|
DWORD fsize; /* File size */
|
||||||
DWORD sclust; /* File start cluster (0 when fsize==0) */
|
DWORD sclust; /* File data start cluster (0:no data cluster, always 0 when fsize is 0) */
|
||||||
DWORD clust; /* Current cluster */
|
DWORD clust; /* Current cluster of fpter */
|
||||||
DWORD dsect; /* Current data sector */
|
DWORD dsect; /* Current data sector of fpter */
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
DWORD dir_sect; /* Sector containing the directory entry */
|
DWORD dir_sect; /* Sector containing the directory entry */
|
||||||
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
|
BYTE* dir_ptr; /* Pointer to the directory entry in the window */
|
||||||
#endif
|
#endif
|
||||||
#if _USE_FASTSEEK
|
#if _USE_FASTSEEK
|
||||||
DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */
|
DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */
|
||||||
#endif
|
#endif
|
||||||
#if _FS_SHARE
|
#if _FS_LOCK
|
||||||
UINT lockid; /* File lock ID (index of file semaphore table) */
|
UINT lockid; /* File lock ID (index of file semaphore table Files[]) */
|
||||||
#endif
|
#endif
|
||||||
#if !_FS_TINY
|
#if !_FS_TINY
|
||||||
BYTE buf[_MAX_SS]; /* File data read/write buffer */
|
BYTE buf[_MAX_SS]; /* File data read/write buffer */
|
||||||
|
@ -176,24 +176,25 @@ typedef struct {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FR_OK = 0, /* (0) Succeeded */
|
FR_OK = 0, /* (0) Succeeded */
|
||||||
FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
|
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||||
FR_INT_ERR, /* (2) Assertion failed */
|
FR_INT_ERR, /* (2) Assertion failed */
|
||||||
FR_NOT_READY, /* (3) The physical drive cannot work */
|
FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||||
FR_NO_FILE, /* (4) Could not find the file */
|
FR_NO_FILE, /* (4) Could not find the file */
|
||||||
FR_NO_PATH, /* (5) Could not find the path */
|
FR_NO_PATH, /* (5) Could not find the path */
|
||||||
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||||
FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */
|
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||||
FR_EXIST, /* (8) Acces denied due to prohibited access */
|
FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||||
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */
|
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
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 sharing policy */
|
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||||
FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */
|
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */
|
||||||
|
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||||
} FRESULT;
|
} FRESULT;
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,27 +217,28 @@ FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
|
||||||
FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
|
FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
|
||||||
FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
|
FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
|
||||||
FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attribute of the file/dir */
|
FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attribute of the file/dir */
|
||||||
FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change time-stamp of the file/dir */
|
FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change times-tamp of the file/dir */
|
||||||
FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
|
FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
|
||||||
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
|
|
||||||
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
|
|
||||||
FRESULT f_chdrive (BYTE); /* Change current drive */
|
FRESULT f_chdrive (BYTE); /* Change current drive */
|
||||||
FRESULT f_chdir (const TCHAR*); /* Change current directory */
|
FRESULT f_chdir (const TCHAR*); /* Change current directory */
|
||||||
FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */
|
FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */
|
||||||
|
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
|
||||||
|
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
|
||||||
|
FRESULT f_fdisk (BYTE, const DWORD[], void*); /* Divide a physical drive into some partitions */
|
||||||
int f_putc (TCHAR, FIL*); /* Put a character to the file */
|
int f_putc (TCHAR, FIL*); /* Put a character to the file */
|
||||||
int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
|
int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
|
||||||
int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
|
int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
|
||||||
TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
|
TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
|
||||||
|
|
||||||
#ifndef EOF
|
|
||||||
#define EOF (-1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#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)
|
||||||
#define f_tell(fp) ((fp)->fptr)
|
#define f_tell(fp) ((fp)->fptr)
|
||||||
#define f_size(fp) ((fp)->fsize)
|
#define f_size(fp) ((fp)->fsize)
|
||||||
|
|
||||||
|
#ifndef EOF
|
||||||
|
#define EOF (-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -308,7 +310,7 @@ int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
|
||||||
#define AM_MASK 0x3F /* Mask of defined bits */
|
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||||
|
|
||||||
|
|
||||||
/* Fast seek function */
|
/* Fast seek feature */
|
||||||
#define CREATE_LINKMAP 0xFFFFFFFF
|
#define CREATE_LINKMAP 0xFFFFFFFF
|
||||||
|
|
||||||
|
|
||||||
|
@ -333,4 +335,3 @@ int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _FATFS */
|
#endif /* _FATFS */
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module configuration file R0.08b (C)ChaN, 2011
|
/ FatFs - FAT file system module configuration file R0.09a (C)ChaN, 2012
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/
|
/
|
||||||
/ 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
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
/
|
/
|
||||||
/----------------------------------------------------------------------------*/
|
/----------------------------------------------------------------------------*/
|
||||||
#ifndef _FFCONF
|
#ifndef _FFCONF
|
||||||
#define _FFCONF 8237 /* Revision ID */
|
#define _FFCONF 4004 /* Revision ID */
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
/ 3: f_lseek is removed in addition to 2. */
|
/ 3: f_lseek is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
#define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */
|
#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. */
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
|
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
|
||||||
|
|
||||||
|
|
||||||
#define _MULTI_PARTITION 0 /* 0:Single partition or 1:Multiple partition */
|
#define _MULTI_PARTITION 0 /* 0:Single partition, 1/2:Enable multiple partition */
|
||||||
/* When set to 0, each volume is bound to the same physical drive number and
|
/* When set to 0, each volume is bound to the same physical drive number and
|
||||||
/ it can mount only first primaly partition. When it is set to 1, each volume
|
/ it can mount only first primaly partition. When it is set to 1, each volume
|
||||||
/ is tied to the partitions listed in VolToPart[]. */
|
/ is tied to the partitions listed in VolToPart[]. */
|
||||||
|
@ -163,7 +163,8 @@
|
||||||
/ When the byte order on the memory is big-endian or address miss-aligned word
|
/ When the byte order on the memory is big-endian or address miss-aligned 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* A header file that defines sync object types on the O/S, such as
|
/* A header file that defines sync object types on the O/S, such as
|
||||||
|
@ -181,9 +182,9 @@
|
||||||
/ function must be added to the project. */
|
/ function must be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */
|
#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
|
||||||
/* To enable file shareing feature, set _FS_SHARE to 1 or greater. The value
|
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
|
||||||
defines how many files can be opened simultaneously. */
|
The value defines how many files can be opened simultaneously. */
|
||||||
|
|
||||||
|
|
||||||
#endif /* _FFCONFIG */
|
#endif /* _FFCONFIG */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FatFs Module Source Files R0.08b (C)ChaN, 2011
|
FatFs Module Source Files R0.09a (C)ChaN, 2012
|
||||||
|
|
||||||
|
|
||||||
FILES
|
FILES
|
||||||
|
@ -7,7 +7,8 @@ FILES
|
||||||
ff.h Common include file for FatFs and application module.
|
ff.h Common include file for FatFs and application module.
|
||||||
ff.c FatFs module.
|
ff.c FatFs module.
|
||||||
diskio.h Common include file for FatFs and disk I/O module.
|
diskio.h Common include file for FatFs and disk I/O module.
|
||||||
integer.h Alternative type definitions for integer variables.
|
diskio.c An example of glue function to attach existing disk I/O module to FatFs.
|
||||||
|
integer.h Integer type definitions for FatFs.
|
||||||
option Optional external functions.
|
option Optional external functions.
|
||||||
|
|
||||||
Low level disk I/O module is not included in this archive because the FatFs
|
Low level disk I/O module is not included in this archive because the FatFs
|
||||||
|
@ -23,7 +24,7 @@ AGREEMENTS
|
||||||
small embedded systems. This is a free software and is opened for education,
|
small embedded systems. This is a free software and is opened for education,
|
||||||
research and commercial developments under license policy of following trems.
|
research and commercial developments under license policy of following trems.
|
||||||
|
|
||||||
Copyright (C) 2011, ChaN, all right reserved.
|
Copyright (C) 2012, ChaN, all right reserved.
|
||||||
|
|
||||||
* The FatFs module is a free software and there is NO WARRANTY.
|
* The FatFs module is a free software and there is NO WARRANTY.
|
||||||
* No restriction on use. You can use, modify and redistribute it for
|
* No restriction on use. You can use, modify and redistribute it for
|
||||||
|
@ -125,3 +126,10 @@ REVISION HISTORY
|
||||||
f_lseek() reports required table size on creating CLMP.
|
f_lseek() reports required table size on creating CLMP.
|
||||||
Extended format syntax of f_printf function.
|
Extended format syntax of f_printf function.
|
||||||
Ignores duplicated directory separators in given path names.
|
Ignores duplicated directory separators in given path names.
|
||||||
|
|
||||||
|
Sep 06,'11 R0.09 f_mkfs() supports multiple partition to finish the multiple partition feature.
|
||||||
|
Added f_fdisk(). (_MULTI_PARTITION = 2)
|
||||||
|
|
||||||
|
Aug 27,'12 R0.09a Fixed assertion failure due to OS/2 EA on FAT12/16.
|
||||||
|
Changed API rejects null object pointer to avoid crash.
|
||||||
|
Changed option name _FS_SHARE to _FS_LOCK.
|
||||||
|
|
|
@ -38,7 +38,7 @@ DRESULT disk_read (
|
||||||
BYTE drv, /* Physical drive number (0..) */
|
BYTE drv, /* Physical drive number (0..) */
|
||||||
BYTE *buff, /* Data buffer to store read data */
|
BYTE *buff, /* Data buffer to store read data */
|
||||||
DWORD sector, /* Sector address (LBA) */
|
DWORD sector, /* Sector address (LBA) */
|
||||||
BYTE count /* Number of sectors to read (1..255) */
|
BYTE count /* Number of sectors to read (1..128) */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DataflashManager_ReadBlocks_RAM(sector, count, buff);
|
DataflashManager_ReadBlocks_RAM(sector, count, buff);
|
||||||
|
@ -55,7 +55,7 @@ DRESULT disk_write (
|
||||||
BYTE drv, /* Physical drive number (0..) */
|
BYTE drv, /* Physical drive number (0..) */
|
||||||
const BYTE *buff, /* Data to be written */
|
const BYTE *buff, /* Data to be written */
|
||||||
DWORD sector, /* Sector address (LBA) */
|
DWORD sector, /* Sector address (LBA) */
|
||||||
BYTE count /* Number of sectors to write (1..255) */
|
BYTE count /* Number of sectors to write (1..128) */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DataflashManager_WriteBlocks_RAM(sector, count, buff);
|
DataflashManager_WriteBlocks_RAM(sector, count, buff);
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
/ Low level disk interface module include file
|
/ Low level disk interface module include file
|
||||||
/-----------------------------------------------------------------------*/
|
/-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef _DISKIO
|
#ifndef _DISKIO_DEFINED
|
||||||
|
#define _DISKIO_DEFINED
|
||||||
|
|
||||||
#define _READONLY 0 /* 1: Read-only mode */
|
#ifdef __cplusplus
|
||||||
#define _USE_IOCTL 0
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "integer.h"
|
#include "integer.h"
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
|
@ -32,9 +34,7 @@ typedef enum {
|
||||||
DSTATUS disk_initialize (BYTE);
|
DSTATUS disk_initialize (BYTE);
|
||||||
DSTATUS disk_status (BYTE);
|
DSTATUS disk_status (BYTE);
|
||||||
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
|
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
|
||||||
#if _READONLY == 0
|
|
||||||
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);
|
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);
|
||||||
#endif
|
|
||||||
DRESULT disk_ioctl (BYTE, BYTE, void*);
|
DRESULT disk_ioctl (BYTE, BYTE, void*);
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ DRESULT disk_ioctl (BYTE, BYTE, void*);
|
||||||
#define STA_PROTECT 0x04 /* Write protected */
|
#define STA_PROTECT 0x04 /* Write protected */
|
||||||
|
|
||||||
|
|
||||||
#define _DISKIO
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,11 +1,11 @@
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module include file R0.08b (C)ChaN, 2011
|
/ FatFs - FAT file system module include file R0.09a (C)ChaN, 2012
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/ 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
|
||||||
/ developments under license policy of following terms.
|
/ developments under license policy of following terms.
|
||||||
/
|
/
|
||||||
/ Copyright (C) 2011, ChaN, all right reserved.
|
/ Copyright (C) 2012, ChaN, all right reserved.
|
||||||
/
|
/
|
||||||
/ * The FatFs module is a free software and there is NO WARRANTY.
|
/ * The FatFs module is a free software and there is NO WARRANTY.
|
||||||
/ * No restriction on use. You can use, modify and redistribute it for
|
/ * No restriction on use. You can use, modify and redistribute it for
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
/----------------------------------------------------------------------------*/
|
/----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef _FATFS
|
#ifndef _FATFS
|
||||||
#define _FATFS 8237 /* Revision ID */
|
#define _FATFS 4004 /* Revision ID */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -33,17 +33,17 @@ extern "C" {
|
||||||
/* Definitions of volume management */
|
/* Definitions of volume management */
|
||||||
|
|
||||||
#if _MULTI_PARTITION /* Multiple partition configuration */
|
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||||
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive# */
|
|
||||||
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition# */
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BYTE pd; /* Physical drive# */
|
BYTE pd; /* Physical drive number */
|
||||||
BYTE pt; /* Partition # (0-3) */
|
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||||
} PARTITION;
|
} PARTITION;
|
||||||
extern const PARTITION VolToPart[]; /* Volume - Physical location resolution table */
|
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||||
|
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||||
|
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||||
|
|
||||||
#else /* Single partition configuration */
|
#else /* Single partition configuration */
|
||||||
#define LD2PD(vol) (vol) /* Logical drive# is bound to the same physical drive# */
|
#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||||
#define LD2PT(vol) 0 /* Always mounts the 1st partition */
|
#define LD2PT(vol) 0 /* Always mounts the 1st partition or in SFD */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ typedef struct {
|
||||||
WORD id; /* File system mount ID */
|
WORD id; /* File system mount ID */
|
||||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||||
#if _MAX_SS != 512
|
#if _MAX_SS != 512
|
||||||
WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
|
WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
|
||||||
#endif
|
#endif
|
||||||
#if _FS_REENTRANT
|
#if _FS_REENTRANT
|
||||||
_SYNC_t sobj; /* Identifier of sync object */
|
_SYNC_t sobj; /* Identifier of sync object */
|
||||||
|
@ -111,24 +111,24 @@ typedef struct {
|
||||||
/* File object structure (FIL) */
|
/* File object structure (FIL) */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
FATFS* fs; /* Pointer to the owner file system object */
|
FATFS* fs; /* Pointer to the related file system object */
|
||||||
WORD id; /* Owner file system mount ID */
|
WORD id; /* File system mount ID of the related file system object */
|
||||||
BYTE flag; /* File status flags */
|
BYTE flag; /* File status flags */
|
||||||
BYTE pad1;
|
BYTE pad1;
|
||||||
DWORD fptr; /* File read/write pointer (0 on file open) */
|
DWORD fptr; /* File read/write pointer (0ed on file open) */
|
||||||
DWORD fsize; /* File size */
|
DWORD fsize; /* File size */
|
||||||
DWORD sclust; /* File start cluster (0 when fsize==0) */
|
DWORD sclust; /* File data start cluster (0:no data cluster, always 0 when fsize is 0) */
|
||||||
DWORD clust; /* Current cluster */
|
DWORD clust; /* Current cluster of fpter */
|
||||||
DWORD dsect; /* Current data sector */
|
DWORD dsect; /* Current data sector of fpter */
|
||||||
#if !_FS_READONLY
|
#if !_FS_READONLY
|
||||||
DWORD dir_sect; /* Sector containing the directory entry */
|
DWORD dir_sect; /* Sector containing the directory entry */
|
||||||
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
|
BYTE* dir_ptr; /* Pointer to the directory entry in the window */
|
||||||
#endif
|
#endif
|
||||||
#if _USE_FASTSEEK
|
#if _USE_FASTSEEK
|
||||||
DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */
|
DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */
|
||||||
#endif
|
#endif
|
||||||
#if _FS_SHARE
|
#if _FS_LOCK
|
||||||
UINT lockid; /* File lock ID (index of file semaphore table) */
|
UINT lockid; /* File lock ID (index of file semaphore table Files[]) */
|
||||||
#endif
|
#endif
|
||||||
#if !_FS_TINY
|
#if !_FS_TINY
|
||||||
BYTE buf[_MAX_SS]; /* File data read/write buffer */
|
BYTE buf[_MAX_SS]; /* File data read/write buffer */
|
||||||
|
@ -188,12 +188,13 @@ typedef enum {
|
||||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */
|
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
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 sharing policy */
|
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||||
FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */
|
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */
|
||||||
|
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||||
} FRESULT;
|
} FRESULT;
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,27 +217,28 @@ FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
|
||||||
FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
|
FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
|
||||||
FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
|
FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
|
||||||
FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attribute of the file/dir */
|
FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attribute of the file/dir */
|
||||||
FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change time-stamp of the file/dir */
|
FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change times-tamp of the file/dir */
|
||||||
FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
|
FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
|
||||||
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
|
|
||||||
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
|
|
||||||
FRESULT f_chdrive (BYTE); /* Change current drive */
|
FRESULT f_chdrive (BYTE); /* Change current drive */
|
||||||
FRESULT f_chdir (const TCHAR*); /* Change current directory */
|
FRESULT f_chdir (const TCHAR*); /* Change current directory */
|
||||||
FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */
|
FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */
|
||||||
|
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
|
||||||
|
FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
|
||||||
|
FRESULT f_fdisk (BYTE, const DWORD[], void*); /* Divide a physical drive into some partitions */
|
||||||
int f_putc (TCHAR, FIL*); /* Put a character to the file */
|
int f_putc (TCHAR, FIL*); /* Put a character to the file */
|
||||||
int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
|
int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
|
||||||
int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
|
int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
|
||||||
TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
|
TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
|
||||||
|
|
||||||
#ifndef EOF
|
|
||||||
#define EOF (-1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#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)
|
||||||
#define f_tell(fp) ((fp)->fptr)
|
#define f_tell(fp) ((fp)->fptr)
|
||||||
#define f_size(fp) ((fp)->fsize)
|
#define f_size(fp) ((fp)->fsize)
|
||||||
|
|
||||||
|
#ifndef EOF
|
||||||
|
#define EOF (-1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -308,7 +310,7 @@ int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
|
||||||
#define AM_MASK 0x3F /* Mask of defined bits */
|
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||||
|
|
||||||
|
|
||||||
/* Fast seek function */
|
/* Fast seek feature */
|
||||||
#define CREATE_LINKMAP 0xFFFFFFFF
|
#define CREATE_LINKMAP 0xFFFFFFFF
|
||||||
|
|
||||||
|
|
||||||
|
@ -333,4 +335,3 @@ int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _FATFS */
|
#endif /* _FATFS */
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
/ FatFs - FAT file system module configuration file R0.08b (C)ChaN, 2011
|
/ FatFs - FAT file system module configuration file R0.09a (C)ChaN, 2012
|
||||||
/----------------------------------------------------------------------------/
|
/----------------------------------------------------------------------------/
|
||||||
/
|
/
|
||||||
/ 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
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
/
|
/
|
||||||
/----------------------------------------------------------------------------*/
|
/----------------------------------------------------------------------------*/
|
||||||
#ifndef _FFCONF
|
#ifndef _FFCONF
|
||||||
#define _FFCONF 8237 /* Revision ID */
|
#define _FFCONF 4004 /* Revision ID */
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------/
|
/*---------------------------------------------------------------------------/
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
/ 3: f_lseek is removed in addition to 2. */
|
/ 3: f_lseek is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
#define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */
|
#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. */
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
/ and GET_SECTOR_SIZE command must be implemented to the disk_ioctl function. */
|
/ and GET_SECTOR_SIZE command must be implemented to the disk_ioctl function. */
|
||||||
|
|
||||||
|
|
||||||
#define _MULTI_PARTITION 0 /* 0:Single partition or 1:Multiple partition */
|
#define _MULTI_PARTITION 0 /* 0:Single partition, 1/2:Enable multiple partition */
|
||||||
/* When set to 0, each volume is bound to the same physical drive number and
|
/* When set to 0, each volume is bound to the same physical drive number and
|
||||||
/ it can mount only first primary partition. When it is set to 1, each volume
|
/ it can mount only first primary partition. When it is set to 1, each volume
|
||||||
/ is tied to the partitions listed in VolToPart[]. */
|
/ is tied to the partitions listed in VolToPart[]. */
|
||||||
|
@ -181,9 +181,9 @@
|
||||||
/ function must be added to the project. */
|
/ function must be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */
|
#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
|
||||||
/* To enable file sharing feature, set _FS_SHARE to 1 or greater. The value
|
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
|
||||||
defines how many files can be opened simultaneously. */
|
The value defines how many files can be opened simultaneously. */
|
||||||
|
|
||||||
|
|
||||||
#endif /* _FFCONFIG */
|
#endif /* _FFCONFIG */
|
||||||
|
|
Loading…
Reference in New Issue