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

📄 file.h

📁 瑞芯微RK2608固件源代码
💻 H
字号:
/********************************************************************************
*********************************************************************************
			COPYRIGHT (c)   2004 BY ROCK-CHIP FUZHOU
				--  ALL RIGHTS RESERVED  --

File Name:	file.h
Author:		XUESHAN LIN
Created:		20th Jan 2005
Modified:
Revision:		1.00
********************************************************************************
********************************************************************************/
#ifndef _FILE_H
#define _FILE_H

//1可配置参数
#define 	MAX_OPEN_FILES		4		/*可以同时打开的文件数目*/
#define 	MAX_LFN_ENTRIES   		3		/*最长就3*13个字符*/


//1常量定义
/* 函数返回值 */
#define	RETURN_OK                   	0x00    	/* 操作成功*/
#define	NOT_FIND_DISK               	0x01    	/* 逻辑盘不存在*/
#define	DISK_FULL                   	0x02    	/* 逻辑盘满*/
#define	SECTOR_NOT_IN_CACHE   0x03    	/* 扇区没有被cache  */
#define	NOT_EMPTY_CACHE          	0x04    	/* 没有空闲cache*/
#define	SECTOR_READ_ERR           	0x05    	/* 读扇区错误*/
#define	CLUSTER_NOT_IN_DISK    0x06    	/* 逻辑盘中没有此簇  */
#define 	NOT_FIND_FDT                	0x07    	/* 没有发现文件(目录)*/
#define 	NOT_FAT_DISK                	0x08    	/* 非FAT文件系统*/
#define 	FDT_OVER                    	0x09    	/* FDT索引超出范围*/
#define 	FDT_EXISTS                  	0x0a    	/* 文件(目录)已经存在*/
#define 	ROOT_FDT_FULL               	0x0b    	/* 根目录满*/
#define 	DIR_EMPTY                   	0x0C    	/* 目录空*/
#define 	DIR_NOT_EMPTY               	0x0d    	/* 目录不空*/
#define 	PATH_NOT_FIND               0x0e    	/* 路径未找到*/
#define 	FAT_ERR                     	0x0f    	/* FAT表错误*/
#define 	FILE_NAME_ERR               	0x10    	/* 文件(目录)名错误*/
#define 	FILE_EOF                    	0x11    	/* 文件结束*/
#define 	FILE_LOCK                   	0x12    	/* 文件被锁定*/
#define 	NOT_FIND_FILE               	0x13    	/* 没有发现指定文件*/
#define 	NOT_FIND_DIR                	0x14    	/* 没有发现指定目录*/
#define 	NOT_RUN                     	0xfd    	/* 命令未执行*/
#define 	BAD_COMMAND                 	0xfe    	/* 错误命令*/
#define 	PARAMETER_ERR               0xff    	/* 非法参数*/

#define 	NOT_OPEN_FILE			-1		//不能打开文件,文件句柄满



#ifndef 	NULL
#define	NULL	0
#endif

/* FAT类型 */
#ifndef 	FAT12
#define	FAT12	0
#endif
#ifndef 	FAT16
#define	FAT16	1
#endif
#ifndef 	FAT32
#define	FAT32	2
#endif

/* FDT文件属性 */
#define 	ATTR_READ_ONLY             0x01
#define 	ATTR_HIDDEN                 	0x02
#define 	ATTR_SYSTEM                 	0x04
#define 	ATTR_VOLUME_ID             	0x08
#define 	ATTR_LFN_ENTRY    		0x0F      /* LFN entry attribute */
#define 	ATTR_DIRECTORY             	0x10
#define 	ATTR_ARCHIVE                	0x20

/* 簇类型 */
#define 	EMPTY_CLUS               	0
#define 	EMPTY_CLUS_1           	1
#define 	BAD_CLUS                   	0x0ffffff7L
#define 	EOF_CLUS_1                  	0x0ffffff8L
#define 	EOF_CLUS_END             	0x0fffffffL

