📄 fat_intern.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 + -