www.pudn.com > LPC2200_USB.rar > Fat.h, change:2005-03-25,size:32720b


/****************************************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             200          //文件系统Cache数目 
#endif 
 
#ifndef MAX_DRIVES 
#define MAX_DRIVES                  1           //可以同时加载的逻辑驱动器数目 
#endif 
 
#if MAX_OPEN_FILES < 0x80 
typedef int8 HANDLE; 
#else 
#if MAX_OPEN_FILES < 0x8000 
typedef int16 HANDLE; 
#else 
typedef int32 HANDLE; 
#endif 
#endif 
 
#define Not_Open_FILE               -1 
 
 
/* 底层驱动命令 */ 
#define DISK_INIT                   0 
#define DISK_CLOSE                  1 
#define DISK_READ_SECTOR            2 
#define DISK_WRITE_SECTOR           3 
 
/* 底层驱动返回值 */ 
#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 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 NOT_RUN                     0xfd    /* 命令未执行       */ 
#define BAD_COMMAND                 0xfe    /* 错误命令       */ 
#define PARAMETER_ERR               0xff    /* 非法参数        */ 
 
/* 未使用的逻辑盘  */ 
#define EMPTY_DRIVE                 0xff 
 
/* 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 
{ 
    uint8       Drive;          // 驱动器号 
    uint32      SectorIndex;    // 操作的扇区 
    uint32      RsvdForLow;     // 保留给底层驱动程序,由_Disk_Info中拷贝过来  
    uint8       *Buf;           // 数据存储位置 
}Disk_RW_Parameter; 
 
/* 文件系统cache数据结构 */ 
typedef struct _Disk_Cache 
{ 
    uint8       Drive;          // 驱动器号,EMPTY_DRIVE为空闲 
    uint8       Flag;           // 状态 
    uint16      RW_ID;          // 读写ID,用于释放Cache 
//    uint8       Lock;           // 是否锁定扇区 
    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表数目 
 
    uint32      SecPerDisk;     // 逻辑驱动器包含扇区数 
    uint32      BytsPerSec;     // 每扇区字节数 
    uint32      RootDirTable;   // 根目录开始扇区号(FAT32为开始簇号) 
    uint32      RootSecCnt;     // 根目录占用扇区数 
    uint32      FATStartSec;    // FAT表开始扇区号 
    uint32      FATSecCnt;      // 每个FAT占用扇区数 
    uint32      DataStartSec;   // 数据区开始扇区号 
    uint32      ClusPerData;    // 数据区包含簇数 
    uint32      PathClusIndex;  // 当前路径的FDT表开始簇号, 0为根目录  
    uint32      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; 
 
 
/*******************************************************************************************************/ 
 
 
#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:从文件尾计算 
** 输 出: 无 
**          
** 全局变量: 无 
** 调用模块: 无 
********************************************************************************************************/ 
 
#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 
********************************************************************************************************/ 
 
#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 * GetEmptyDiskInfoAddr(void); 
/********************************************************************************************************* 
** 函数名称: GetEmptyDiskInfoAddr 
** 功能描述: 获取空闲逻辑盘 
** 
** 输 入: 无 
** 
** 输 出: 指向逻辑盘信息的结构体指针 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void AddFileDriver(uint16  (* DiakCommand)(uint8 Cammand, void *Parameter)); 
/********************************************************************************************************* 
** 函数名称: AddFileDriver 
** 功能描述: 增加一个底层驱动程序 
** 
** 输 入: DiakCommand:驱动程序接口函数 
** 
** 输 出: 无 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
 
extern void RemoveFileDriver(uint8 Drive); 
/********************************************************************************************************* 
** 函数名称: RemoveFileDriver 
** 功能描述: 删除一个底层驱动程序 
** 
** 输 入: Drive:逻辑驱动器号 
** 
** 输 出: 无 
**          
** 全局变量: DiskInfo 
** 调用模块: 无 
********************************************************************************************************/ 
#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 uint16 GetCache(void); 
/********************************************************************************************************* 
** 函数名称: GetCache 
** 功能描述: 获取一个cache 
** 
** 输 入: 无 
** 
** 输 出: cache索引 
**          
** 全局变量: DiskCache 
** 调用模块: 无 
********************************************************************************************************/ 
 
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 
** 调用模块: 无 
********************************************************************************************************/ 
 
#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 
********************************************************************************************************/