⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs_api.h

📁 嵌入式文件系统 ucfs.包含全部源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : fs_api.h
Purpose     : Define global functions and types to be used by an
              application using the file system.

              This file needs to be included by any modul using the
              file system.
---------------------------END-OF-HEADER------------------------------
*/

#ifndef _FS_API_H_
#define _FS_API_H_

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "FS_ConfDefaults.h"        /* FS Configuration */
#include "fs_dev.h"
#include "fs_int.h"


#if defined(__cplusplus)
extern "C" {     /* Make sure we have C-declarations in C++ programs */
#endif


/*********************************************************************
*
*             #define constants
*
**********************************************************************
*/

/* File system version */
#define FS_VERSION                0x00023620UL

/* Global error codes */
#define FS_ERR_OK                 0
#define FS_ERR_EOF                -1
#define FS_ERR_DISKFULL           -32
#define FS_ERR_INVALIDPAR         -48
#define FS_ERR_CMDNOTSUPPORTED    -40
#define FS_ERR_WRITEONLY          -64
#define FS_ERR_READONLY           -80
#define FS_ERR_READERROR          -96
#define FS_ERR_WRITEERROR         -112
#define FS_ERR_DISKCHANGED        -128
#define FS_ERR_CLOSE              -144
#define FS_ERR_INVALIDDESC        -160 /* Invalid media descriptor, media corrupt */
#define FS_ERR_DEVICETIMEOUT      -176 /* Device did not respond or timed out */
#define FS_ERR_NOMEDIAPRESENT     -192 /* No media in device present */

/* Global constants*/
#define FS_SEEK_CUR               1
#define FS_SEEK_END               2
#define FS_SEEK_SET               0

/* I/O commands */
#define FS_CMD_FLUSH_CACHE        1000L
#define FS_CMD_CHK_DSKCHANGE      1010L
#define FS_CMD_READ_SECTOR        1100L
#define FS_CMD_WRITE_SECTOR       1110L
#define FS_CMD_FORMAT_MEDIA       2222L
#define FS_CMD_FORMAT_AUTO        2333L
#define FS_CMD_FORMAT_EX          2334L
#define FS_CMD_FORMAT_LOW_LEVEL   9001L
#define FS_CMD_REQUIRES_FORMAT    9002L
#define FS_CMD_INC_BUSYCNT        3001L
#define FS_CMD_DEC_BUSYCNT        3002L
#define FS_CMD_GET_DISKFREE       4000L
#define FS_CMD_GET_TOTAL_SPACE    4001L
#define FS_CMD_GET_DEVINFO        4011L
#define FS_CMD_FREE_SECTORS       4012L

#define FS_CMD_FLASH_ERASE_CHIP   FS_CMD_FORMAT_LOW_LEVEL  /* Obsolete, do no use any more (name is confusing) */

/* known media types */
#define FS_MEDIA_SMC_1MB          1010L
#define FS_MEDIA_SMC_2MB          1020L
#define FS_MEDIA_SMC_4MB          1030L
#define FS_MEDIA_SMC_8MB          1040L
#define FS_MEDIA_SMC_16MB         1050L
#define FS_MEDIA_SMC_32MB         1060L
#define FS_MEDIA_SMC_64MB         1070L
#define FS_MEDIA_SMC_128MB        1080L
#define FS_MEDIA_SMC_256MB        1090L

#define FS_MEDIA_RAM_16KB         2010L
#define FS_MEDIA_RAM_64KB         2020L
#define FS_MEDIA_RAM_128KB        2030L
#define FS_MEDIA_RAM_256KB        2040L
#define FS_MEDIA_RAM_512KB        2050L

#define FS_MEDIA_FD_144MB         3040L

#define FS_MEDIA_MMC_32MB         4060L
#define FS_MEDIA_MMC_64MB         4070L
#define FS_MEDIA_MMC_128MB        4080L

#define FS_MEDIA_SD_16MB          5050L
#define FS_MEDIA_SD_64MB          5070L
#define FS_MEDIA_SD_128MB         5080L
#define FS_MEDIA_SD_256MB         5090L

#define FS_MEDIA_CF_32MB          6060L
#define FS_MEDIA_CF_64MB          6070L

/* device states */
#define FS_MEDIA_ISNOTPRESENT     0
#define FS_MEDIA_ISPRESENT        1
#define FS_MEDIA_STATEUNKNOWN     2

/* Field information for BPB */
#define _FS_BPB_TOTALSEC16      0x013
#define _FS_BPB_BYTESPERSECTOR  0x00b
#define _FS_BPB_SECPERTRK       0x018
#define _FS_BPB_HIDDENSEC       0x01C
#define _FS_BPB_HEADNUM         0x01A
#define _FS_BPB_TOTALSEC32      0x020

/* partition table definitions */
#define FS__DEV_PART_0_TABLE       0x01BE /* start of first entry */

/* attribute definitions */
#define FS_ATTR_READ_ONLY    0x01
#define FS_ATTR_HIDDEN       0x02
#define FS_ATTR_SYSTEM       0x04
#define FS_ATTR_ARCHIVE      0x20
#define FS_ATTR_DIRECTORY    0x10

/*********************************************************************
*
*             Global data types
*
**********************************************************************
*/

typedef struct { /* Describes the file handle structure */
  FS_U32        FirstCluster;   /* First cluster used for file  */
  FS_U32        FilePos;        /* current position in file     */
  FS_U32        size;           /* size of file                 */
  FS_VOLUME *   pVolume;
  FS_I16        Error;          /* error code                   */
  FS_U8         InUse;          /* handle in use mark           */
  FS_U8         AccessFlags;
  union {
    struct {
      FS_U32        CurClusterFile; /* Current cluster within the file. First cluster is 0, next cluster is 1 ... */
      FS_U32        CurClusterAbs;  /* Current cluster on the medium. This needs to be computed from file cluster, consulting the FAT */
      FS_U32        DirEntrySector; /* Sector of directory */
      FS_U16        DirEntryIndex;  /* Index of directory entry */
    } Fat;
#if FS_SUPPORT_EFS
    struct {
      FS_U32        DirCluster;     /* Start cluster of directory file */
      FS_U32        DirEntryPos;    /* Offset of directory entry in directory file */
      FS_U32        DataPos;
      FS_U32        DataSize;
      FS_U32        DataCluster;
      FS_U32        NextCluster;
    } Efs;
#endif
  } Data;
} FS_FILE;

#define FS_FILE_ACCESS_FLAG_A (1 << 0)
#define FS_FILE_ACCESS_FLAG_B (1 << 1)
#define FS_FILE_ACCESS_FLAG_C (1 << 2)
#define FS_FILE_ACCESS_FLAG_R (1 << 3)
#define FS_FILE_ACCESS_FLAG_W (1 << 4)

/* Combined access modes which are frequently used */
#define FS_FILE_ACCESS_FLAGS_AW     (FS_FILE_ACCESS_FLAG_A | FS_FILE_ACCESS_FLAG_W)
#define FS_FILE_ACCESS_FLAGS_BR     (FS_FILE_ACCESS_FLAG_B | FS_FILE_ACCESS_FLAG_R)
#define FS_FILE_ACCESS_FLAGS_CW     (FS_FILE_ACCESS_FLAG_C | FS_FILE_ACCESS_FLAG_W)
#define FS_FILE_ACCESS_FLAGS_RW     (FS_FILE_ACCESS_FLAG_R | FS_FILE_ACCESS_FLAG_W)

#define FS_FILE_ACCESS_FLAGS_ACW    (FS_FILE_ACCESS_FLAG_C | FS_FILE_ACCESS_FLAGS_AW)
#define FS_FILE_ACCESS_FLAGS_ARW    (FS_FILE_ACCESS_FLAG_A | FS_FILE_ACCESS_FLAGS_RW)
#define FS_FILE_ACCESS_FLAGS_BCW    (FS_FILE_ACCESS_FLAG_B | FS_FILE_ACCESS_FLAGS_CW)
#define FS_FILE_ACCESS_FLAGS_BRW    (FS_FILE_ACCESS_FLAG_W | FS_FILE_ACCESS_FLAGS_BR)
#define FS_FILE_ACCESS_FLAGS_CRW    (FS_FILE_ACCESS_FLAG_C | FS_FILE_ACCESS_FLAG_R | FS_FILE_ACCESS_FLAG_W)

#define FS_FILE_ACCESS_FLAGS_ABCW   (FS_FILE_ACCESS_FLAG_B | FS_FILE_ACCESS_FLAGS_ACW)
#define FS_FILE_ACCESS_FLAGS_ACRW   (FS_FILE_ACCESS_FLAG_A | FS_FILE_ACCESS_FLAGS_CRW)
#define FS_FILE_ACCESS_FLAGS_BCRW   (FS_FILE_ACCESS_FLAG_B | FS_FILE_ACCESS_FLAGS_CRW)

#define FS_FILE_ACCESS_FLAGS_ABCRW  (FS_FILE_ACCESS_FLAGS_ACRW | FS_FILE_ACCESS_FLAG_A)


typedef struct {
  FS_U32 total_clusters;
  FS_U32 avail_clusters;
  FS_U16 sectors_per_cluster;
  FS_U16 bytes_per_sector;
} FS_DISKFREE_T;

typedef struct {
  FS_U16 NumHeads;          /* Relevant only for mechanical drives   */
  FS_U16 SectorsPerTrack;   /* Relevant only for mechanical drives   */
  FS_U32 NumSectors;        /* Total number of sectors on the medium */
  FS_U16 BytesPerSector;    /* Number of bytes per sector            */
} FS_DEV_INFO;

typedef struct {
  FS_U16 SectorsPerCluster;
  FS_U16 NumRootDirEntries;    /* Proposed, actual value depends on FATType */
  FS_DEV_INFO * pDevInfo;
} FS_FORMAT_INFO;

typedef struct {
  FS_U32 Cluster;                    /* Cluster of current sector */
  FS_U32 FirstCluster;               /* Cluster of current sector */
  FS_U32 DirEntryIndex;              /* Directory entry index (first directory entry has index 0 */
  FS_U32 ClusterIndex;
} FS_DIR_POS;

typedef struct {
  FS_U16 Year;
  FS_U16 Month;
  FS_U16 Day;
  FS_U16 Hour;
  FS_U16 Minute;
  FS_U16 Second;
} FS_FILETIME;

/*********************************************************************
*
*             Non blocking (backgrounded) file I/O functions
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -