📄 fat.h
字号:
/*
* @(#)fat.h
* @date 2005/12/25
* @version 1.0
* @author Zhou Shangpin.
* Copyright 2005 Anyka corporation, Inc. All rights reserved.
* ANYKA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
#ifndef _FAT_H_
#define _FAT_H_
#include "object.h"
#include "file.h"
#include "driver.h"
#include "cluster.h"
typedef enum
{
FAT_FS_ERROR = 0,
FAT_FS_12 = 1,
FAT_FS_16 = 2,
FAT_FS_32 = 3
}E_FATFS;
typedef enum
{
FAT_CMPCLUS,
FAT_CMPNAME,
FAT_CMPSHORT,
FAT_GETNAME,
FAT_GETSPACE,
FAT_SETNAME,
FAT_GETALL,
FAT_DEL
}E_FATSEARCH;
struct FatSearch
{
E_FATSEARCH FunType; // query type.
T_PATTR attr; // SETNAME or GETNAME. CMPSHORT
T_CHAR *name; // CMPNAME
T_U8 ShortName[12]; // CMPNAME
T_U32 FileId; // CMPCLUS,CMPNAME.
T_U16 FileNum; // FAT_GETALL
T_U16 FolderNum; // FAT_GETALL
T_PBLINK link; // FAT_GETALL
T_U32 vcn; // virtual cluster in link
T_U32 vsn; // virtual sector in cluster.
T_U32 sfdt; // fdt number in a sector.
T_U32 cluster; // physical cluster.
T_U32 sector; // physical sector.
T_U32 fdt; // fdt number in cluster link.
T_U8* ptr; // short name ptr in fdt buffer.
T_U32 LongFdt; // long name fdt.
T_U32 ShortFdt; // short fdt.
T_U32 FdtCount; // long name length.
T_PCLUSTER clus; // directory cluster link.
};
typedef struct FatSearch T_FATSEARCH;
typedef struct FatSearch* T_PFATSEARCH;
struct Fat
{
T_OBJECT obj;
T_PDRIVER driver;
E_FATFS fs; //FAT12,FAT16,FAT32
T_U32 Fat1Addr; //the address of first FAT.
T_U32 FATSz; //FAT length.
T_U8 NumFATs; //FAT total number.
T_U32 RootDirSectors; //root sector number.
T_U32 RootAddr; //root start address.
T_U32 MaxClusNum; //max cluster nubmer of a driver.
T_U32 FileEndFlag; //last cluster number's end flag.
T_U32 ClusMask; //SecPerClus - 1;
T_U32 SecMask; //BytsPerSec - 1;
T_U8 ClusBit; //2^ClusBit = SecPerClus
T_U8 SecBit; //2^SecBit = BytsPerSec
T_U32 FdtSecBit; //FdtSecBit = SecBit - 5
T_U32 FdtClusBit; //FdtClusBit = fat->ClusBit + fat->FdtSecBit
T_U32 FdtPerSec; //FdtPerSec = 1 << fat->FdtSecBit
T_U32 SecPerClus; //SecPerClus = 1 << ClusBit
T_PCLUSTER clus; //allocate cluster link.
T_U32 LastAllocCluster; //last allocate cluster number.
T_FATSEARCH sm;
};
typedef struct Fat T_FAT;
typedef struct Fat* T_PFAT;
//system operate.
T_PFAT Fat_Initial(T_PDRIVER driver, T_U8* bpb);
T_U32 Fat_GetUsedSize(T_PDRIVER driver);
T_U32 Fat_GetFreeSize(T_PDRIVER driver);
//fat operate.
T_U32 Fat_AllocFat(T_PDRIVER driver, T_U32 prev);
T_U8* Fat_ClearCluster(T_PDRIVER driver, T_U32 cluster);
T_U32 Fat_ReadLink(T_PDRIVER driver, T_PCLUSTER clus, T_U32 FstClus);
T_VOID Fat_WriteLink(T_PDRIVER driver, T_PCLUSTER clus);
T_VOID Fat_DelLink(T_PDRIVER driver, T_PCLUSTER clus);
T_U8* Fat_ReadFat(T_PDRIVER driver, T_U32 sector);
T_BOOL Fat_WriteFat(T_PDRIVER driver);
//fdt operate
T_U8* Fat_ReadFdt(T_PDRIVER driver, T_U32 sector);
T_VOID Fat_WriteFdt(T_PDRIVER driver, T_U32 sector);
T_VOID Fat_ReadAttr(T_PATTR attr);
E_FSSEARCH Fat_SearchName(T_PDRIVER driver, T_U32 ParentId, T_CHAR* FileName, T_U32* FileId);
T_VOID Fat_FdtIterate(T_PDRIVER driver, T_U32 fdt);
//data operate.
T_BOOL Fat_ReadData(T_PFILE file);
T_U32 Fat_WriteData(T_PFILE file);
T_U32 Fat_ReadBlock(T_PFILE file, T_U8* buf, T_U32 SectorCount);
T_U32 Fat_WriteBlock(T_PFILE file, T_U8* buf, T_U32 SectorCount);
T_VOID Fat_Flush(T_PFILE file);
T_U32 Fat_Seek(T_PFILE file, T_U32 pos);
//file operate.
T_BOOL Fat_CreateFile(T_PFILE file);
T_BOOL Fat_DeleteFile(T_PFILE file);
T_BOOL Fat_Mkdir(T_PFILE file);
T_BOOL Fat_RenameTo(T_PFILE source, T_PFILE dest);
T_PFILE Fat_OpenId(T_PDRIVER driver, T_U32 id);
T_PFILE Fat_OpenNext(T_PFILE parent, T_PBLINK link);
T_PATTR Fat_OpenSub(T_PFILE parent, struct FidData* fid);
T_PBLINK Fat_Search(T_PFILE file);
T_U32 Fat_ClusToSec(T_PFAT fat, T_U32 cluster);
T_BOOL Fat_Format(T_PDRIVER driver);
T_BOOL Fat_QuickFormat(T_PDRIVER driver);
T_VOID Fat_ForceClose(T_PFILE file);
#endif //_FAT_H
/* end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -