www.pudn.com > File_SD_OS.rar > Fat.h


/****************************************Copyright (c)************************************************** 
**                               广州周立功单片机发展有限公司 
**                                     研    究    所 
**                                        ARM开发组 
** 
**                                 http://www.zlgmcu.com 
** 
**--------------文件信息-------------------------------------------------------------------------------- 
**文   件   名: fat.h 
**创   建   人: 陈明计 
**最后修改日期: 2003年9月3日 
**描        述: FAT文件系统总头文件 
**               
**--------------历史版本信息---------------------------------------------------------------------------- 
** 创建人: 陈明计 
** 版  本: V1.0 
** 日 期: 2003年9月3日 
** 描 述: 原始版本 
** 
**--------------当前版本修订------------------------------------------------------------------------------ 
** 修改人: 陈明计 
** 日 期: 2004年4月10日 
** 描 述: 修改注释 
** 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
#ifndef MAX_OPEN_FILES 
#define MAX_OPEN_FILES              10          /* 可以同时打开的文件数目 */ 
#endif 
 
#ifndef DISK_CACHE_SIZE 
#define DISK_CACHE_SIZE             512         /* 文件系统Cache大小(字节),应当是最大的扇区所占字节数 */ 
#endif 
 
#ifndef MAX_DISK_CACHES 
#define MAX_DISK_CACHES             256         /* 文件系统Cache数目,必须为16的整数倍 */ 
#endif 
 
#define BASE_CACHE_NUM              4 
 
#ifndef MAX_DRIVES 
#define MAX_DRIVES                  1           /* 可以同时加载的逻辑驱动器数目 */ 
#endif 
 
#ifndef MAX_PATHFILE_LENGTHS 
#define MAX_PATHFILE_LENGTHS        512         /* 字符串的长度 */ 
#endif 
 
#ifndef RW_ID_BASE 
#define RW_ID_BASE                  0x20        /* 增大它可以减少cacth回写的次数 */ 
#endif 
 
//#define DISABLE_CHANGE_TIME 
 
#if MAX_OPEN_FILES < 0x100 
typedef uint8 HANDLE; 
#define Not_Open_FILE               0xff 
#else 
#if MAX_OPEN_FILES < 0x10000 
typedef uint16 HANDLE; 
#define Not_Open_FILE               0xffff 
#else 
typedef uint32 HANDLE; 
#define Not_Open_FILE               0xffffffff 
#endif 
#endif 
 
#define ZLG_FS_VER                  110 
 
/* 底层驱动命令 */ 
#define DISK_INIT                   0       /* 初始化,必须实现             */ 
#define DISK_CLOSE                  1       /* 关闭,必须实现               */ 
#define DISK_READ_SECTOR            2       /* 读扇区,必须实现             */ 
#define DISK_WRITE_SECTOR           3       /* 写扇区,必须实现             */ 
#define DISK_DRIVER_VER             4       /* 查看驱动程序版本号,必须实现 */ 
#define DISK_CHECK_CMD              5       /* 查看命令是否实现,必须实现   */ 
#define DISK_LOW_FORMAT             6       /* 低级格式化,可选命令         */ 
#define DISK_FREE_SECTOR            7       /* 释放扇区,可选命令           */ 
#define DISK_GET_SECTOR_NUMBER      8       /* 获得设备总扇区数,可选命令   */ 
#define DISK_GET_BYTES_PER_SECTOR   9       /* 获得每扇区字节数,可选命令   */ 
#define DISK_CHECK_CHANGE           10      /* 查看介质是否改变,可选命令   */ 
#define DISK_GET_SECTORS_PER_BLOCK  11      /* 获取每块扇区数,可选命令     */ 
#define DISK_READ_BLOCK             12      /* 读数据块,可选命令           */ 
#define DISK_WRITE_BLOCK            13      /* 写数据块,可选命令           */ 
 
/* 底层驱动返回值 */ 
#define DISK_RETURN_OK              0x00 
#define DISK_READ_OK                0x01 
#define DISK_READ_NOT_OK            0x80 
#define DISK_WRITE_OK               0x02 
#define DISK_WRITE_NOT_OK           0x82 
#define DISK_INIT_OK                0x03 
#define DISK_INIT_NOT_OK            0x83 
#define DISK_TRUE                   0x04 
#define DISK_FALSE                  0x84 
#define BAD_DISK_COMMAND            0xffff 
 
