OSFile.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:4k
源码类别:

uCOS

开发平台:

C/C++

  1. #ifndef __OSFILE_H__
  2. #define __OSFILE_H__
  3. #include "../inc/sysconfig.h"
  4. #if (USE_YAFFS==1)
  5. #include "../src/fs/yaffs/yaffsfs.h"
  6. typedef yaffs_DIR file_DIR;
  7. typedef struct yaffs_stat file_stat;
  8. typedef yaffs_dirent file_dirent;
  9. //file state
  10. #define lstat(path, stat) yaffs_lstat(path, stat)
  11. //directory stream operation
  12. #define opendir(dirname) yaffs_opendir(dirname)
  13. #define readdir(dirp) yaffs_readdir(dirp)
  14. #define closedir(dirp) yaffs_closedir(dirp)
  15. //delete a file 
  16. #define unlink(pathname) yaffs_unlink(pathname)
  17. //delete a directory
  18. #define rmdir(pathname) yaffs_rmdir(pathname)
  19. //rename a file or directory
  20. #define rename(oldPath, newPath) yaffs_rename(oldPath, newPath)
  21. //create a directory
  22. #define mkdir(pathname) yaffs_mkdir(pathname, 0)
  23. // get free space
  24. #define free_space(pathname) yaffs_freespace(pathname)
  25. //format file system
  26. #define format(path) yaffs_format(path)
  27. int initOSFile(void);
  28. #else //#if (USE_YAFFS==1)
  29. #include "../inc/macro.h"
  30. #define FILESYSTEM_AUTOFORMAT FALSE
  31. //Macro related to FLASH
  32. #define PagePerClus 32
  33. #define BytesPerPage 512
  34. #define FILEMODE_READ 1
  35. #define FILEMODE_WRITE 2
  36. #define FILEMODE_CREATE 0x10
  37. #define Disk_Size  (16*1024*1024) //Disk的空间大小(以Sector/Page为基本单位)
  38. #define Begin_Cluster (1) //
  39. //#define Start_Cluster (1) //Cluster0被Root_Information占用
  40. #define End_Cluster (Disk_Size/BytesPerPage/PagePerClus+Begin_Cluster)
  41. //Disk Infomation
  42. #define BytesPerSector 512
  43. //#define UNUSED_MARK (0xFF)
  44. //#define BAD_MARK (0x00)
  45. #define LAST_BLOCK (0xFFFF)
  46. #define OSFILE_DELETEMARK 0xe5
  47. #define FILE_NO_FOUND (512)
  48. #define Block_Size (32*1024)
  49. #define BPB_Sector (0)
  50. #define RSD_Sector 1
  51. #define Fat_Sector (BPB_Sector+RSD_Sector)
  52. #define FAT_NUM 2 //两个分区表
  53. #define Fat_Sector_Num 2 //分区表占用的扇区数
  54. #define Directory_BeginSector (Fat_Sector+Fat_Sector_Num*FAT_NUM)
  55. #define FileData_BeginSector (2*32) //文件数据的起始扇区
  56. #define Directory_Number ((FileData_BeginSector-Directory_BeginSector)*BytesPerSector/32) //文件目录项数
  57. //文件数据扇区总数
  58. #define Total_Sector ((End_Cluster-Begin_Cluster)*BytesPerPage*PagePerClus/BytesPerSector-FileData_BeginSector)
  59. #define FILESYS_MAX_BUFFER_FILEROOT 1024
  60. struct __FILE {
  61. U8 Buffer[Block_Size]; //文件缓冲区32*1024
  62. U32 fileCluster; //文件当前的簇的位置
  63. U32 filemode; //打开文件的模式
  64. U32 filebufnum; //文件缓冲区中已经读取/写入的字节数
  65. U32 fileCurpos; //读写的当前位置
  66. U32 filesize; //文件的大小
  67. int rootpos; //文件系统中目录的位置 by threewater
  68. };
  69. typedef struct __FILE OSFILE;
  70. #define FAT12 12
  71. #define FAT16 16
  72. #define FAT32 32
  73. #define HIGHBYTE(a) ((a>>8)&0xff)
  74. #define LOWBYTE(a) (a&0xff)
  75. int initOSFile(void);
  76. OSFILE* OpenOSFile(char filename[], U32 OpenMode);
  77. //U8 OpenOSFileRead(OSFILE* pfile,char filename[]);
  78. U32 ReadOSFile(OSFILE* pfile,U8* ReadBuffer, U32 nReadbyte);
  79. U32 LineReadOSFile(OSFILE* pfile, char str[]); //读取指定文件的一行
  80. U32 SeekOSFile(OSFILE* pfile ,U32 nCurPos);
  81. U32 GetPusOSFile(OSFILE* pfile);
  82. U8 DeleteOSFile(char filename[]);
  83. U8 RenameOSFile(char fromname[], char toname[]);
  84. U8 CopyOSFile(char srcfile[], char decfile[]);
  85. int FindOSFile(char filename [ ]);
  86. //U8 OpenOSFileWrite(OSFILE* pfile, char filename[]);
  87. U8 WriteOSFile(OSFILE* pfile,U8* WriteBuffer, U32 nWriteyte);
  88. int CloseOSFile(OSFILE* pfile);
  89. //得到指定位置的文件名(包括扩展名),文件位置自动下移
  90. U8 GetNextFileName(U32 *filepos,char filename[]);
  91. //列出当前位置开始第一个指定扩展名的文件,如果没有,则返回FALSE
  92. U8 ListNextFileName(U32 *filepos, char FileExName[],char filename[]);
  93. void FormatFileName11(char outfilename [ ], char infilename [ ]);
  94. int Init_FAT_Info(int AutoFormat);
  95. unsigned int NextCluster(unsigned int CurrentCluster);
  96. unsigned int AllocateCluster(unsigned int CurrentCluster);
  97. /********************************************************************/
  98. /*如果Flash的MBR和Fat16结构受损,则调用此函数可以恢*/
  99. /*复 */
  100. /********************************************************************/
  101. int Format_Fat12Media(void);
  102. void WriteMBR2Flash(void);
  103. void CreatFAT16(void);
  104. void CreatDirectoryEntry(void);
  105. void TestFAT_COPY(char filename1[],char filename2[]);
  106. void TestFAT_CREATE(char filename[]);
  107. void TestFAT_DELETE(char filename[]);
  108. void TestFAT_READ(char filename[]);
  109. #endif //#if (USE_YAFFS==1)
  110. #endif