fs_api.h
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:12k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. **********************************************************************
  3. *                          Micrium, Inc.
  4. *                      949 Crestview Circle
  5. *                     Weston,  FL 33327-1848
  6. *
  7. *                            uC/FS
  8. *
  9. *             (c) Copyright 2001 - 2003, Micrium, Inc.
  10. *                      All rights reserved.
  11. *
  12. ***********************************************************************
  13. ----------------------------------------------------------------------
  14. File        : fs_api.h 
  15. Purpose     : Define global functions and types to be used by an
  16.               application using the file system.
  17.               This file needs to be included by any modul using the
  18.               file system.
  19. ----------------------------------------------------------------------
  20. Version-Date-----Author-Explanation
  21. ----------------------------------------------------------------------
  22. 1.00.00 20020815 TB     First release
  23. 1.00.01 20020821 TB     Internal modifications
  24. 1.10.00 20020927 TB     MMC & SD card driver added
  25. 1.20.00 20021010 TB     IDE & CF driver added
  26. 1.21.00 20021025 TB     FAT32 added / POSIX like directory support added
  27. 1.22.00 20021028 TB     Internal modifications
  28. 1.22.01 20021031 TB     Experimental DSP support added (internal version)
  29. 1.23.00 20021202 TB     Intermediate release with switches FS_FAT_NOFAT32
  30.                         and FS_FAT_NOFORMAT. Old manual V1.20 is provided,
  31.                         FS_RmDir is not supported.
  32. 1.24.00 20021206 TB     Official successor of 1.20.00
  33. 1.24.01 20030110 TB     Internal test version
  34. 1.26.00 20030113 TB     Support for trial version added.
  35.                         FS__fat_malloc returns cleared buffer.
  36.                         MMC driver deactivates CS whenever allowed by 
  37.                         specification.
  38. 1.28.00 20030207 TB     FS_RmDir support added.
  39.                         FS_IoCtl command FS_CMD_GET_DISKFREE added.
  40. 1.28.01 20030311 TB     FS_FWrite/FS_FRead preformance improved.
  41. 1.30.00 20030530 TB     Switch FS_FAT_DISKINFO added.
  42.                         Logical Block Read Cache implemented.
  43.                         No open file bug when using FS_FOpen(name,"r+") 
  44.                         corrected.
  45.                         Additional cluster allocation bug when writing 
  46.                         data with size of a cluster corrected.
  47.                         Command FS_CMD_FORMAT_AUTO added.
  48. 1.31.00 20030807 TB     Internal test version
  49.                         FAT32 formatting added.
  50.                         Directory entries with attribute ATTR_LONG_NAME 
  51.                         are no longer shown by FS_ReadDir.
  52.                         FS_FWrite performance improved by optimizing
  53.                         directory access.
  54.                         FS_CMD_GET_DISKFREE can now be executed as first 
  55.                         command after a disk change took place.
  56.                         Pointer to device information table is located
  57.                         in ROM now.
  58.                         FS_Remove reports error when file does not
  59.                         exist or cannot be removed.
  60.                         FS_IoCtl commands FS_CMD_READ_SECTOR and
  61.                         FS_CMD_WRITE_SECTOR added.
  62.                         Non ANSI C conform construct in RAM disk and
  63.                         generic FLASH driver removed.
  64. 1.31.01 20030815 TB     Internal test version
  65.                         Improved function comments.
  66.                         FS__fat_fread return value corrected for element
  67.                         size bigger than 1.
  68.                         FS__fat_fwrite return value corrected for element
  69.                         size bigger than 1.
  70.                         FS__fat_FAT_alloc valid cluster check improved.
  71.                         Switch FS_FAT_FWRITE_UPDATE_DIR added; default on.
  72. 1.31.02 20030818 TB     Internal test version
  73.                         Standard library function calls removed.
  74. 1.31.03 20030826 TB     Internal test version
  75.                         Expressions in code simplified.
  76.                         SMC write performance improved by optional 
  77.                         switch FS_SMC_PAGE_BUFFER.
  78. 1.32.00 20030910 TB/TW  Official successor of 1.30
  79.                         New cluster allocation performance improved.
  80.                         Element FAT_DirAttr added in structure FS_DIRENT.
  81.                         FS_FWrite performance improved by avoiding 
  82.                         unnecessary read operations.
  83. 1.34.00 20031009 TW     Official successor of 1.32
  84.                         Hardware interface routines of MMC/SD simplified.
  85.                         MMC/SD partition table no longer needed.
  86.                         Several improvements and bug fixes in t MMC/SD driver.
  87. 1.34.01 20031015 TW     FS_FWrite cluster allocation failed.
  88. ----------------------------------------------------------------------
  89. Known problems or limitations with current version
  90. ----------------------------------------------------------------------
  91.  - Total path length of a short name is currently not limited to 80
  92.    characters; in fact it is unlimited.
  93.  - VFAT (long filenames) are currently not supported for legal reasons;
  94.    there is a patent on it.
  95. ---------------------------END-OF-HEADER------------------------------
  96. */
  97. #ifndef _FS_API_H_
  98. #define _FS_API_H_
  99. /*********************************************************************
  100. *
  101. *             #include Section
  102. *
  103. **********************************************************************
  104. */
  105. #include "fs_port.h"
  106. #include "fs_conf.h"
  107. /*********************************************************************
  108. *
  109. *             #define constants
  110. *
  111. **********************************************************************
  112. */
  113. /* File system version */
  114. #define FS_VERSION                0x00013401UL   /* 1.34.01 */
  115. /* Maximum size of a directory name */
  116. #define FS_DIRNAME_MAX            255
  117. /* Global error codes */
  118. #define FS_ERR_OK                 (FS_i16)0x0000
  119. #define FS_ERR_EOF                (FS_i16)0xfff0
  120. #define FS_ERR_DISKFULL           (FS_i16)0xffe0
  121. #define FS_ERR_INVALIDPAR         (FS_i16)0xffd0
  122. #define FS_ERR_WRITEONLY          (FS_i16)0xffc0
  123. #define FS_ERR_READONLY           (FS_i16)0xffb0
  124. #define FS_ERR_READERROR          (FS_i16)0xffa0
  125. #define FS_ERR_WRITEERROR         (FS_i16)0xff90
  126. #define FS_ERR_DISKCHANGED        (FS_i16)0xff80
  127. #define FS_ERR_CLOSE              (FS_i16)0xff70
  128. /* Global constants*/
  129. #define FS_SEEK_CUR         1
  130. #define FS_SEEK_END         2
  131. #define FS_SEEK_SET         0
  132. /* I/O commands */
  133. #define FS_CMD_FLUSH_CACHE        1000L
  134. #define FS_CMD_CHK_DSKCHANGE      1010L
  135. #define FS_CMD_READ_SECTOR        1100L
  136. #define FS_CMD_WRITE_SECTOR       1110L
  137. #define FS_CMD_FORMAT_MEDIA       2222L
  138. #define FS_CMD_FORMAT_AUTO        2333L
  139. #define FS_CMD_INC_BUSYCNT        3001L
  140. #define FS_CMD_DEC_BUSYCNT        3002L
  141. #define FS_CMD_GET_DISKFREE       4000L
  142. #define FS_CMD_GET_DEVINFO        4011L
  143. #define FS_CMD_FLASH_ERASE_CHIP   9001L
  144. /* known media */
  145. #define FS_MEDIA_SMC_1MB          1010L
  146. #define FS_MEDIA_SMC_2MB          1020L
  147. #define FS_MEDIA_SMC_4MB          1030L
  148. #define FS_MEDIA_SMC_8MB          1040L
  149. #define FS_MEDIA_SMC_16MB         1050L
  150. #define FS_MEDIA_SMC_32MB         1060L
  151. #define FS_MEDIA_SMC_64MB         1070L
  152. #define FS_MEDIA_SMC_128MB        1080L
  153. #define FS_MEDIA_RAM_16KB         2010L
  154. #define FS_MEDIA_RAM_64KB         2020L
  155. #define FS_MEDIA_RAM_128KB        2030L
  156. #define FS_MEDIA_RAM_256KB        2040L
  157. #define FS_MEDIA_RAM_512KB        2050L
  158. #define FS_MEDIA_FD_144MB         3040L
  159. #define FS_MEDIA_MMC_32MB         4060L
  160. #define FS_MEDIA_MMC_64MB         4070L
  161. #define FS_MEDIA_MMC_128MB        4080L
  162. #define FS_MEDIA_SD_16MB          5050L
  163. #define FS_MEDIA_SD_64MB          5070L
  164. #define FS_MEDIA_SD_128MB         5080L
  165. #define FS_MEDIA_CF_32MB          6060L
  166. #define FS_MEDIA_CF_64MB          6070L
  167. /* device states */
  168. #define FS_MEDIA_ISNOTPRESENT     0 
  169. #define FS_MEDIA_ISPRESENT        1
  170. #define FS_MEDIA_STATEUNKNOWN     2
  171. /*********************************************************************
  172. *
  173. *             Global data types
  174. *
  175. **********************************************************************
  176. */
  177. typedef struct {
  178.   FS_u32 fileid_lo;          /* unique id for file (lo)      */
  179.   FS_u32 fileid_hi;          /* unique id for file (hi)      */
  180.   FS_u32 fileid_ex;          /* unique id for file (ex)      */
  181.   FS_i32 EOFClust;           /* used by FAT FSL only         */
  182.   FS_u32 CurClust;           /* used by FAT FSL only         */
  183.   FS_i32 filepos;            /* current position in file     */
  184.   FS_i32 size;               /* size of file                 */
  185.   int dev_index;             /* index in _FS_devinfo[]       */
  186.   FS_i16 error;              /* error code                   */
  187.   unsigned char inuse;       /* handle in use mark           */
  188.   unsigned char mode_r;      /* mode READ                    */
  189.   unsigned char mode_w;      /* mode WRITE                   */
  190.   unsigned char mode_a;      /* mode APPEND                  */
  191.   unsigned char mode_c;      /* mode CREATE                  */
  192.   unsigned char mode_b;      /* mode BINARY                  */
  193. } FS_FILE;
  194. typedef struct {
  195.   FS_u32 total_clusters;
  196.   FS_u32 avail_clusters;
  197.   FS_u16 sectors_per_cluster;
  198.   FS_u16 bytes_per_sector;
  199. } FS_DISKFREE_T;
  200. /*********************************************************************
  201. *
  202. *             directory types
  203. */
  204. #if FS_POSIX_DIR_SUPPORT
  205. #define FS_ino_t  int
  206. struct FS_DIRENT {
  207.   FS_ino_t  d_ino;                      /* to be POSIX conform */
  208.   char      d_name[FS_DIRNAME_MAX];
  209.   char      FAT_DirAttr;                /* FAT only. Contains the "DIR_Attr" field of an entry. */
  210. };
  211. typedef struct {
  212.   struct FS_DIRENT  dirent;  /* cunrrent directory entry     */
  213.   FS_u32 dirid_lo;           /* unique id for file (lo)      */
  214.   FS_u32 dirid_hi;           /* unique id for file (hi)      */
  215.   FS_u32 dirid_ex;           /* unique id for file (ex)      */
  216.   FS_i32 dirpos;             /* current position in file     */
  217.   FS_i32 size;               /* size of file                 */
  218.   int dev_index;             /* index in _FS_devinfo[]       */
  219.   FS_i16 error;              /* error code                   */
  220.   unsigned char inuse;       /* handle in use mark           */
  221. } FS_DIR;
  222. #endif  /* FS_POSIX_DIR_SUPPORT */
  223. /*********************************************************************
  224. *
  225. *             Global function prototypes
  226. *
  227. **********************************************************************
  228. */
  229. /*********************************************************************
  230. *
  231. *             STD file I/O functions
  232. */
  233. FS_FILE             *FS_FOpen(const char *pFileName, const char *pMode);
  234. void                FS_FClose(FS_FILE *pFile);
  235. FS_size_t           FS_FRead(void *pData, FS_size_t Size, FS_size_t N, FS_FILE *pFile);
  236. FS_size_t           FS_FWrite(const void *pData, FS_size_t Size, FS_size_t N, FS_FILE *pFile);
  237. /*********************************************************************
  238. *
  239. *             file pointer handling
  240. */
  241. int                 FS_FSeek(FS_FILE *pFile, FS_i32 Offset, int Whence);
  242. FS_i32              FS_FTell(FS_FILE *pFile);
  243. /*********************************************************************
  244. *
  245. *             I/O error handling
  246. */
  247. FS_i16              FS_FError(FS_FILE *pFile);
  248. void                FS_ClearErr(FS_FILE *pFile);
  249. /*********************************************************************
  250. *
  251. *             file functions
  252. */
  253. int                 FS_Remove(const char *pFileName);
  254. /*********************************************************************
  255. *
  256. *             IOCTL
  257. */
  258. int                 FS_IoCtl(const char *pDevName, FS_i32 Cmd, FS_i32 Aux, void *pBuffer);
  259. /*********************************************************************
  260. *
  261. *             directory functions
  262. */
  263. #if FS_POSIX_DIR_SUPPORT
  264. FS_DIR              *FS_OpenDir(const char *pDirName);
  265. int                 FS_CloseDir(FS_DIR *pDir);
  266. struct FS_DIRENT    *FS_ReadDir(FS_DIR *pDir);
  267. void                FS_RewindDir(FS_DIR *pDir);
  268. int                 FS_MkDir(const char *pDirName);
  269. int                 FS_RmDir(const char *pDirName);
  270. #endif  /* FS_POSIX_DIR_SUPPORT */
  271. /*********************************************************************
  272. *
  273. *             file system control functions
  274. */
  275. int                 FS_Init(void);
  276. int                 FS_Exit(void);
  277. #endif  /* _FS_API_H_ */