/* 函数返回值 */ 
#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 GET_TIME_ERR                0x15    /* 获取时间错误 */ 
#define DISK_NO_FORMAT              0x16    /* 逻辑盘没有格式化 */ 
#define NOT_RUN                     0xfd    /* 命令未执行       */ 
#define BAD_COMMAND                 0xfe    /* 错误命令       */ 
#define PARAMETER_ERR               0xff    /* 非法参数        */ 
 
/* 未使用的逻辑盘  */ 
#define EMPTY_DRIVE                 0xff 
#define UN_MOUNT_DRIVE              0xfe 
 
/* FAT类型 */ 
#define FAT12                       0 
#define FAT16                       1 
#define FAT32                       2 
 
/* FDT文件属性 */ 
#define ATTR_READ_ONLY              0x01 
#define ATTR_HIDDEN                 0x02 
#define ATTR_SYSTEM                 0x04 
#define ATTR_VOLUME_ID              0x08 
#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 EMPTY_FDT                   0 
#define DEL_FDT                     ((char)(0xe5)) 
#define ESC_FDT                     0x05 
 
/* Cache状态 */ 
#define CACHE_READED                0x02 
#define CACHE_WRITED                0x01 
 
/* 文件指针状态 */ 
#define FILE_FLAGS_READ             1 << 0          /* 可读 */ 
#define FILE_FLAGS_WRITE            1 << 1          /* 可写 */ 
 
/* 文件指针调整方式 */ 
#define SEEK_SET    0               /* 从文件开始处移动文件指针 */ 
#define SEEK_CUR    1               /* 从文件当前位置移动文件指针 */ 
#define SEEK_END    2               /* 从文件尾移动文件指针 */ 
 
 
/* 给底层驱动读写命令的参数结构体 */ 
typedef struct _Disk_RW_Parameter 
{ 
    uint32      SectorIndex;    /* 操作的扇区 */ 
    void        *RsvdForLow;    /* 保留给底层驱动程序,由_Disk_Info中拷贝过来 */ 
    uint8       *Buf;           /* 数据存储位置 */ 
}Disk_RW_Parameter; 
 
/* 文件系统cache数据结构 */ 
typedef struct _Disk_Cache 
{ 
    uint8       Drive;          /* 驱动器号,EMPTY_DRIVE为空闲 */ 
    uint8       Flag;           /* 状态 */ 
    uint16      RW_ID;          /* 读写ID,用于释放Cache */ 
    uint32      SecIndex;       /* 缓冲的扇区索引 */ 
    uint8       buf[DISK_CACHE_SIZE]; 
                                /* 缓冲区 */ 
}Disk_cache; 
 
/* 逻辑盘信息的数据结构 */ 
typedef struct _Disk_Info 
{ 
    uint8       Drive;          /* 逻辑驱动器号,EMPTY_DRIVE为还未分配 */ 
    uint8       FATType;        /* 类型:FAT12、FAT16和FAT32 */ 
    uint8       SecPerClus;     /* 每簇扇区数 */ 
    uint8       NumFATs;        /* FAT表数目 */ 
 
    uint16      BytsPerSec;     /* 每扇区字节数 */ 
    uint32      SecPerDisk;     /* 逻辑驱动器包含扇区数 */ 
    uint32      RootDirTable;   /* 根目录开始扇区号(FAT32为开始簇号)*/ 
    uint32      RootSecCnt;     /* 根目录占用扇区数 */ 
    uint32      FATStartSec;    /* FAT表开始扇区号 */ 
    uint32      FATSecCnt;      /* 每个FAT占用扇区数 */ 
    uint32      DataStartSec;   /* 数据区开始扇区号 */ 
    uint32      ClusPerData;    /* 数据区包含簇数 */ 
    uint32      PathClusIndex;  /* 当前路径的FDT表开始簇号, 0为根目录 */ 
 
    uint32      SecOffset;      /* 分区起始位置 */ 
 
    void        *RsvdForLow;    /* 保留给底层驱动程序 */ 
     
    uint16      (* DiakCommand)(uint8 Cammand, void *Parameter); 
                                /* 对应的驱动程序 */ 
}Disk_Info; 
 
