Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of FatFileSystem by
Revision 4:d8cfad9dd1d2, committed 2013-01-30
- Comitter:
- atyeomans
- Date:
- Wed Jan 30 17:41:29 2013 +0000
- Parent:
- 3:333d6e93e58f
- Commit message:
- Added SDFileSystem
Changed in this revision
diff -r 333d6e93e58f -r d8cfad9dd1d2 FATFileSystem.h --- a/FATFileSystem.h Tue Jun 26 08:32:32 2012 +0000 +++ b/FATFileSystem.h Wed Jan 30 17:41:29 2013 +0000 @@ -31,31 +31,31 @@ class FATFileSystem : public FileSystemLike { public: - FATFileSystem(const char* n); - virtual ~FATFileSystem(); - - /* Function: open + FATFileSystem(const char* n); + virtual ~FATFileSystem(); + + /* Function: open * open a file on the filesystem. never called directly */ - virtual FileHandle *open(const char* name, int flags); - virtual int remove(const char *filename); - virtual int format(); + virtual FileHandle *open(const char* name, int flags); + virtual int remove(const char *filename); + virtual int format(); virtual DirHandle *opendir(const char *name); virtual int mkdir(const char *name, mode_t mode); - - FATFS _fs; // Work area (file system object) for logical drive - static FATFileSystem *_ffs[_DRIVES]; // FATFileSystem objects, as parallel to FatFs drives array - int _fsid; - - virtual int disk_initialize() { return 0; } - virtual int disk_status() { return 0; } - virtual int disk_read(char *buffer, int sector) = 0; - virtual int disk_write(const char *buffer, int sector) = 0; - virtual int disk_sync() { return 0; } - virtual int disk_sectors() = 0; - + + FATFS _fs; // Work area (file system object) for logical drive + static FATFileSystem *_ffs[_DRIVES]; // FATFileSystem objects, as parallel to FatFs drives array + int _fsid; + + virtual int disk_initialize() { return 0; } + virtual int disk_status() { return 0; } + virtual int disk_read(char *buffer, int sector) = 0; + virtual int disk_write(const char *buffer, int sector) = 0; + virtual int disk_sync() { return 0; } + virtual int disk_sectors() = 0; + }; - + } #endif
diff -r 333d6e93e58f -r d8cfad9dd1d2 diskio.h --- a/diskio.h Tue Jun 26 08:32:32 2012 +0000 +++ b/diskio.h Wed Jan 30 17:41:29 2013 +0000 @@ -4,8 +4,8 @@ #ifndef _DISKIO -#define _READONLY 0 /* 1: Read-only mode */ -#define _USE_IOCTL 1 +#define _READONLY 0 /* 1: Read-only mode */ +#define _USE_IOCTL 1 #include "integer.h" @@ -14,15 +14,15 @@ #endif /* Status of Disk Functions */ -typedef BYTE DSTATUS; +typedef BYTE DSTATUS; /* Results of Disk Functions */ typedef enum { - RES_OK = 0, /* 0: Successful */ - RES_ERROR, /* 1: R/W Error */ - RES_WRPRT, /* 2: Write Protected */ - RES_NOTRDY, /* 3: Not Ready */ - RES_PARERR /* 4: Invalid Parameter */ + RES_OK = 0, /* 0: Successful */ + RES_ERROR, /* 1: R/W Error */ + RES_WRPRT, /* 2: Write Protected */ + RES_NOTRDY, /* 3: Not Ready */ + RES_PARERR /* 4: Invalid Parameter */ } DRESULT; @@ -32,11 +32,11 @@ DSTATUS disk_initialize (BYTE); DSTATUS disk_status (BYTE); DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); -#if _READONLY == 0 +#if _READONLY == 0 DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); #endif DRESULT disk_ioctl (BYTE, BYTE, void*); -void disk_timerproc (void); +void disk_timerproc (void); #ifdef __cplusplus }; @@ -45,31 +45,31 @@ /* Disk Status Bits (DSTATUS) */ -#define STA_NOINIT 0x01 /* Drive not initialized */ -#define STA_NODISK 0x02 /* No medium in the drive */ -#define STA_PROTECT 0x04 /* Write protected */ +#define STA_NOINIT 0x01 /* Drive not initialized */ +#define STA_NODISK 0x02 /* No medium in the drive */ +#define STA_PROTECT 0x04 /* Write protected */ /* Command code for disk_ioctrl() */ /* Generic command */ -#define CTRL_SYNC 0 /* Mandatory for read/write configuration */ -#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */ -#define GET_SECTOR_SIZE 2 -#define GET_BLOCK_SIZE 3 /* Mandatory for only f_mkfs() */ -#define CTRL_POWER 4 -#define CTRL_LOCK 5 -#define CTRL_EJECT 6 +#define CTRL_SYNC 0 /* Mandatory for read/write configuration */ +#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */ +#define GET_SECTOR_SIZE 2 +#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 +#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 ATA_GET_REV 20 +#define ATA_GET_MODEL 21 +#define ATA_GET_SN 22 #define _DISKIO
diff -r 333d6e93e58f -r d8cfad9dd1d2 ff.h --- a/ff.h Tue Jun 26 08:32:32 2012 +0000 +++ b/ff.h Wed Jan 30 17:41:29 2013 +0000 @@ -16,7 +16,7 @@ #ifndef _FATFS -#define _MCU_ENDIAN 2 +#define _MCU_ENDIAN 2 /* The _MCU_ENDIAN defines which access method is used to the FAT structure. / 1: Enable word access. / 2: Disable word access and use byte-by-byte access instead. @@ -24,41 +24,41 @@ / miss-aligned access results incorrect behavior, the _MCU_ENDIAN must be set to 2. / If it is not the case, it can also be set to 1 for good code efficiency. */ -#define _FS_READONLY 0 +#define _FS_READONLY 0 /* 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, / f_truncate and useless f_getfree. */ -#define _FS_MINIMIZE 0 +#define _FS_MINIMIZE 0 /* The _FS_MINIMIZE option defines minimization level to remove some functions. / 0: Full function. / 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename are removed. / 2: f_opendir and f_readdir are removed in addition to level 1. / 3: f_lseek is removed in addition to level 2. */ -#define _USE_STRFUNC 0 +#define _USE_STRFUNC 0 /* To enable string functions, set _USE_STRFUNC to 1 or 2. */ -#define _USE_MKFS 1 +#define _USE_MKFS 1 /* When _USE_MKFS is set to 1 and _FS_READONLY is set to 0, f_mkfs function is / enabled. */ -#define _DRIVES 4 +#define _DRIVES 4 /* Number of logical drives to be used. This affects the size of internal table. */ -#define _MULTI_PARTITION 0 +#define _MULTI_PARTITION 0 /* When _MULTI_PARTITION is set to 0, each logical drive is bound to same / physical drive number and can mount only 1st primaly partition. When it is / set to 1, each logical drive can mount a partition listed in Drives[]. */ -#define _USE_FSINFO 0 +#define _USE_FSINFO 0 /* To enable FSInfo support on FAT32 volume, set _USE_FSINFO to 1. */ -#define _USE_SJIS 1 +#define _USE_SJIS 1 /* When _USE_SJIS is set to 1, Shift-JIS code transparency is enabled, otherwise / only US-ASCII(7bit) code can be accepted as file/directory name. */ -#define _USE_NTFLAG 1 +#define _USE_NTFLAG 1 /* When _USE_NTFLAG is set to 1, upper/lower case of the file name is preserved. / Note that the files are always accessed in case insensitive. */ @@ -70,104 +70,104 @@ #endif /* Definitions corresponds to multiple sector size (not tested) */ -#define S_MAX_SIZ 512U /* Do not change */ +#define S_MAX_SIZ 512U /* Do not change */ #if S_MAX_SIZ > 512U -#define SS(fs) ((fs)->s_size) +#define SS(fs) ((fs)->s_size) #else -#define SS(fs) 512U +#define SS(fs) 512U #endif /* File system object structure */ typedef struct _FATFS { - WORD id; /* File system mount ID */ - WORD n_rootdir; /* Number of root directory entries */ - DWORD winsect; /* Current sector appearing in the win[] */ - DWORD sects_fat; /* Sectors per fat */ - DWORD max_clust; /* Maximum cluster# + 1 */ - DWORD fatbase; /* FAT start sector */ - DWORD dirbase; /* Root directory start sector (cluster# for FAT32) */ - DWORD database; /* Data start sector */ + WORD id; /* File system mount ID */ + WORD n_rootdir; /* Number of root directory entries */ + DWORD winsect; /* Current sector appearing in the win[] */ + DWORD sects_fat; /* Sectors per fat */ + DWORD max_clust; /* Maximum cluster# + 1 */ + DWORD fatbase; /* FAT start sector */ + DWORD dirbase; /* Root directory start sector (cluster# for FAT32) */ + DWORD database; /* Data start sector */ #if !_FS_READONLY - DWORD last_clust; /* Last allocated cluster */ - DWORD free_clust; /* Number of free clusters */ + DWORD last_clust; /* Last allocated cluster */ + DWORD free_clust; /* Number of free clusters */ #if _USE_FSINFO - DWORD fsi_sector; /* fsinfo sector */ - BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ - BYTE pad2; + DWORD fsi_sector; /* fsinfo sector */ + BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ + BYTE pad2; #endif #endif - BYTE fs_type; /* FAT sub type */ - BYTE csize; /* Number of sectors per cluster */ + BYTE fs_type; /* FAT sub type */ + BYTE csize; /* Number of sectors per cluster */ #if S_MAX_SIZ > 512U - WORD s_size; /* Sector size */ + WORD s_size; /* Sector size */ #endif - BYTE n_fats; /* Number of FAT copies */ - BYTE drive; /* Physical drive number */ - BYTE winflag; /* win[] dirty flag (1:must be written back) */ - BYTE pad1; - BYTE win[S_MAX_SIZ]; /* Disk access window for Directory/FAT */ + BYTE n_fats; /* Number of FAT copies */ + BYTE drive; /* Physical drive number */ + BYTE winflag; /* win[] dirty flag (1:must be written back) */ + BYTE pad1; + BYTE win[S_MAX_SIZ]; /* Disk access window for Directory/FAT */ } FATFS; /* Directory object structure */ typedef struct _DIR { - WORD id; /* Owner file system mount ID */ - WORD index; /* Current index */ - FATFS* fs; /* Pointer to the owner file system object */ - DWORD sclust; /* Start cluster */ - DWORD clust; /* Current cluster */ - DWORD sect; /* Current sector */ + WORD id; /* Owner file system mount ID */ + WORD index; /* Current index */ + FATFS* fs; /* Pointer to the owner file system object */ + DWORD sclust; /* Start cluster */ + DWORD clust; /* Current cluster */ + DWORD sect; /* Current sector */ } FATFS_DIR; /* File object structure */ typedef struct _FIL { - WORD id; /* Owner file system mount ID */ - BYTE flag; /* File status flags */ - BYTE csect; /* Sector address in the cluster */ - FATFS* fs; /* Pointer to the owner file system object */ - DWORD fptr; /* File R/W pointer */ - DWORD fsize; /* File size */ - DWORD org_clust; /* File start cluster */ - DWORD curr_clust; /* Current cluster */ - DWORD curr_sect; /* Current sector */ + WORD id; /* Owner file system mount ID */ + BYTE flag; /* File status flags */ + BYTE csect; /* Sector address in the cluster */ + FATFS* fs; /* Pointer to the owner file system object */ + DWORD fptr; /* File R/W pointer */ + DWORD fsize; /* File size */ + DWORD org_clust; /* File start cluster */ + DWORD curr_clust; /* Current cluster */ + DWORD curr_sect; /* Current sector */ #if _FS_READONLY == 0 - DWORD dir_sect; /* Sector containing the directory entry */ - BYTE* dir_ptr; /* Ponter to the directory entry in the window */ + DWORD dir_sect; /* Sector containing the directory entry */ + BYTE* dir_ptr; /* Ponter to the directory entry in the window */ #endif - BYTE buffer[S_MAX_SIZ]; /* File R/W buffer */ + BYTE buffer[S_MAX_SIZ]; /* File R/W buffer */ } FIL; /* File status structure */ typedef struct _FILINFO { - DWORD fsize; /* Size */ - WORD fdate; /* Date */ - WORD ftime; /* Time */ - BYTE fattrib; /* Attribute */ - char fname[8+1+3+1]; /* Name (8.3 format) */ + DWORD fsize; /* Size */ + WORD fdate; /* Date */ + WORD ftime; /* Time */ + BYTE fattrib; /* Attribute */ + char fname[8+1+3+1]; /* Name (8.3 format) */ } FILINFO; /* Definitions corresponds to multi partition */ -#if _MULTI_PARTITION != 0 /* Multiple partition cfg */ +#if _MULTI_PARTITION != 0 /* Multiple partition cfg */ typedef struct _PARTITION { - BYTE pd; /* Physical drive # (0-255) */ - BYTE pt; /* Partition # (0-3) */ + BYTE pd; /* Physical drive # (0-255) */ + BYTE pt; /* Partition # (0-3) */ } PARTITION; 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# */ +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 cfg */ +#else /* Single partition cfg */ -#define LD2PD(drv) (drv) /* Physical drive# is equal to logical drive# */ -#define LD2PT(drv) 0 /* Always mounts the 1st partition */ +#define LD2PD(drv) (drv) /* Physical drive# is equal to logical drive# */ +#define LD2PT(drv) 0 /* Always mounts the 1st partition */ #endif @@ -175,20 +175,20 @@ /* File function return code (FRESULT) */ typedef enum { - FR_OK = 0, /* 0 */ - FR_NOT_READY, /* 1 */ - FR_NO_FILE, /* 2 */ - FR_NO_PATH, /* 3 */ - FR_INVALID_NAME, /* 4 */ - FR_INVALID_DRIVE, /* 5 */ - FR_DENIED, /* 6 */ - FR_EXIST, /* 7 */ - FR_RW_ERROR, /* 8 */ - FR_WRITE_PROTECTED, /* 9 */ - FR_NOT_ENABLED, /* 10 */ - FR_NO_FILESYSTEM, /* 11 */ - FR_INVALID_OBJECT, /* 12 */ - FR_MKFS_ABORTED /* 13 */ + FR_OK = 0, /* 0 */ + FR_NOT_READY, /* 1 */ + FR_NO_FILE, /* 2 */ + FR_NO_PATH, /* 3 */ + FR_INVALID_NAME, /* 4 */ + FR_INVALID_DRIVE, /* 5 */ + FR_DENIED, /* 6 */ + FR_EXIST, /* 7 */ + FR_RW_ERROR, /* 8 */ + FR_WRITE_PROTECTED, /* 9 */ + FR_NOT_ENABLED, /* 10 */ + FR_NO_FILESYSTEM, /* 11 */ + FR_INVALID_OBJECT, /* 12 */ + FR_MKFS_ABORTED /* 13 */ } FRESULT; @@ -196,142 +196,142 @@ /*-----------------------------------------------------*/ /* FatFs module application interface */ -FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ -FRESULT f_open (FIL*, const char*, BYTE); /* Open or create 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_close (FIL*); /* Close an open file object */ -FRESULT f_opendir (FATFS_DIR*, const char*); /* Open an existing directory */ -FRESULT f_readdir (FATFS_DIR*, FILINFO*); /* Read a directory item */ -FRESULT f_stat (const char*, FILINFO*); /* Get file status */ -FRESULT f_getfree (const char*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ -FRESULT f_truncate (FIL*); /* Truncate file */ -FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ -FRESULT f_unlink (const char*); /* Delete an existing file or directory */ -FRESULT f_mkdir (const char*); /* Create a new directory */ -FRESULT f_chmod (const char*, BYTE, BYTE); /* Change file/dir attriburte */ -FRESULT f_utime (const char*, const FILINFO*); /* Change file/dir timestamp */ -FRESULT f_rename (const char*, const char*); /* Rename/Move a file or directory */ -FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */ +FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ +FRESULT f_open (FIL*, const char*, BYTE); /* Open or create 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_close (FIL*); /* Close an open file object */ +FRESULT f_opendir (FATFS_DIR*, const char*); /* Open an existing directory */ +FRESULT f_readdir (FATFS_DIR*, FILINFO*); /* Read a directory item */ +FRESULT f_stat (const char*, FILINFO*); /* Get file status */ +FRESULT f_getfree (const char*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ +FRESULT f_truncate (FIL*); /* Truncate file */ +FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ +FRESULT f_unlink (const char*); /* Delete an existing file or directory */ +FRESULT f_mkdir (const char*); /* Create a new directory */ +FRESULT f_chmod (const char*, BYTE, BYTE); /* Change file/dir attriburte */ +FRESULT f_utime (const char*, const FILINFO*); /* Change file/dir timestamp */ +FRESULT f_rename (const char*, const char*); /* Rename/Move a file or directory */ +FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */ #if _USE_STRFUNC #define feof(fp) ((fp)->fptr == (fp)->fsize) #define EOF -1 -int fputc (int, FIL*); /* Put a character to the file */ -int fputs (const char*, FIL*); /* Put a string to the file */ -int fprintf (FIL*, const char*, ...); /* Put a formatted string to the file */ -char* fgets (char*, int, FIL*); /* Get a string from the file */ +int fputc (int, FIL*); /* Put a character to the file */ +int fputs (const char*, FIL*); /* Put a string to the file */ +int fprintf (FIL*, const char*, ...); /* Put a formatted string to the file */ +char* fgets (char*, int, FIL*); /* Get a string from the file */ #endif /* User defined function to give a current time to fatfs module */ -DWORD get_fattime (void); /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ - /* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */ +DWORD get_fattime (void); /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ + /* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */ /* File access control and file status flags (FIL.flag) */ -#define FA_READ 0x01 -#define FA_OPEN_EXISTING 0x00 +#define FA_READ 0x01 +#define FA_OPEN_EXISTING 0x00 #if _FS_READONLY == 0 -#define FA_WRITE 0x02 -#define FA_CREATE_NEW 0x04 -#define FA_CREATE_ALWAYS 0x08 -#define FA_OPEN_ALWAYS 0x10 -#define FA__WRITTEN 0x20 -#define FA__DIRTY 0x40 +#define FA_WRITE 0x02 +#define FA_CREATE_NEW 0x04 +#define FA_CREATE_ALWAYS 0x08 +#define FA_OPEN_ALWAYS 0x10 +#define FA__WRITTEN 0x20 +#define FA__DIRTY 0x40 #endif -#define FA__ERROR 0x80 +#define FA__ERROR 0x80 /* FAT sub type (FATFS.fs_type) */ -#define FS_FAT12 1 -#define FS_FAT16 2 -#define FS_FAT32 3 +#define FS_FAT12 1 +#define FS_FAT16 2 +#define FS_FAT32 3 /* File attribute bits for directory entry */ -#define AM_RDO 0x01 /* Read only */ -#define AM_HID 0x02 /* Hidden */ -#define AM_SYS 0x04 /* System */ -#define AM_VOL 0x08 /* Volume label */ -#define AM_LFN 0x0F /* LFN entry */ -#define AM_DIR 0x10 /* Directory */ -#define AM_ARC 0x20 /* Archive */ +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_LFN 0x0F /* LFN entry */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ /* Offset of FAT structure members */ -#define BS_jmpBoot 0 -#define BS_OEMName 3 -#define BPB_BytsPerSec 11 -#define BPB_SecPerClus 13 -#define BPB_RsvdSecCnt 14 -#define BPB_NumFATs 16 -#define BPB_RootEntCnt 17 -#define BPB_TotSec16 19 -#define BPB_Media 21 -#define BPB_FATSz16 22 -#define BPB_SecPerTrk 24 -#define BPB_NumHeads 26 -#define BPB_HiddSec 28 -#define BPB_TotSec32 32 -#define BS_55AA 510 +#define BS_jmpBoot 0 +#define BS_OEMName 3 +#define BPB_BytsPerSec 11 +#define BPB_SecPerClus 13 +#define BPB_RsvdSecCnt 14 +#define BPB_NumFATs 16 +#define BPB_RootEntCnt 17 +#define BPB_TotSec16 19 +#define BPB_Media 21 +#define BPB_FATSz16 22 +#define BPB_SecPerTrk 24 +#define BPB_NumHeads 26 +#define BPB_HiddSec 28 +#define BPB_TotSec32 32 +#define BS_55AA 510 -#define BS_DrvNum 36 -#define BS_BootSig 38 -#define BS_VolID 39 -#define BS_VolLab 43 -#define BS_FilSysType 54 +#define BS_DrvNum 36 +#define BS_BootSig 38 +#define BS_VolID 39 +#define BS_VolLab 43 +#define BS_FilSysType 54 -#define BPB_FATSz32 36 -#define BPB_ExtFlags 40 -#define BPB_FSVer 42 -#define BPB_RootClus 44 -#define BPB_FSInfo 48 -#define BPB_BkBootSec 50 -#define BS_DrvNum32 64 -#define BS_BootSig32 66 -#define BS_VolID32 67 -#define BS_VolLab32 71 -#define BS_FilSysType32 82 +#define BPB_FATSz32 36 +#define BPB_ExtFlags 40 +#define BPB_FSVer 42 +#define BPB_RootClus 44 +#define BPB_FSInfo 48 +#define BPB_BkBootSec 50 +#define BS_DrvNum32 64 +#define BS_BootSig32 66 +#define BS_VolID32 67 +#define BS_VolLab32 71 +#define BS_FilSysType32 82 -#define FSI_LeadSig 0 -#define FSI_StrucSig 484 -#define FSI_Free_Count 488 -#define FSI_Nxt_Free 492 +#define FSI_LeadSig 0 +#define FSI_StrucSig 484 +#define FSI_Free_Count 488 +#define FSI_Nxt_Free 492 -#define MBR_Table 446 +#define MBR_Table 446 -#define DIR_Name 0 -#define DIR_Attr 11 -#define DIR_NTres 12 -#define DIR_CrtTime 14 -#define DIR_CrtDate 16 -#define DIR_FstClusHI 20 -#define DIR_WrtTime 22 -#define DIR_WrtDate 24 -#define DIR_FstClusLO 26 -#define DIR_FileSize 28 +#define DIR_Name 0 +#define DIR_Attr 11 +#define DIR_NTres 12 +#define DIR_CrtTime 14 +#define DIR_CrtDate 16 +#define DIR_FstClusHI 20 +#define DIR_WrtTime 22 +#define DIR_WrtDate 24 +#define DIR_FstClusLO 26 +#define DIR_FileSize 28 /* Multi-byte word access macros */ -#if _MCU_ENDIAN == 1 /* Use word access */ -#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) -#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) -#elif _MCU_ENDIAN == 2 /* Use byte-by-byte access */ -#define LD_WORD(ptr) (WORD)(((WORD)*(volatile BYTE*)((ptr)+1)<<8)|(WORD)*(volatile BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(((DWORD)*(volatile BYTE*)((ptr)+3)<<24)|((DWORD)*(volatile BYTE*)((ptr)+2)<<16)|((WORD)*(volatile BYTE*)((ptr)+1)<<8)|*(volatile BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(volatile BYTE*)(ptr)=(BYTE)(val); *(volatile BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) -#define ST_DWORD(ptr,val) *(volatile BYTE*)(ptr)=(BYTE)(val); *(volatile BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(volatile BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(volatile BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24) +#if _MCU_ENDIAN == 1 /* Use word access */ +#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) +#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) +#elif _MCU_ENDIAN == 2 /* Use byte-by-byte access */ +#define LD_WORD(ptr) (WORD)(((WORD)*(volatile BYTE*)((ptr)+1)<<8)|(WORD)*(volatile BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(((DWORD)*(volatile BYTE*)((ptr)+3)<<24)|((DWORD)*(volatile BYTE*)((ptr)+2)<<16)|((WORD)*(volatile BYTE*)((ptr)+1)<<8)|*(volatile BYTE*)(ptr)) +#define ST_WORD(ptr,val) *(volatile BYTE*)(ptr)=(BYTE)(val); *(volatile BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) +#define ST_DWORD(ptr,val) *(volatile BYTE*)(ptr)=(BYTE)(val); *(volatile BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(volatile BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(volatile BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24) #else #error Do not forget to set _MCU_ENDIAN properly! #endif
diff -r 333d6e93e58f -r d8cfad9dd1d2 integer.h --- a/integer.h Tue Jun 26 08:32:32 2012 +0000 +++ b/integer.h Wed Jan 30 17:41:29 2013 +0000 @@ -5,23 +5,23 @@ #ifndef _INTEGER /* These types must be 16-bit, 32-bit or larger integer */ -typedef int INT; -typedef unsigned int UINT; +typedef int INT; +typedef unsigned int UINT; /* These types must be 8-bit integer */ -typedef signed char CHAR; -typedef unsigned char UCHAR; -typedef unsigned char BYTE; +typedef signed char CHAR; +typedef unsigned char UCHAR; +typedef unsigned char BYTE; /* These types must be 16-bit integer */ -typedef short SHORT; -typedef unsigned short USHORT; -typedef unsigned short WORD; +typedef short SHORT; +typedef unsigned short USHORT; +typedef unsigned short WORD; /* These types must be 32-bit integer */ -typedef long LONG; -typedef unsigned long ULONG; -typedef unsigned long DWORD; +typedef long LONG; +typedef unsigned long ULONG; +typedef unsigned long DWORD; /* Boolean type */ typedef enum { FALSE = 0, TRUE } BOOL;