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

📄 fat_intern.h

📁 此为整套uC/FS程序
💻 H
字号:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2007, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

**** 礐/FS file system for embedded applications ****
礐/FS is protected by international copyright laws. Knowledge of the
source code may not be used to write a similar product. This file may
only be used in accordance with a license and should not be re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : FAT_Intern.h
Purpose     : Internal FAT File System Layer header
---------------------------END-OF-HEADER------------------------------
*/

#ifndef _FAT_INTERN_H_               // Avoid recursive and multiple inclusion
#define _FAT_INTERN_H_

#include "FS_Int.h"
#include "FAT.h"


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



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

/*********************************************************************
*
*       defines non configurable
*
**********************************************************************
*/
#define FAT_FIRST_CLUSTER        (2)

#define FS_FAT_DENTRY_SIZE       0x20

#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_ATTR_MASK         (FS_FAT_ATTR_READ_ONLY | FS_FAT_ATTR_HIDDEN | FS_FAT_ATTR_SYSTEM | FS_FAT_ATTR_VOLUME_ID | FS_FAT_ATTR_ARCHIVE | FS_FAT_ATTR_DIRECTORY)

#define FS_FAT_MAX_DIRNAME      255

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

#define INVALID_NUM_FREE_CLUSTERS_VALUE   0xFFFFFFFF


/*********************************************************************
*
*       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
#define BPB_OFF_FAT32_FSINFO_SECTOR 48

/*********************************************************************
*
*       defines for FAT32 FSInfo Sector offsets
*
**********************************************************************
*/
#define FSINFO_OFF_SIGNATURE_1            0
#define FSINFO_OFF_SIGNATURE_2          484
#define FSINFO_OFF_FREE_CLUSTERS        488
#define FSINFO_OFF_NEXT_FREE_CLUSTER    492
#define FSINFO_OFF_SIGNATURE_3          508

/*********************************************************************
*
*       defines for FAT32 FSInfo related values
*
**********************************************************************
*/
#define FSINFO_SIGNATURE_1                       0x41615252
#define FSINFO_SIGNATURE_2                       0x61417272
#define FSINFO_SIGNATURE_3                       0xAA550000

/*********************************************************************
*
*       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_LAST_ACCESS_DATE    18
#define DIR_ENTRY_OFF_WRITE_TIME          22
#define DIR_ENTRY_OFF_WRITE_DATE          24

#define DIR_ENTRY_SHIFT                    5

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

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

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

typedef struct {
  int             (*pfReadDirEntryInfo)(FS__DIR * pDir, FS_DIRENTRY_INFO * pDirEntryInfo, FS_SB * pSB);
  FS_FAT_DENTRY * (*pfFindDirEntry)    (FS_VOLUME * pVolume, FS_SB * pSB, const char * sLongName,  int Len, U32 DirStart, U8 AttribRequired, int * pLongDirEntryIndex);
  FS_FAT_DENTRY * (*pfCreateDirEntry)  (FS_VOLUME * pVolume, FS_SB * pSB, const char * pFileName, U32 DirStart, U32 ClusterId, U8 Attributes, U32 Size, U16 Time, U16 Date);
  void            (*pfDelLongEntry)    (FS_VOLUME * pVolume, FS_SB * pSB, U32 DirStart, int LongDirEntryIndex);
} FAT_DIRENTRY_API;


/*********************************************************************
*
*       Global data
*
**********************************************************************
*/
extern const FAT_DIRENTRY_API   FAT_SFN_API;
extern const FAT_DIRENTRY_API   FAT_LFN_API;
extern const FAT_DIRENTRY_API * FAT_pDirEntryAPI;

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

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

U16          FS_FAT_GetNumAdjClustersInChain(FS_VOLUME * pVolume, FS_SB * pSB, U32 CurCluster);
int          FS_FAT_GotoCluster             (FS_FILE * pFile, FS_SB * pSBfat);

int          FS_FAT_GotoClusterAllocIfReq   (FS_FILE *pFile, FS_SB * pSBfat);
int          FS_FAT_AllocClusterBlock       (FS_VOLUME * pVolume, U32 FirstCluster, U32 NumClusters, FS_SB * pSB);

FS_FAT_DENTRY * FS_FAT_FindDirEntryShort    (FS_VOLUME * pVolume, FS_SB * pSB, const char *pEntryName, int Len, U32 DirStart, U8 AttrMask);
FS_FAT_DENTRY * FS_FAT_FindDirEntryShortEx  (FS_VOLUME * pVolume, FS_SB * pSB, const char *pEntryName, int Len, FS_DIR_POS * pDirPos, U8 AttrMask);
FS_FAT_DENTRY * FS_FAT_FindEmptyDirEntry    (FS_VOLUME * pVolume, FS_SB * pSB, U32 DirStart);
FS_FAT_DENTRY * FS_FAT_GetDirEntry          (FS_VOLUME * pVolume, FS_SB* pSB,  FS_DIR_POS * pDirPos);
FS_FAT_DENTRY * FS_FAT_FindDirEntry         (FS_VOLUME * pVolume, FS_SB * pSB, const char *pEntryName, int Len, U32 DirStart, U8 AttrMask, int * pLongDirEntryIndex);
void            FS_FAT_IncDirPos            (FS_DIR_POS * pDirPos);

char         FS_FAT_GetFATType              (U32 NumClusters);
void         FS_FAT_WriteDirEntryCluster    (FS_FAT_DENTRY * pDirEntry, U32 Cluster);
U32          FS_FAT_GetFirstCluster         (FS_FAT_DENTRY * pDirEntry);
void         FS_FAT_WriteDirEntry83         (FS_FAT_DENTRY * pDirEntry, const FS_83NAME * pFileName, U32 ClusterId, U8 Attrib, U32 Size, U16 Time, U16 Date);
void         FS_FAT_WriteDirEntryShort      (FS_FAT_DENTRY * pDirEntry, const char      * pFileName, U32 ClusterId, U8 Attrib, U32 Size, U16 Time, U16 Date);


char            FS_FAT_FindPath             (FS_VOLUME * pVolume, FS_SB * pSB,  const char *pFullName, const char * *ppFileName, U32 *pDirStart);
char            FS_FAT_DeleteFileOrDir      (FS_VOLUME * pVolume, FS_SB * pSB, FS_FAT_DENTRY  * pDirEntry, U8 IsFile);
void            FS_FAT_InitDirEntryScan     (FS_FAT_INFO * pFATInfo, FS_DIR_POS * pDirPos, U32 DirCluster);
char            FS_FAT_Make83Name           (FS_83NAME * pOutName, const char *pOrgName, int Len);

/*********************************************************************
*
*             FAT_Move
*/
char FS__FAT_Move                           (FS_VOLUME * pVolume, U32 DirStartOld, U32 DirStartNew, FS_FAT_DENTRY * pDirEntry, const char * pNewName, FS_SB * pSB, I32 LongEntryIndex);


/*********************************************************************
*
*       Directory handling
*/
int         FS_FAT_CreateDirEx(FS_VOLUME * pVolume, const char *pDirName, U32 DirStart, FS_SB * pSB);

/*********************************************************************
*
*       String handling
*/
int  FS_FAT_IsValidShortNameChar(U8 c);
void FS_FAT_CopyShortName       (char * pDest, const char* pSrc, int MaxNumBytes);
void FS_FAT_CopyDirEntryInfo    (FS_FAT_DENTRY * pDirEntry, FS_DIRENTRY_INFO * pDirEntryInfo);

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

#endif  // Avoid recursive and multiple inclusion

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

⌨️ 快捷键说明

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