/* 目录表数据结构 */ 
typedef struct _FDT 
{ 
    char    Name[11];           /* 短文件名主文件名 */ 
    uint8   Attr;               /* 文件属性 */ 
    uint8   NTRes;              /* 保留给NT */ 
    uint8   CrtTimeTenth;       /* 建立时间(fat16保留)*/ 
    uint16  CrtTime;            /* 建立时间(fat16保留)*/ 
    uint16  CrtDate;            /* 建立日期(fat16保留)*/ 
    uint16  LstAccDate;         /* 最后访问日期(fat16保留)*/ 
    uint16  FstClusHI;          /* 起始簇号高两个字节(fat16保留)*/ 
    uint16  WrtTime;            /* 最后写时间 */ 
    uint16  WrtDate;            /* 最后写日期 */ 
    uint16  FstClusLO;          /* 起始簇(cluster)号低两个字节 */ 
    uint32  FileSize;           /* 文件大小 */ 
} FDT; 
 
/* 文件信息结构体 */ 
typedef struct _FILE 
{ 
    uint8       Flags;          /* 一些标志 */ 
    char        Name[11];       /* 文件名 */ 
    uint8       Drive;          /* 文件所在磁盘 */ 
    uint32      DirClus;        /* 所在目录开始簇号 */ 
    uint32      FileSize;       /* 文件大小 */ 
    uint32      FstClus;        /* 起始簇号 */ 
    uint32      Clus;           /* 当前簇号 */ 
    uint32      Offset;         /* 文件指针偏移量 */ 
} MY_FILE; 
 
 
 
/* 用户设置的时间格式 */ 
typedef struct _DATE_TIME 
{ 
    uint16  da_year;	        /* 公元年 */ 
    uint8   da_mon;	            /* 月 */  
    uint8   da_day;	            /* 月中日期 */ 
    uint8   da_dow;	            /* 星期中日期 */ 
    
    uint8   ti_hour;	        /* 时 */ 
    uint8   ti_min;  	        /* 分 */ 
    uint8   ti_sec;	            /* 秒 */ 
    uint8   ti_hund;	        /* 百分之一秒 */ 
}DATE_TIME; 
 
 
/* 与FS接口的时间格式,与FDT项匹配 */ 
typedef  struct _SYS_TIME 
{ 
/* 日期:位0~4:日,有效值1~31;位5~8:月,有效值1~12;*/ 
/*       位9~15:年,从1980年开始的年数,有效值0~127 */ 
    uint16  date; 
 
/* 时间:位0~4:2秒的数量;位5~10:分,有效值0~59;位11~15:时,有效值0~23 */ 
    uint16  time; 
 
/* 十分之一秒值,有效值0~199 */ 
    uint8   msec;	 
}SYS_TIME; 
 
 
/*******************************************************************************************************/ 
 
 
#ifndef IN_FILE 
 
extern void FileInit(void); 
/********************************************************************************************************* 
** 函数名称: FileInit 
** 功能描述: 初始化文件指针系统 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 RemoveFile(char *DirFileName); 
/********************************************************************************************************* 
** 函数名称: RemoveFile 
** 功能描述: 删除文件 
** 
** 输 入: DirFileName:用户使用的文件名 
** 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: strupr,_GetFileInfo,GetDrive,FindFDTInfo,FATDelClusChain,DelFDT 
********************************************************************************************************/ 
 
extern HANDLE FileOpen(char *DirFileName, char *Type); 
/********************************************************************************************************* 
** 函数名称: FileOpen 
** 功能描述: 以指定方式打开文件 
** 
** 输 入: DirFileName:用户使用的文件名 
**        Type:打开方式 
** 输 出: 文件句柄,Not_Open_FILE为不能打开 
**          
** 全局变量: 无 
** 调用模块: _FileOpenR,_FileOpenW,_FileOpenRW 
********************************************************************************************************/ 
 