/* FDT类型 */
#define 	FILE_NOT_EXIST			0
#define 	FILE_DELETED			0xe5
#define 	ESC_FDT                    		0x05

/* 长文件名*/
#define 	MAX_FILENAME_LEN  	((MAX_LFN_ENTRIES * 13 * 2 + 2)/2)		//结尾的NUL占用2B
#define 	LFN_SEQ_MASK			0x3f

/* 文件打开方式 */
#define 	FILE_FLAGS_READ          	1 << 0		//可读
#define 	FILE_FLAGS_WRITE        	1 << 1		//可写

/* 文件指针调整方式 */
#define 	SEEK_SET    				0           		//从文件开始处移动文件指针
#define 	SEEK_CUR    				1           		//从文件当前位置移动文件指针
#define 	SEEK_END    				2           		//从文件尾移动文件指针
#define 	SEEK_REF    				3           		//从文件参考点开始


//1结构定义
//目录表数据结构

typedef 		int8		HANDLE;				//文件句柄数据类型定义

//查找结构体
typedef struct _FIND_DATA
{
	uint32	Index;
	uint32	Clus;     			//当前簇号
} FIND_DATA;

//目录项连接结构体
typedef struct _FDT_DATA
{
	uint32	DirClus;			//目录首簇
	uint32	CurClus;     		//当前簇号
	uint16	Cnt;				//计数簇链
} FDT_DATA;

typedef struct _FDT
{
	uint8	Name[11];		//短文件名主文件名
	uint8	Attr;           		//文件属性
	uint8	NTRes;              	//保留给NT
	uint8	CrtTimeTenth;  	//建立时间(fat16保留)

	uint16	CrtTime;           	//建立时间(fat16保留)
//	uint16	reserve1;           	//保留

	uint16	CrtDate;            	//建立日期(fat16保留)
//	uint16	reserve2;           	//保留

	uint16	LstAccDate;      	//最后访问日期(fat16保留)
//	uint16	reserve3;           	//保留

	uint16	FstClusHI;         	//起始簇号高两个字节(fat16保留)
//	uint16	reserve4;           	//保留

	uint16	WrtTime;           	//最后写时间
//	uint16	reserve5;           	//保留

	uint16	WrtDate;            	//最后写日期
//	uint16	reserve6;           	//保留

	uint16	FstClusLO;          	//起始簇(cluster)号低两个字节
//	uint16	reserve7;           	//保留

	uint32	FileSize;         	//文件大小
//	uint16	reserve8;           	//保留
//	uint16	reserve9;           	//保留
} FDT;

//文件信息结构体
typedef struct _FILE
{
	uint8	Flags;          		//一些标志
	uint8	Name[11];    		//文件名
	uint32	DirClus;	        	//所在目录开始簇号
	uint32	FileSize;		//文件大小
	uint32	FstClus;			//起始簇号
	uint32	Clus;     			//当前簇号
	uint32	Offset;			//文件指针偏移量
	uint32	RefClus;    		//当前簇号
	uint32	RefOffset;		//文件指针偏移量
} MY_FILE;


typedef struct _recovery_info
{
	uint8 Media;
	uint8 Flag;
	uint8 FileName[11];
	uint8 FstClus0;
	uint8 FstClus1;
	uint8 FstClus2;
	uint8 FstClus3;
	uint8 DirClus0;
	uint8 DirClus1;
	uint8 DirClus2;
	uint8 DirClus3;
} RCV_INFO, *PRCV_INFO;



//1全局变量
#undef	EXT
#ifdef	IN_FILE
		#define	EXT
#else
		#define	EXT		extern
#endif		
		
EXT		uint32 		CurDirClus	DRAM_FAT;						//当前目录簇
EXT		MY_FILE 		FileInfo[MAX_OPEN_FILES]	DRAM_FAT;			//同时打开文件信息表
EXT		uint8 		LongFileName[MAX_FILENAME_LEN]	DRAM_FAT;	//长文件名
EXT     RCV_INFO    EncRcvInfo DRAM_FAT;
#undef	EXT
#ifdef	IN_nFAT
		#define	EXT
