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

📄 fat.h

📁 fs_lib,arm9的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 + -