extern uint8 FileClose(HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FileClose 
** 功能描述: 关闭指定文件 
** 
** 输 入: Handle:文件句柄 
** 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明  
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 FileGetCh(uint8 *Ch, HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FileGetCh 
** 功能描述: 从文件读一个字节 
** 
** 输 入: Ch:返回读到的数据 
**        Handle:文件句柄 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明  
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint32 FileRead(void *Buf, uint32 Size, HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FileRead 
** 功能描述: 读取文件 
** 
** 输 入: Buf:保存读回的数据 
**        Size:要读的字节数 
**        Handle:文件句柄 
** 输 出: 实际读到的字节数 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 FilePutCh(uint8 Ch, HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FilePutCh 
** 功能描述: 写一个字节到文件 
** 
** 输 入: Ch:要写的数据 
**        Handle:文件句柄 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明  
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint32 FileWrite(void *Buf, uint32 Size, HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FileWrite 
** 功能描述: 写文件 
** 
** 输 入: Buf:要写的数据 
**        Size:要写的字节数 
**        Handle:文件句柄 
** 输 出: 实际写的字节数 
**          
** 全局变量: 无 
** 调用模块: 无 
** 
** 作 者: 陈明计 
** 日 期: 2003年6月5日 
**------------------------------------------------------------------------------------------------------- 
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
extern void FileCloseAll(void); 
/********************************************************************************************************* 
** 函数名称: FileCloseAll 
** 功能描述: 关闭所有打开的文件 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: FileInfo 
** 调用模块: AllCacheWriteBack 
********************************************************************************************************/ 
 
extern uint8 FileEof(HANDLE Handle); 
/********************************************************************************************************* 
** 函数名称: FileEof 
** 功能描述: 判断文件是否到读\写到文件尾 
** 
** 输 入: Handle:文件句柄 
** 
** 输 出: 0:否 
**        1:是  
** 全局变量: FileInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 FileSeek(HANDLE Handle, int32 offset, uint8 Whence); 
/********************************************************************************************************* 
** 函数名称: FileSeek 
** 功能描述: 移动文件读\写位置 
** 
** 输 入: Handle:文件句柄 
**        offset:移动偏移量 
**        Whence:移动模式SEEK_SET:从文件头计算SEEK_CUR:从当前位置计算SEEK_END:从文件尾计算 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8   FS_GetDateTime(SYS_TIME *CurTime); 
/********************************************************************************************************* 
** 函数名称: FS_GetDateTime 
** 功能描述: 时间格式转换函数,将DATE_TIME格式的数据转换为SYS_TIME格式的时间数据 
** 
** 输 入: CurTime  指向保存结果 
** 
** 输 出: 错误代码,RETURN_OK为正确 
**          
** 全局变量: 无 
** 调用模块: GetDataTime 
** 
********************************************************************************************************/ 
 
#endif 
 
#ifdef IN_DIR 
#define GETDATATIME 
#endif 
 
#ifdef IN_FILE 
#define GETDATATIME 
#endif 
 
#ifdef GETDATATIME 
extern uint8    GetDataTime(DATE_TIME *GetTime); 
/********************************************************************************************************* 
** 函数名称: GetDateTime 
** 功能描述: 用户完成函数,获取当前的时间 
** 
** 输 入: Time  指向保存结果 
** 
** 输 出: 错误代码,RETURN_OK为正确 
**          
** 全局变量: 无 
** 调用模块: 无 
** 
********************************************************************************************************/ 
#endif 
 
/*******************************************************************************************************/ 
 
 
#ifndef IN_DIR 
 
extern uint8 GetDrive(char *Path); 
/********************************************************************************************************* 
** 函数名称: GetDrive 
** 功能描述: 获取指定目录的逻辑盘号 
** 
** 输 入: Path:路径名 
**         
** 输 出: 驱动器号 
** 
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 ChangeDrive(char *Drive); 
/********************************************************************************************************* 
** 函数名称: ChangeDrive 
** 功能描述: 改变当前逻辑盘 
** 
** 输 入: Drive:逻辑盘符字符串 
**         
** 输 出: RETURN_OK:成功 
**        NOT_FIND_DISK:逻辑盘不存在 
**        PARAMETER_ERR:非法参数 
** 全局变量: 无 
** 调用模块: strupr,GetDiskInfo 
********************************************************************************************************/ 
 
extern uint32 GetDirClusIndex(char *Path); 
/********************************************************************************************************* 
** 函数名称: GetDirClusIndex 
** 功能描述: 获取指定目录开始簇号 
** 
** 输 入: Path:路径名 
**         
** 输 出: 开始簇号,EMPTY_CLUS:为根目录 
** 
** 全局变量: 无 
** 调用模块: strupr,GetDiskInfo,FindRootFDTInfo,FindFDTInfo 
********************************************************************************************************/ 
 
extern uint8 MakeDir(char *Path); 
/********************************************************************************************************* 
** 函数名称: MakeDir 
** 功能描述: 建立目录 
** 
** 输 入: Path:路径名 
** 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDirClusIndex,strupr,ClearClus,AddRootFDT,AddFDT 
********************************************************************************************************/ 
 
extern uint8 RemoveDir(char *Path); 
/********************************************************************************************************* 
** 函数名称: RemoveDir 
** 功能描述: 删除目录 
** 
** 输 入: Path:路径名 
** 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDirClusIndex,strupr,DelRootFDT,DelRootFDT 
********************************************************************************************************/ 
 
extern uint8 ChangeDir(char *Path); 
/********************************************************************************************************* 
** 函数名称: ChangeDir 
** 功能描述: 改变当前目录 
** 
** 输 入: Path:路径名 
** 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDirClusIndex,GetDiskInfo 
********************************************************************************************************/ 
 
extern uint8 mount(char *DriveName); 
/********************************************************************************************************* 
** 函数名称: mount 
** 功能描述: 加载卷(已分配盘符),允许读写。 
** 
** 输 入: DriveName:包含逻辑盘的字符串 
**         
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
********************************************************************************************************/ 
 
extern uint8 umount(char *DriveName); 
/********************************************************************************************************* 
** 函数名称: umount 
** 功能描述: 卸载卷(已分配盘符),禁止读写。 
** 
** 输 入: DriveName:包含逻辑盘的字符串 
**         
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
********************************************************************************************************/ 
 
 
#endif 
 
 
 
/*******************************************************************************************************/ 
 
 
 
 
#ifndef IN_FDT 
 
extern uint8 ClearClus(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: ClearClus 
** 功能描述: 将指定簇所有数据清零 
** 
** 输 入: Disk:逻辑盘信息 
**        Index:簇号 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,OpenSec,WriteSec,CloseSec 
********************************************************************************************************/ 
 
extern uint8 ChangeFDT(uint8 Drive, uint32 ClusIndex, FDT *FDTData); 
/********************************************************************************************************* 
** 函数名称: ChangeFDT 
** 功能描述: 改变指定目录指定文件(目录)的属性 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        FileName:文件(目录)名 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo 
********************************************************************************************************/ 
 
extern uint8  ReadFDTInfo(FDT *Rt, uint8 Drive, uint32 SecIndex, uint16 ByteIndex); 
/********************************************************************************************************* 
** 函数名称: ReadFDTInfo 
** 功能描述: 读取FDT信息 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        SecIndex:扇区号 
**        ByteIndex:偏移量 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: OpenSec,ReadSec,CloseSec 
********************************************************************************************************/ 
 
extern uint8  WriteFDTInfo(FDT *FDTData, uint8 Drive, uint32 SecIndex, uint16 ByteIndex); 
/********************************************************************************************************* 
** 函数名称: WriteFDTInfo 
** 功能描述: 读取FDT信息 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        SecIndex:扇区号 
**        ByteIndex:偏移量 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: OpenSec,ReadSec,CloseSec 
********************************************************************************************************/ 
 
extern uint8 GetFDTInfo(FDT *Rt,uint8 Drive, uint32 ClusIndex, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: GetFDTInfo 
** 功能描述: 获取指定目录指定文件(目录)信息 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        Index:文件(目录)在FDT中的位置 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,ReadFDTInfo 
********************************************************************************************************/ 
 
extern uint8 SetFDTInfo(uint8 Drive, uint32 ClusIndex, uint32 Index, FDT *FDTData); 
/********************************************************************************************************* 
** 函数名称: SetFDTInfo 
** 功能描述: 获取指定目录指定文件(目录)信息 
** 
** 输 入: FDTData:要写入的信息 
**        Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        Index:文件(目录)在FDT中的位置 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,WriteFDTInfo 
********************************************************************************************************/ 
 
extern uint8 FindFDTInfo(FDT *Rt,uint8 Drive, uint32 ClusIndex, char FileName[]); 
/********************************************************************************************************* 
** 函数名称: FindFDT 
** 功能描述: 在指定目录查找指定文件(目录) 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        FileName:文件(目录)名 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,GetFDTInfo 
********************************************************************************************************/ 
 
extern uint8 AddFDT(uint8 Drive, uint32 ClusIndex, FDT *FDTData); 
/********************************************************************************************************* 
** 函数名称: AddFDT 
** 功能描述: 在指定目录查增加指定文件(目录) 
** 
** 输 入: Rt:存储返回信息的指针 
**        Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        FileName:文件(目录)名 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: FindFDT,GetFDTInfo,SetFDTInfo 
********************************************************************************************************/ 
 
extern uint8 DelFDT(uint8 Drive, uint32 ClusIndex, char FileName[]); 
/********************************************************************************************************* 
** 函数名称: DelFDT 
** 功能描述: 在指定目录删除指定文件(目录) 
** 
** 输 入: Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        FileName:文件(目录)名 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo 
********************************************************************************************************/ 
 
extern uint8 DirIsEmpty(uint8 Drive, uint32 ClusIndex); 
/********************************************************************************************************* 
** 函数名称: DirIsEmpty 
** 功能描述:  
** 
** 输 入: Drive:驱动器号 
**        ClusIndex:目录首簇号 
** 输 出: DIR_EMPTY:空 
**        DIR_NOT_EMPTY:不空 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetFDTInfo 
********************************************************************************************************/ 
 
extern uint8 FDTIsLie(uint8 Drive, uint32 ClusIndex, char FileName[]); 
/********************************************************************************************************* 
** 函数名称: FDTIsLie 
** 功能描述: 在指定目录查看指定文件(目录)是否存在 
** 
** 输 入: Drive:驱动器号 
**        ClusIndex:目录首簇号 
**        FileName:文件(目录)名 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
** 全局变量: 无 
** 调用模块: GetDiskInfo,GetFDTInfo 
********************************************************************************************************/ 
#endif 
 
 
 
/*******************************************************************************************************/ 
 
 
 
#ifndef IN_DISK 
 
extern void DiskInit(void); 
/********************************************************************************************************* 
** 函数名称: DiskInit 
** 功能描述: 初始化逻辑盘管理模块 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern Disk_Info * GetDiskInfo(uint8 Drive); 
/********************************************************************************************************* 
** 函数名称: GetDiskInfo 
** 功能描述: 获取正常工作的指定逻辑盘信息 
** 
** 输 入: 逻辑盘号 
** 
** 输 出: 指向逻辑盘信息的结构体指针 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern Disk_Info * GetDiskInfo2(uint8 Drive); 
/********************************************************************************************************* 
** 函数名称: GetDiskInfo2 
** 功能描述: 获取指定逻辑盘信息 
** 
** 输 入: 逻辑盘号 
** 
** 输 出: 指向逻辑盘信息的结构体指针 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern Disk_Info * GetEmptyDiskInfoAddr(void); 
/********************************************************************************************************* 
** 函数名称: GetEmptyDiskInfoAddr 
** 功能描述: 获取空闲逻辑盘 
** 
** 输 入: 无 
** 
** 输 出: 指向逻辑盘信息的结构体指针 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void AddFileDriver(uint16  (* DiakCommand)(uint8 Cammand, void *Parameter), void *RsvdForLow); 
/********************************************************************************************************* 
** 函数名称: AddFileDriver 
** 功能描述: 增加一个底层驱动程序 
** 
** 输 入: DiakCommand:驱动程序接口函数 
**         RsvdForLow:  保留给底层驱动 
** 输 出: 无 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void RemoveFileDriver(uint16  (* DiakCommand)(uint8 Cammand, void *Parameter)); 
/********************************************************************************************************* 
** 函数名称: RemoveFileDriver 
** 功能描述: 删除一个底层驱动程序 
** 
** 输 入: Drive:逻辑驱动器号 
** 
** 输 出: 无 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern uint8 FsMount(Disk_Info *Disk, uint8 *Buf); 
/********************************************************************************************************* 
** 函数名称: FsMount 
** 功能描述: 内部加载卷 
** 
** 输 入: Disk:逻辑盘信息指针 
**         Buf:扇区0内容 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
********************************************************************************************************/ 
 
extern uint8 FsUMount(uint8 Drive); 
/********************************************************************************************************* 
** 函数名称: FsUMount 
** 功能描述: 卸载卷 
** 
** 输 入: Disk:逻辑盘信息指针 
**         Buf:逻辑扇区0内容 
** 输 出: RETURN_OK:成功 
**        其它参考fat.h中关于返回值的说明 
********************************************************************************************************/ 
#endif 
 
 
 
/*******************************************************************************************************/ 
 
 
 
#ifndef IN_RWSEC 
 
extern void CacheInit(void); 
/********************************************************************************************************* 
** 函数名称: CacheInit 
** 功能描述: 初始化磁盘cache 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void CloseSec(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: CloseSec 
** 功能描述: 解锁指定cache(允许切换出内存) 
** 
** 输 入: Drive:逻辑驱动器号 
**        Index:缓冲的扇区号 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void CacheWriteBack2(uint16 Index); 
/********************************************************************************************************* 
** 函数名称: CacheWriteBack2 
** 功能描述: 把指定扇区写回逻辑盘 
** 
** 输 入: Index:cache索引 
** 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: GetDiskInfo 
********************************************************************************************************/ 
 
extern void CacheWriteBack(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: CacheWriteBack 
** 功能描述: 把指定cache写回逻辑盘 
** 
** 输 入: Drive:逻辑驱动器号 
**        Index:缓冲的扇区号 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: CacheWriteBack2 
********************************************************************************************************/ 
 
extern void AllCacheWriteBack(void); 
/********************************************************************************************************* 
** 函数名称: AllCacheWriteBack 
** 功能描述: 把所有已改变的扇区写回逻辑盘 
** 
** 输 入: 无 
** 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: CacheWriteBack2 
********************************************************************************************************/ 
 
extern uint8 *OpenSec(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: OpenSec 
** 功能描述: 为逻辑盘上的一个扇区打开一个cache并锁定 
** 
** 输 入: Drive:磁盘号 
**        Index:扇区号 
** 输 出: 指向指定扇区数据的指针 
**          
** 全局变量: DiskCache 
** 调用模块: 无 
** 
** 作 者: 陈明计 
** 日 期: 2003年9月3日 
**------------------------------------------------------------------------------------------------------- 
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
extern uint8 ReadSec(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: ReadSec 
** 功能描述: 从逻辑盘读扇区 
** 
** 输 入: Disk:逻辑盘信息 
**        Index:扇区号 
** 输 出: TRUE:成功 
**         FALSE:失败 
** 全局变量: DiskCache 
** 调用模块: GetDiskInfo 
********************************************************************************************************/ 
 
extern void WriteSec(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: WriteSec 
** 功能描述: 说明指定逻辑盘的指定一个扇区被改写 
** 
** 输 入: Disk:逻辑盘信息 
**        Index:扇区号 
** 输 出: 无 
**          
** 全局变量: DiskCache 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void FreeCache(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: FreeCache 
** 功能描述: 释放指定的扇区 
** 
** 输 入: Drive:逻辑盘号 
** 
** 输 出: 无 
********************************************************************************************************/ 
 
extern void FreeDriveCache(uint8 Drive); 
/********************************************************************************************************* 
** 函数名称: FreeDriveCache 
** 功能描述: 释放指定逻辑盘的扇区 
** 
** 输 入: Drive:逻辑盘号 
** 
** 输 出: 无 
********************************************************************************************************/ 
 
#endif 
 
 
 
 
/*******************************************************************************************************/ 
 
 
 
 
#ifndef IN_FAT 
 
extern uint32 FATGetNextClus(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: FATGetNextClus 
** 功能描述: 返回FAT表指定簇的下一个簇号 
** 
** 输 入: Drive:驱动器号 
**        Index:簇号 
** 输 出: 下一个簇号 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
void FATSetNextClus(uint8 Drive, uint32 Index, uint32 Next); 
/********************************************************************************************************* 
** 函数名称: FATSetNextClus 
** 功能描述: 删除指定簇链 
** 
** 输 入: Drive:驱动器号 
**        Index:簇链中首簇号 
**        Next:下一个簇号 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
 
extern uint32 FATAddClus(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: FATAddClus 
** 功能描述: 为指定簇链增加一个簇 
** 
** 输 入: Drive:驱动器号 
**        Index:簇链中任意一个簇号,如果为0,则为一个空链增加一个簇 
** 输 出: 增加的簇号 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void FATDelClusChain(uint8 Drive, uint32 Index); 
/********************************************************************************************************* 
** 函数名称: FATDelClusChain 
** 功能描述: 删除指定簇链 
** 
** 输 入: Drive:驱动器号 
**        Index:簇链中首簇号 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: FATGetNextClus 
********************************************************************************************************/ 
#endif 
 
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/