#else
		#define	EXT		extern
#endif		
EXT		uint8 		FatBuf[512]	DRAM_FAT;		//FAT表CACHE
EXT		uint8 		FdtBuf[512]	DRAM_FAT;		//FDT表CACHE
EXT		uint32		FatCacheSec	DRAM_FAT;		//当前的Cache FAT表扇区号
EXT		uint32		Fat2CacheSec		DRAM_ENCODE;	//当前的Cache FAT2表扇区号
EXT		uint8 		Fat2Buf[512]		DRAM_ENCODE;	//FAT2表CACHE
EXT		uint16		Fat2WriteLen		DRAM_ENCODE;	//FAT2 长度计数
EXT		uint8 		Fat2WriteBuf[2048]	DRAM_ENCODE;	//FAT2K BUF
EXT		uint16		FileWriteLen		DRAM_ENCODE;	//file write 长度计数
EXT		uint8 		FileWriteBuf[2048]	DRAM_ENCODE;	//file write BUF
EXT		uint32		FileWriteResidue	DRAM_ENCODE;	//file write 长度计数
EXT		uint32		FdtCacheSec	DRAM_FAT;		//当前的Cache FDT表扇区号
EXT		uint8 		Progress		DRAM_FAT;
EXT		uint32 		ScanStartClus	DRAM_FAT;
EXT		uint32 		ScanEndClus		DRAM_FAT;
EXT		uint32 		ScanLBA			DRAM_FAT;
EXT		uint32 		Copy1Src		DRAM_FAT;
EXT		uint32 		Copy2Src		DRAM_FAT;
EXT		uint32 		Copy1Dest		DRAM_FAT;
EXT		uint32 		Copy2Dest		DRAM_FAT;
EXT		uint16 		Copy1Len		DRAM_FAT;
EXT		uint16 		Copy2Len		DRAM_FAT;
EXT		uint32 		TotalEmptySectors	DRAM_FAT;
EXT		uint16 		ScanEraseSectors	DRAM_FAT;
EXT		FDT_DATA	FdtData			DRAM_FAT;
EXT		uint32 		FreeMem[2]		DRAM_FAT;


/*******************************************************************************************************/
//1函数原型声明
//#ifndef IN_FILE
extern 	void 	FileInit(void);
extern 	void 	FileFragClean(void);
extern 	HANDLE 	FileCreate(uint8 *Path, uint8 *DirFileName);
extern 	uint8 	FileDelete(uint8 *Path, uint8 *DirFileName);
extern 	HANDLE 	FileOpen(uint8 *Path, uint8 *DirFileName, uint8 *Type);
extern 	uint8 	FileClose(HANDLE Handle);
extern 	uint16 	FileRead(uint8 *Buf, uint16 Size, HANDLE Handle);
extern 	uint16 	FileWrite(uint8 *Buf, uint16 Size, HANDLE Handle);
extern 	uint8 	FileCopy(uint8 *SrcPath, uint8 *DestPath, FDT *SrcFile);
extern 	bool 	FileEof(HANDLE Handle);
extern 	uint8 	FileSeek(int32 offset, uint8 Whence, HANDLE Handle);
extern 	HANDLE 	FindOpenFile(uint32 DirClus, uint8 *FileName);
extern 	bool 	FileExtNameMatch(uint8 *SrcExtName, uint8 *Filter);
extern 	uint8 	FindFile(FDT *Rt, uint16 FileNum, uint8 *Path, uint8 *ExtName);
extern 	uint8 	FindFileBrowser(FDT *Rt, uint16 FileNum, uint8 *Path, uint8 *ExtName);
extern 	uint8 	FindFirst(FDT *Rt, FIND_DATA* FindData, uint8 *Path, uint8 *ExtName);
extern 	uint8 	FindNext(FDT *Rt, FIND_DATA* FindData, uint8 *ExtName);
extern 	uint8 	FindDirFirst(FDT *Rt, FIND_DATA* FindData, uint8 *Path);
extern 	uint8 	FindDirNext(FDT *Rt, FIND_DATA* FindData);
extern 	uint16 	GetTotalFiles(uint8 *Path, uint8 *ExtName);
extern 	void 	GetLongFileName(uint8 *lfn);
extern 	uint16 	GetCurFileNum(uint16 FileNum, uint8 *ExtName);
extern 	uint16 	GetGlobeFileNum(uint16 FileNum, uint8 *Path, uint8 *ExtName);
extern 	void 	StrUprCase(uint8 *name);

extern 	HANDLE 	FileOpenSys(uint8 *Path, uint8 *DirFileName, uint8 Attribute, uint8 *Type);
extern 	uint16 	FileWriteSys(uint8 *Buf, uint16 Size, HANDLE Handle);
extern 	uint8 	FileCloseSys(HANDLE Handle);
extern 	uint8 	FileRefSet(HANDLE Handle);
extern 	uint8 	FileRefReset(HANDLE Handle);
#ifdef RECOVERY
extern 	uint8	RecoveryEncInfo(RCV_INFO* RecoveryInfo);
extern 	void 	SaveEncInfo(RCV_INFO* RecoveryInfo);
#endif
//#endif


/*******************************************************************************************************/
/*******************************************************************************************************/
//#ifndef IN_FDT
extern 	uint8 	ChangeFDT(uint32 ClusIndex, FDT *FDTData);
extern 	uint8 	ReadFDTInfo(FDT *Rt, uint32 SecIndex, uint16 ByteIndex);
extern 	uint8 	WriteFDTInfo(FDT *FDTData, uint32 SecIndex, uint16 ByteIndex);
extern 	uint8 	GetFDTInfo(FDT *Rt, uint32 ClusIndex, uint32 Index);
extern 	uint8 	SetFDTInfo(uint32 ClusIndex, uint32 Index, FDT *FDTData);
extern 	uint8 	FindFDTInfo(FDT *Rt, uint32 ClusIndex, uint8 *FileName);
extern 	uint8 	AddFDT(uint32 ClusIndex, FDT *FDTData);
extern 	uint8 	DelFDT(uint32 ClusIndex, uint8 *FileName);
extern 	uint8 	FDTIsLie(uint32 ClusIndex, uint8 *FileName);
//#endif

/*******************************************************************************************************/
//#ifndef IN_nFAT
extern 	uint32 	FATGetNextClus(uint32 Index);
extern 	uint32 	FAT16GetClus(uint32 Index, uint32 Count);
extern 	uint32 	FAT32GetClus(uint32 Index, uint32 Count);
#ifdef ENCODE
extern 	uint32 	GetInvaildMem(uint8 memory);
extern 	void 	FATSetNextClus(uint32 Index, uint32 Next);
extern 	uint32 	FATAddClus(uint32 Index);
extern 	uint32 	FAT2GetNextClus(uint32 Index);
extern 	void 	FAT2SetNextClus(uint32 Index, uint32 Next);
extern 	uint32 	FAT2AddClus(uint32 Index);
extern 	void 	GarbageCollectionInit(void);
extern 	void 	GarbageCollectionFinish(void);
extern 	void 	GarbageCollection(void);
extern 	void 	EraseFAT(uint8 FatNum);
extern 	uint32 	SaveToFAT1(uint32 FirstClus);
#endif
extern 	void 	FATDelClusChain(uint32 Index);
extern 	uint32 	GetFreeMem(uint8 memory);
extern 	uint32 	GetTotalMem(uint8 memory);
extern 	uint32 	GetFreeMemFast(uint8 memory);
extern 	void 	UpdataFreeMem(int32 size);
extern 	void 	UpdataFreeMemFast(uint32 size);
//#endif
#endif

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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