📄 fatprocess.h
字号:
/****************************************Copyright (c)**************************************************
** CH374做主机操作U盘读写程序
** FAT16文件系统层
** 头文件
**
** VBeat 0.5
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: FATProcess.H
**创 建 人: 徐亦朱
**最后修改日期: 2007年9月27日
**描 述: FAT文件系统层接口函数头文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 徐亦朱
** 版 本: VBeat 0.3
** 日 期: 2007年9月21日
** 描 述: 完善程序风格
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月27日
** 描 述: 优化数据结构及算法
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 * rFILEBUF ;
/*********************************************************************************************************
** 函数名称: FATInit
** 功能描述: FAT文件系统参数初始化
**
** 输 入: 无
** 输 出: FAT文件系统各项参数初始化
** A.返回ERR_Init报告异常传输错误
** B.返回InitSuccess表示初始化成功完成
**
** 全局变量: FAT.SecPerClus, FAT.BytesPerSec, FAT.RsvdSecCnt, FAT.shift, FAT.RootDirSectors
** FAT.FirstRootSector, FAT.FirstDataSector, FAT.extra, DiskNums, FileNums
** 调用模块: mReadSector
** 调试码: DEBUG_Init
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATInit( void ) ;
/*********************************************************************************************************
** 函数名称: FATOpen
** 功能描述: 打开文件函数
**
** 输 入: string: 指向要打开的文件名( 路径形式,例如: "/……/……/文件名" )
** ProcessMode: 操作模式ProcessMode:
** ModeA1: 0x00 -- 打开文件,以便读,若文件不存在则退出
** ModeA2: 0x80 -- 打开文件,以便写,若文件不存在则退出
** ModeA3: 0x01 -- 打开文件,以便读,先将文件长度截为0,如果文件不存在则退出
** ModeA4: 0x81 -- 打开文件,以便写,先将文件长度截为0,如果文件不存在则退出
** ModeA5: 0x82 -- 打开文件,以便写,向已有文件的尾部追加内容,如果文件不存在则退出
** ModeB1: 0x10 -- 打开文件,以便读,若文件不存在则创建之
** ModeB2: 0x90 -- 打开文件,以便写,若文件不存在则创建之
** ModeB3: 0x11 -- 打开文件,以便读,先将文件长度截为0,若文件不存在则创建之
** ModeB4: 0x91 -- 打开文件,以便写,先将文件长度截为0,若文件不存在则创建之
** ModeB5: 0x92 -- 打开文件,以便写,向已有文件的尾部追加内容,若文件不存在则创建之
** ModeC1: 0xF1 -- 打开目录,以便读写,若目录不存在则创建之
** ModeC2: 0xF2 -- 删除文件/目录,如果文件/目录不存在则退出
** 输 出: 逐级打开,需先打开上层目录
** 找到的文件/目录在簇内的地址信息记录在FIND结构中
** A.返回ERR_Check报告异常传输错误
** B.返回OpenSuccess则操作成功
** C.返回ERR_NOFile查找文件失败,磁盘中无此文件
** D.返回ERR_OPEN打开文件失败,没有可用的文件结构
**
** 全局变量: 无
** 调用模块: ProcessPath, CheckFirst16, x16CheckFile, xProcessDirectory, x16RootDirectory, x16Creat
** 调试码: DEBUG_OPEN
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATOpen( const UINT8 *string, UINT8 ProcessMode ) ;
/*********************************************************************************************************
** 函数名称: x16ReadFile
** 功能描述: FAT16读取文件
**
** 输 入: ReadNums: 可选的读取扇区数,若文件数据小于要求量,只会读取文件实际长度
** 输 出: 将所要求数量的文件数据读取到文件缓冲区FILE_BUF
** A.返回ERR_Read报告异常传输错误
** B.返回Clu_End表示一簇已读完,由于程序算法问题,此时FILEBUF中有效数据可能不足2048字节
** C.返回File_End表示文件已读完,由于程序算法问题,此时FILEBUF中应有零碎数据( 不满一个扇区 )
** D.返回ReadSuccess表示读取成功完成,并且不属于上述情况
**
** 全局变量: files[ i ].find.Offset, FAT.SecPerClus
** 调用模块: x16ReadFAT, mReadSector,
** 调试码: DEBUG_READ
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16ReadFile( UINT8 ReadNums, UINT8 FileNum ) ;
/*********************************************************************************************************
** 函数名称: x16WriteFile
** 功能描述: FAT16写文件
**
** 输 入: WriteNums: 可选的写入字节数
** 输 出: 将FILE_BUF中的数据写入文件
** A.返回ERR_Write报告异常传输错误
** B.返回WriteSuccess则写入成功返回
** C.返回ERR_FullDisk表示磁盘已写满,无法正常写入数据
**
** 全局变量: FAT.SecPerClus, FAT.SecPerClus, files[ i ].wr.write.extra
** 调用模块: x16CheckClus, mReadSector, mWriteSector, x16List, memmove, memcpy
** 调试码: DEBUG_WRITE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16WriteFile( UINT16 WriteNums, UINT8 FileNum ) ;
/*********************************************************************************************************
** 函数名称: FATClose
** 功能描述: 关闭文件
**
** 输 入: FileNum: 要关闭的文件编号
** 输 出: 文件缓冲区FILE_BUF中不满一个扇区的零碎数据被刷新到文件中
** A.返回ERR_Close报告异常传输错误
** B.返回CloseSuccess则操作成功
**
** 全局变量: files[ i ].wr.write.extra, wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector ,
** FAT.shift, FAT.SecPerClus
** 调用模块: x16List, mReadSector, x16CheckClus, mWriteSector, memcpy
** 调试码: DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATClose( UINT8 FileNum ) ;
/*********************************************************************************************************
** 函数名称: FATCopy
** 功能描述: 复制文件
**
** 输 入: deststr: 为要操作的目标文件名( 路径形式,例如: "/……/……/…….……" )
** scrstr: 为要操作的源文件名( 路径形式,例如: "/……/……/…….……" )
** 输 出: 源文件的数据信息写入到目标文件中
** A.返回ERR_Copy报告异常传输错误
** B.返回CopySuccess则操作成功
**
** 全局变量: FileNums, DiskNums
** 调用模块: FATOpen, x16ReadFile, x16WriteFile, FATClose
** 调试码: DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATCopy( const UINT8 *deststr, const UINT8 *scrstr ) ;
/*********************************************************************************************************
**
** 引用变量及函数声明
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern FS FAT ;
extern FILE files[ 2 ] ;
extern clock sysclock ;
extern UINT8 DiskNums ; //DISKBUF能存储的扇区数
extern UINT8 FileNums ; //FILEBUF能存储的扇区数
extern UINT8 xdata DISKBUF[ DISKBUF_BYTES ] ; //磁盘缓冲区
extern UINT8 xdata FILEBUF[ FILEBUF_BYTES ] ; //文件缓冲区
extern UINT8 mReadSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8 mWriteSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8 ProcessPath( const UINT8 *string, UINT8 * filename ) ;
extern UINT16 x16List( UINT16 clus, UINT16 value, UINT8 ProcessMode ) ;
extern UINT16 x16CheckClus( void ) ;
extern UINT8 xProcessDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8 x16RootDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8 x16Creat( FILE * wr, UINT8 Attribute ) ;
extern UINT8 CheckFile( FILE * wr, UINT16 TotalSectors, UINT32 ProcessSector ) ;
extern UINT8 CheckFirst16( FILE * wr ) ;
extern UINT8 x16CheckFile( FILE * wr ) ;
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -