⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat_intern.h

📁 嵌入式文件系统 ucfs.包含全部源代码
💻 H
字号:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : FAT_Intern.h
Purpose     : Internal FAT File System Layer header
---------------------------END-OF-HEADER------------------------------
*/

#ifndef _FAT_INTERN_H_
#define _FAT_INTERN_H_

#if defined(__cplusplus)
extern "C" {     /* Make sure we have C-declarations in C++ programs */
#endif

#include "fs_int.h"

/*********************************************************************
*
*             #define constants
*
**********************************************************************
*/

#define FS_FAT_DENTRY_SIZE      0x20
#define FS_FAT_SEC_SIZE         FS_SEC_SIZE

#define FS_FAT_ATTR_READ_ONLY    FS_ATTR_READ_ONLY
#define FS_FAT_ATTR_HIDDEN       FS_ATTR_HIDDEN
#define FS_FAT_ATTR_SYSTEM       FS_ATTR_SYSTEM
#define FS_FAT_ATTR_VOLUME_ID    0x08
#define FS_FAT_ATTR_ARCHIVE      FS_ATTR_ARCHIVE
#define FS_FAT_ATTR_DIRECTORY    FS_ATTR_DIRECTORY
#define FS_FAT_ATTR_LONGNAME     FS_FAT_ATTR_READ_ONLY | \
                                 FS_FAT_ATTR_HIDDEN |    \
                                 FS_FAT_ATTR_SYSTEM |    \
                                 FS_FAT_ATTR_VOLUME_ID



#define FS_FAT_TYPE_FAT12       12
#define FS_FAT_TYPE_FAT16       16
#define FS_FAT_TYPE_FAT32       32

/*********************************************************************
*
*       defines non configurable
*
**********************************************************************
*/

/*********************************************************************
*
*       defines for Boot parameter block offsets
*
**********************************************************************
*/
#define BPB_OFF_SIGNATURE          510
#define BPB_OFF_BYTES_PER_SECTOR    11
#define BPB_OFF_NUM_FATS            16
#define BPB_OFF_SECTOR_PER_CLUSTER  13
#define BPB_OFF_NUMSECTORS_16BIT    19
#define BPB_OFF_NUMSECTORS_32BIT    32
#define BPB_OFF_FATSIZE_16BIT       22
#define BPB_OFF_FATSIZE_32BIT       36
#define BPB_OFF_FAT32_EXTFLAGS      40
#define BPB_OFF_ROOTDIR_CLUSTER     44

/*********************************************************************
*
*       defines for directory entry offsets
*
**********************************************************************
*/
#define DIR_ENTRY_OFF_ATTRIBUTES          11
#define DIR_ENTRY_OFF_SIZE                28
#define DIR_ENTRY_OFF_FIRSTCLUSTER_LOW    26
#define DIR_ENTRY_OFF_FIRSTCLUSTER_HIGH   20
#define DIR_ENTRY_OFF_CREATION_TIME       14
#define DIR_ENTRY_OFF_CREATION_DATE       16
#define DIR_ENTRY_OFF_WRITE_TIME          22
#define DIR_ENTRY_OFF_WRITE_DATE          24


/*********************************************************************
*
*             Global data types
*
**********************************************************************
*/



/* FAT directory entry */
typedef struct {
  FS_U8   data[FS_FAT_DENTRY_SIZE];
} FS_FAT_DENTRY;

typedef struct {
  char ac[11];
} FS_83NAME;


/*********************************************************************
*
*             Global function prototypes
*
**********************************************************************
*/

/*********************************************************************
*
*             fat_misc
*/

int             FS_FAT_CheckUnit   (FS_VOLUME * pVolume);

FS_U32          FS_FAT_ClusterId2SectorNo(FS_FAT_INFO * pFATInfo, FS_U32 ClusterId);
FS_U32          FS_FAT_FindFreeCluster   (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 FirstCluster);
void            FS_FAT_LinkCluster       (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 LastCluster, FS_U32 NewCluster);
char            FS_FAT_MarkClusterEOC    (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 Cluster);
FS_U32          FS_FAT_WalkCluster       (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 StartCluster, FS_U32 NumClusters);
FS_U32          FS_FAT_AllocCluster      (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 LastCluster);
FS_U32          FS_FAT_ReadFATEntry      (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 ClusterId);
FS_U32          FS_FAT_FindLastCluster   (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 ClusterId, FS_U32 * pNumClusters);
FS_U32          FS_FAT_FreeClusterChain  (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 ClusterId, FS_U32 NumClusters);

FS_FAT_DENTRY * FS_FAT_FindDirEntryShort  (FS_VOLUME * pVolume, FS_SB * pSB, const char *pEntryName, int Len, FS_U32 DirStart);
FS_FAT_DENTRY * FS_FAT_FindEmptyDirEntry  (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 DirStart);
FS_FAT_DENTRY * FS_FAT_GetDirEntry        (FS_VOLUME * pVolume, FS_SB* pSB,  FS_DIR_POS * pDirPos);
void            FS_FAT_IncDirPos          (FS_DIR_POS * pDirPos);

char            FS_FAT_GetFATType          (FS_U32 NumClusters);
void            FS_FAT_WriteDirEntryCluster(FS_FAT_DENTRY* pDirEntry, FS_U32 Cluster);
void            FS_FAT_WriteDirEntry83     (FS_FAT_DENTRY * pDirEntry, const FS_83NAME * pFileName, FS_U32 ClusterId, FS_U8 Attrib, FS_U32 Size, FS_U16 Time, FS_U16 Date);
void            FS_FAT_WriteDirEntryShort  (FS_FAT_DENTRY * pDirEntry, const char      * pFileName, FS_U32 ClusterId, FS_U8 Attrib, FS_U32 Size, FS_U16 Time, FS_U16 Date);


#if FS_FAT_SUPPORT_LFN
  #define FS_FAT_FIND_DIR_ENTRY(pVolume, pSB, sName, Len, DirStart, pLongEntryIndex)  FS_FAT_FindDirEntry(pVolume, pSB, sName, Len, DirStart, pLongEntryIndex)
#else
  #define FS_FAT_FIND_DIR_ENTRY(pVolume, pSB, sName, Len, DirStart, pLongEntryIndex)  FS_FAT_FindDirEntryShort(pVolume, pSB, sName, Len, DirStart)
#endif


char            FS_FAT_FindPath         (FS_VOLUME * pVolume, FS_SB * pSB,  const char *pFullName, const char * *ppFileName, FS_U32 *pDirStart);
char            FS_FAT_DeleteFileOrDir  (FS_VOLUME * pVolume, FS_SB * pSB, FS_FAT_DENTRY  * pDirEntry, FS_U8 IsFile);
FS_U32          FS_FAT_GetFirstCluster   (FS_FAT_DENTRY* pDirEntry);
void            FS_FAT_InitDirEntryScan  (FS_FAT_INFO * pFATInfo, FS_DIR_POS * pDirPos, FS_U32 DirCluster);
char            FS_FAT_Make83Name        (FS_83NAME * pOutName, const char *pOrgName, int Len);
FS_FAT_DENTRY * FS_FAT_CreateDirEntry    (FS_VOLUME * pVolume, FS_SB * pSB, const char * pFileName, FS_U32 DirStart, FS_U32 ClusterId, FS_U8 Attributes, FS_U32 Size, FS_U16 Date, FS_U16 Time);

/*********************************************************************
*
*       FAT Long file name support (LFN)
*/
FS_FAT_DENTRY * FS_FAT_FindDirEntry      (FS_VOLUME * pVolume, FS_SB * pSB, const char *pEntryName, int Len, FS_U32 DirStart, int * pLongDirEntryIndex);
FS_FAT_DENTRY * FS_FAT_FindDirEntryLong  (FS_VOLUME * pVolume, FS_SB * pSB, const char * sLongName,  int Len, FS_U32 DirStart, int * pLongDirEntryIndex);
void            FS_FAT_DelLongEntry      (FS_VOLUME * pVolume, FS_SB * pSB, FS_U32 DirStart, int LongDirEntryIndex);
FS_FAT_DENTRY * FS_FAT_LFN_CreateDirEntry(FS_VOLUME * pVolume, FS_SB * pSB, const char * pFileName, FS_U32 DirStart, FS_U32 ClusterId, FS_U8 Attributes, FS_U32 Sizes, FS_U16 Time, FS_U16 Date);
FS_DIRENT     * FS_FAT_LFN_ReadDir       (FS_DIR    * pDir,    FS_SB * pSB);
int             FS_FAT_CalcNumDirEntries(const char * sLongName, int Len);

/*********************************************************************
*
*             FAT_Move
*/

#if FS_FAT_SUPPORT_LFN
  #define FS_FAT_MOVE_ENTRY(pVolume, DirStartOld, DirStartNew, pDirEntry, pNewName, pSB, LongEntryIndex) FS__FAT_Move(pVolume, DirStartOld, DirStartNew, pDirEntry, pNewName, pSB, LongEntryIndex)
#else
  #define FS_FAT_MOVE_ENTRY(pVolume, DirStartOld, DirStartNew, pDirEntry, pNewName, pSB, LongEntryIndex) FS__FAT_Move(pVolume, DirStartOld, DirStartNew, pDirEntry, pNewName, pSB, -1)
#endif

int  FS_FAT_Move(const char * sOldName, const char * sNewName, FS_VOLUME * pVolume);
char FS__FAT_Move(FS_VOLUME * pVolume, FS_U32 DirStartOld, FS_U32 DirStartNew, FS_FAT_DENTRY * pDirEntry, const char * pNewName, FS_SB * pSB, FS_I32 LongEntryIndex);


/*********************************************************************
*
*             FAT_Rename
*/
int FS_FAT_Rename(const char * sOldName, const char * sNewName, FS_VOLUME * pVolume);

#if defined(__cplusplus)
}                /* Make sure we have C-declarations in C++ programs */
#endif

#endif  /* _FAT_INTERN_H_ */

/*************************** End of file ****************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -