www.pudn.com > UDiskFileSystem.rar > MX_FFS_Layer2.h


/*************************************************************************/ 
/*                                                                       */ 
/*        Copyright (c) 1993-2001 Macronix, Inc.           				 */ 
/*                                                                    	 */ 
/* PROPRIETARY RIGHTS of Macronix are involved in the      			     */ 
/* subject matter of this material.  All manufacturing, reproduction,    */ 
/* use, and sales rights pertaining to this subject matter are governed  */ 
/* by the license agreement.  The recipient of this software implicitly  */ 
/* accepts the terms of the license.                                     */ 
/*                                                                       */ 
/*************************************************************************/ 
 
/*************************************************************************/ 
/* FILE NAME                                                     	 	 */ 
/*      MX_FFS_LAYER2.h        			 						 		 */ 
/* DESCRIPTION                                                           */ 
/*	This file definition only internal used in File System							 */ 
/* AUTHOR                                                                */ 
/*      MXIC ISG , Inc.   System Application Department			 		 */ 
/*                                                                       */ 
/*                                                                       */ 
/* HISTORY                                                               */ 
/*      2006/03/16      Test version 0.00 for BCB6						*/ 
/*************************************************************************/ 
 
#ifndef  MX_FFS_LAYER2_H 
#define  MX_FFS_LAYER2_H 
 
#define BCB6// For PC Debug 
 
#include "MX_FFS_LAYER1.h" 
//#include "mx_types.h" 
 
/*************************************************************************/ 
/* Struct	                                                     	 	 */ 
/*      FDB			        			 						 		 */ 
/* DESCRIPTION                                                           */ 
/*	This file definition only internal used in Data Synchronize	FFS					 */ 
/* AUTHOR                                                                */ 
/*      MXIC ISG , Inc.   System Application Department			 		 */ 
/*                                                                       */ 
/*                                                                       */ 
/*************************************************************************/ 
 
/* Finddata block for the internal "readdir" function (fat_readdir) */ 
 
typedef struct  
{ 
	s_8		mainfilename[9];     	// main file name 
	s_8		extfilename[4];			// ext file name 
	u_8		attr;					// attribute 
	u_8		Reserved;				// ASCII ¤j¤p¼g flag, bit 3 = 1 is file/folder ¤p¼g  
	u_8		last_modify_year;		// Last modify file/folder Year 
	u_8		last_modify_month;		// Last modify file/folder Month 
	u_8		last_modify_day;		// Last modify file/folder Day 
	u_8		create_hour;			// Create file/folder Hour 
	u_8		create_minute;			// Create file/folder Minute 
	u_8		create_second;			// Create file/folder Second 
	u_8		create_year;			// Create file/folder Year 
	u_8		create_month;			// Create file/folder Month 
	u_8		create_day;				// Create file/folder Day 
	u_32	start_cluster;			// file/folder start cluster 
	u_32	filesize;               // file size 
	 
	u_32	EntryNum;			// Recording n'th FDB Number at current Folder, if EntryNum = 0=> No Long File Name 
}mxFDB;  
 
/* FAT 32-byte Long File Name Directory Entry structure */ 
typedef struct 
{ 
  	u_8 	Order;        /* Sequence number for slot        */ 
  	s_8 	Name[26];   /* 26 Unicode characters      */ 
  	u_8 	Attr;         /* Attributes, always 0x0F         */ 
  	u_8 	Reserved;     /* Reserved, always 0x00           */ 
  	u_8 	Checksum;     /* Checksum of 8.3 name            */ 
  	u_16 	FstClus;      /* First cluster number, must be 0 */ 
	 
	u_32	EntryNum;			// Recording n'th FDB Number at current Folder, if EntryNum = 0=> No Long File Name 
}mxFDB_LFN; 
 
#define LFN_Length	255 // define by user=================================================== 
typedef struct 
{ 
	mxFDB	FDB_Entry; 
  	s_8		LongName[LFN_Length]; // full file name 
  	s_8		ShortName[13]; 
	u_8		LFN_Flag;  // 0 is Short Name, 1 is Long File Name 
}mxLFN; 
 
 
#define PathDepth	5  // define by user to decide Path Depth 
#define FATtable_Num 	128 // define by user to decide get FAT Table Number, min is 2~    RAM Size is FATtable_Num * 4 
 
typedef struct 
{ 
	s_8		CurrentPath[10 * PathDepth + 4];	// Record Current Disk Path 
	u_16	FolderLayerNum;	// Reserve 
	u_32	FatherCluster;		// Record Father Path Cluster 
	u_32	CurrentPathCluster;	// Record Current Path Cluster 
	u_32	CurrentCluster;		// Reserve to Record Current Cluster 
	u_32	CurrentLBA;			// Record Current Logic Block Address 
	u_16	FileNum;			// Record File Number of Current Folder 
	u_16	FolderNum;			// Record Folder Number of Current Folder 
	u_16	LFNFileNum;			// Reserve to Record LFN Number of Current Folder 
	u_32	EntryNum;		// Recording n'th FDB Number at current Folder,including file FDB & folder FDB & deleted file FDB .  
	u_32	FATLinkTable[FATtable_Num];	// Record FAT Link Table Buffer 
	u_16	FATLinkSize;		// Current FAT Link Table Number 
	u_8		FATEndFlag;			// When FAT Link Table at EOF, FATEndFlag = 1 
}mxDISK_HISTORY; 
 
//#ifdef MX_FFS_CORE_C 
typedef struct  
{ 
	u_32	TotalCapacity;	// Disk Total Capacity Size 
	u_32	FreeSpace;		// Disk Free Space Size 
	u_8		FatType;		// Disk FAT Type 
	u_32	UseSpace;		// Disk Use Space Size 
	bBootSector	DiskBoot; 
	bPartitionInformation	DiskInfo; 
 
	u_8		Disk_Index; 
}mxDRIVE_PROPERTY; 
//#endif 
#if 1 
typedef struct 
{ 
	u_32	File1stCluster;	// Record Current File 1st Cluster 
	u_32	CurrentCluster;		// Reserve to Record Current File Cluster 
	u_32	CurrentLBA;			// Record Current File Logic Block Address 
	u_32	EntryNum;		// Recording n'th LBA(512 byte) of the File at current Folder 
	u_32	FATLinkTable[FATtable_Num];	// Record File FAT Link Table Buffer 
	u_16	FATLinkSize;		// Current File FAT Link Table Number 
	u_8		FATEndFlag;			// When File FAT Link Table at EOF, FATEndFlag = 1 
}mxFILE_HISTORY; 
 
typedef struct  
{ 
	mxLFN	LFN; 
	u_8		OpMode; // Read only, Write Only, RW, append 
	u_32	Position; 
	u_16	Remainder; 
	u_8		Sector_Num; 
	mxFILE_HISTORY	File_History; 
	mxDRIVE_PROPERTY Disk_Property; 
}mx_FHANDLE; 
#endif 
 
#define Disk_Num	1	// Disk Number is define by Customer Max. 6=================================== 
enum 
{ 
	DISK1		= 'C', 
	DISK2		= 'D', 
	DISK3		= 'E', 
	DISK4		= 'F', 
	DISK5		= 'G', 
	DISK6		= 'H', 
	DISK7		= 'I' 
}; 
 
// FAT Type 
enum 
{ 
	FAT_ERROR	= 0, 
	FAT12		= 1, 
	FAT16		= 2, 
	FAT32		= 3 
}; 
 
// FDB FILE FLAG 
enum 
{ 
	FDB_FILE		= 0, 
	FDB_NOUSE		= 1, 
	FDB_DELETE		= 2, 
	FDB_FOLDER1		= 3, 
	FDB_FOLDER2		= 4, 
	FDB_LFNAME		= 5, 
	FDB_VOLUME		= 6, 
	FDB_FOLDER		= 7 
}; 
 
//File/Folder Attribute 
enum 
{ 
	ATTR_READY_ONLY		= 0x01, 
	ATTR_HIDDEN			= 0x02, 
	ATTR_SYSTEM			= 0x04, 
	ATTR_VOLUME_ID		= 0x08, 
	ATTR_DIRECTORY		= 0x10, 
	ATTR_ARCHIVE			= 0x20, 
	ATTR_LONG_NAME		= 0x0F 
}; 
 
// File Operation FLAG 
enum 
{ 
	FILE_WRONLY 		= 0x01, 
	FILE_RDONLY			= 0x02, 
	FILE_RDWR			= 0x03, 
	FILE_APPEND 		= 0x10, 
}; 
 
// FFS Layer 2 ERROR FLAG 
enum 
{ 
	FAT_PASS					= 0, 
	FAT_FAILED					= 1, 
	FAT_LINK_FAILED			= 2, 
	FAT_FILE_NOTFIND			= 3, 
	FAT_FOLDER_NOTFIND		= 4, 
	FAT_FOLDERPATH_ERROR 	= 5, 
	FAT_FILEOPMODE_ERROR 	= 6, 
	FAT_EOF					= 7 
};//FAT_ERROR; 
 
// FFS Operation FLAG 
enum 
{ 
	FILE_ONLY					= 0, 
	FOLDER_ONLY				= 1, 
	FILE_FOLDER				= 2, 
};//FAT_ERROR; 
 
 
/*MX_FFS_DIR.C      Start*/ 
u_8	MX_FFSReadyGet(void); 
u_8	MX_GetDiskFATState(u_8 DiskNum); 
u_8 MX_FATInit(void); 
void	MX_GetDiskSize(u_8 DiskNum, u_32 * DiskTotalSize); 
u_8	MX_GetDiskFreeSize(u_8 DiskNum, u_32 * DiskFreeSize, u_32 * DiskUseSize); 
void MX_SetFDBEntryStart(u_8 DiskIndex); 
//u_8 MX_GetFDBList(mxFDB *FDB_Buf, u_16 FDB_Num, u_8 DiskIndex); 
u_8 MX_GetLFNList(mxLFN *LFN, u_16 FDB_Num, u_8 DiskIndex, u_8 Mode); 
u_8 MX_GetFDBNum(u_16* TotalFileNum, u_16* TotalFoldeNum, u_8 DiskIndex);// get Total file and folder number 
//u_8 MX_GetLFN(mxFDB FDB_Buf, mxLFN *LFN, u_8 DiskIndex); 
void MX_GetCurrentPath(s_8 *Path, u_8 DiskIndex); 
u_8 MX_SearchFolder(s_8 *Path, mxFDB *FolderFDB, u_8 DiskIndex); 
u_8 MX_GetFDB(mxFDB *FDB_Buf, u_8 DiskIndex, s_8 *MainName, s_8 *ExtName); 
u_8 MX_ChangeWorkFolder(s_8 *Path, mxFDB FolderFDB, u_8 DiskIndex); 
void	MX_GetDiskProperty(u_8 DiskNum, mxDRIVE_PROPERTY * DiskProperty); 
u_8 MX_SetFDBEntry(u_8 DiskIndex, u_8 Mode, u_16 Count); 
 
u_8 MX_GetLFN(mxLFN *LFN, u_8 DiskIndex, s_8 *MainName, s_8 *ExtName, u_8 Mode); 
 
u_8 MX_FRename(s_8 *pSrcFileName, s_8 *pTrgFileName); 
/*MX_FFS_DIR.C      End==========*/ 
 
/*MX_FFS_FILE.C     =====Start*/ 
//void MX_FileOpenSet(mx_FHANDLE *Handle, u_8 mode, mxDRIVE_PROPERTY DiskProperty); 
void MX_FileOpenSet(mx_FHANDLE *Handle, u_8 mode);//, mxDRIVE_PROPERTY DiskProperty); 
u_8 MX_FileSeekSet(mx_FHANDLE *Handle, u_32 pos, u_32 * pCurPos); 
u_8 MX_ReadFileData(mx_FHANDLE *Handle, u_8 *pBuff, u_32 Count, u_32 *pByteRead); 
u_8 MX_WriteFileData(mx_FHANDLE *Handle, u_8 *pBuff, u_32 Count, u_32 *pByteWrite); 
u_8 MX_CloseFile(mx_FHANDLE Handle); 
/*MX_FFS_FILE.C     =====End*/ 
 
#endif   /*MX_FFS_LAYER2_H*/