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*/