first
This commit is contained in:
1042
include_lib/system/fs/fs.h
Normal file
1042
include_lib/system/fs/fs.h
Normal file
File diff suppressed because it is too large
Load Diff
35
include_lib/system/fs/fs_file_name.h
Normal file
35
include_lib/system/fs/fs_file_name.h
Normal file
@ -0,0 +1,35 @@
|
||||
#ifndef __FS_FILE_NAME_H__
|
||||
#define __FS_FILE_NAME_H__
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
#define D_LFN_MAX_SIZE 512
|
||||
|
||||
#define LFN_MAX_SIZE D_LFN_MAX_SIZE //不能超过512 //必须4byte对齐
|
||||
|
||||
typedef struct _LONG_FILE_NAME {
|
||||
u16 lfn_cnt;
|
||||
char lfn[LFN_MAX_SIZE]; //长文件名buffer
|
||||
} LONG_FILE_NAME; //整理后的长文件名
|
||||
|
||||
typedef struct _FS_DIR_INFO {
|
||||
u32 sclust; //dir sclust
|
||||
u16 dir_type; // 0-folder,1-file
|
||||
u16 fn_type; // 0-sfn,1-lfn
|
||||
LONG_FILE_NAME lfn_buf; //long file name
|
||||
} FS_DIR_INFO;
|
||||
|
||||
typedef struct _FS_DISP_INFO {
|
||||
char tpath[128];
|
||||
LONG_FILE_NAME file_name;
|
||||
LONG_FILE_NAME dir_name;
|
||||
u8 update_flag;
|
||||
} FS_DISP_INFO;
|
||||
|
||||
typedef struct _FLASH_FAT_ADDRINFO {
|
||||
u32 saddr; //当前连续簇块文件起始实际物理地址
|
||||
u32 end_addr; //当前连续簇块结束位置
|
||||
u32 file_len; //文件长度,如 JL.res文件的
|
||||
} FLASH_FAT_ADDRINFO;
|
||||
#endif /* __FS_FILE_NAME_H__ */
|
||||
|
||||
222
include_lib/system/fs/sdfile.h
Normal file
222
include_lib/system/fs/sdfile.h
Normal file
@ -0,0 +1,222 @@
|
||||
#ifndef _SDFILE_H_
|
||||
#define _SDFILE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
|
||||
//=======================================================//
|
||||
// 默认宏配置定义 //
|
||||
//=======================================================//
|
||||
#ifndef SDFILE_STORAGE
|
||||
#define SDFILE_STORAGE 0
|
||||
#endif /* #ifndef SDFILE_STORAGE */
|
||||
|
||||
#define NOR_SDFILE_ENABLE 1
|
||||
/********* sdfile 文件头 **********/
|
||||
#define SDFILE_NAME_LEN 16
|
||||
|
||||
typedef struct sdfile_file_head {
|
||||
u16 head_crc;
|
||||
u16 data_crc;
|
||||
u32 addr;
|
||||
u32 len;
|
||||
u8 attr;
|
||||
u8 res;
|
||||
u16 index;
|
||||
char name[SDFILE_NAME_LEN];
|
||||
} SDFILE_FILE_HEAD;
|
||||
|
||||
#if 0
|
||||
////////////////////////////sdfile_file_head成员详细说明///////////////////////////////////////
|
||||
typedef struct SDFILEJL_FILE_HEAD {
|
||||
u16 u16Crc; // 结构体自身校验码
|
||||
u16 u16DataCrc; // 文件数据校验码
|
||||
u32 u32Address; // 数据存储地址
|
||||
u32 u32Length; // 数据长度
|
||||
u8 u8Attribute; // 属性
|
||||
u8 u8Res; // 保留数据
|
||||
u16 u16Index; // 文件编号,从大到小排列,编号为0时,代表后面没有文件
|
||||
char szFileName[16];// 文件名
|
||||
} JL_SDFILE_HEAD;
|
||||
|
||||
////////////////////////////flash_head成员详细说明///////////////////////////////////////
|
||||
typedef struct SDFILEJL_FLASH_HEAD_V2 {
|
||||
u16 u16Crc; // 结构体自身校验码
|
||||
u16 u16SizeForBurner; // 为烧写器保留的空间大小
|
||||
char vid[4]; // 存放VID信息,长度是4个byte
|
||||
u32 u32FlashSize; // FLASH大小,由isd_download计算得出
|
||||
u8 u8FsVersion; // flash类型:BR18(0)/BR22(1)
|
||||
u8 u8BlockAlingnModulus;// 对齐系数,对齐的值=对齐系数*256
|
||||
u8 u8Res; // 保留
|
||||
u8 u8SpecialOptFlag; // 用于标记是否需要生成2种flash格式的标记位,目前只用1位
|
||||
char pid[16]; // 存放PID信息,长度是16个byte
|
||||
} SDFILEJL_FLASH_HEAD_V2;
|
||||
|
||||
#endif
|
||||
|
||||
struct sdfile_dir {
|
||||
u16 file_num;
|
||||
struct sdfile_file_head head;
|
||||
};
|
||||
|
||||
enum sdfile_err_table {
|
||||
SDFILE_DIR_NOT_EXIST = -0xFF,
|
||||
SDFILE_FILE_NOT_EXIST,
|
||||
SDFILE_MALLOC_ERR,
|
||||
SDFILE_VM_NOT_FIND,
|
||||
SDFILE_DATA_CRC_ERR,
|
||||
SDFILE_WRITE_AREA_NEED_ERASE_ERR,
|
||||
SDFILE_SUSS = 0,
|
||||
SDFILE_END,
|
||||
};
|
||||
|
||||
#if (VFS_ENABLE == 1)
|
||||
|
||||
#if SDFILE_STORAGE
|
||||
#define SDFILE_MAX_DEEPTH 2
|
||||
struct sdfile_folder {
|
||||
u32 saddr;
|
||||
u32 addr;
|
||||
u32 len;
|
||||
};
|
||||
struct sdfile_scn {
|
||||
u8 subpath;
|
||||
u8 cycle_mode;
|
||||
u8 attr;
|
||||
u8 deepth;
|
||||
u16 dirCounter;
|
||||
u16 fileCounter;
|
||||
u16 fileNumber; // 当前文件序号
|
||||
u16 totalFileNumber;
|
||||
u16 last_file_number;
|
||||
u16 fileTotalInDir; // 当前目录的根下有效文件的个数
|
||||
u16 fileTotalOutDir; // 当前目录前的文件总数,目录循环模式下,需要用它来计算文件序号
|
||||
u32 sclust_id;
|
||||
const char *ftypes;
|
||||
struct sdfile_file_head head;
|
||||
struct sdfile_folder folder[SDFILE_MAX_DEEPTH];
|
||||
};
|
||||
#endif
|
||||
|
||||
typedef struct sdfile_file_t {
|
||||
u32 fptr;
|
||||
struct sdfile_file_head head;
|
||||
#if SDFILE_STORAGE
|
||||
struct sdfile_scn *pscn;
|
||||
#endif
|
||||
} SDFILE;
|
||||
|
||||
#else
|
||||
|
||||
typedef struct sdfile_file_t {
|
||||
u32 fptr;
|
||||
struct sdfile_file_head head;
|
||||
} SDFILE, FILE;
|
||||
|
||||
struct vfs_attr {
|
||||
u8 attr; //属性
|
||||
u32 fsize; //文件大小
|
||||
u32 sclust; //地址
|
||||
};
|
||||
|
||||
SDFILE *sdfile_open(const char *path, const char *mode);
|
||||
int sdfile_read(SDFILE *fp, void *buf, u32 len);
|
||||
int sdfile_write(SDFILE *fp, void *buf, u32 len);
|
||||
int sdfile_seek(SDFILE *fp, u32 offset, u32 fromwhere);
|
||||
int sdfile_close(SDFILE *fp);
|
||||
int sdfile_pos(SDFILE *fp);
|
||||
int sdfile_len(SDFILE *fp);
|
||||
int sdfile_get_name(SDFILE *fp, u8 *name, int len);
|
||||
int sdfile_get_attrs(SDFILE *fp, struct vfs_attr *attr);
|
||||
|
||||
#if 0
|
||||
#define fopen sdfile_open
|
||||
#define fread sdfile_read
|
||||
#define fseek sdfile_seek
|
||||
#define fclose sdfile_close
|
||||
#define fwrite sdfile_write
|
||||
#define flen sdfile_len
|
||||
#define fpos sdfile_pos
|
||||
#define fget_name sdfile_get_name
|
||||
#define fget_attrs sdfile_get_attrs
|
||||
#else
|
||||
|
||||
static inline SDFILE *fopen(const char *path, const char *mode)
|
||||
{
|
||||
return sdfile_open(path, mode);
|
||||
}
|
||||
static inline int fread(SDFILE *fp, void *buf, u32 len)
|
||||
{
|
||||
return sdfile_read(fp, buf, len);
|
||||
}
|
||||
static inline int fwrite(SDFILE *fp, void *buf, u32 len)
|
||||
{
|
||||
return sdfile_write(fp, buf, len);
|
||||
}
|
||||
static inline int fseek(SDFILE *fp, u32 offset, u32 fromwhere)
|
||||
{
|
||||
return sdfile_seek(fp, offset, fromwhere);
|
||||
}
|
||||
static inline int fclose(SDFILE *fp)
|
||||
{
|
||||
return sdfile_close(fp);
|
||||
}
|
||||
static inline int fpos(SDFILE *fp)
|
||||
{
|
||||
return sdfile_pos(fp);
|
||||
}
|
||||
static inline int flen(SDFILE *fp)
|
||||
{
|
||||
return sdfile_len(fp);
|
||||
}
|
||||
static inline int fget_name(SDFILE *fp, u8 *name, int len)
|
||||
{
|
||||
return sdfile_get_name(fp, name, len);
|
||||
}
|
||||
static inline int fget_attrs(SDFILE *fp, struct vfs_attr *attr)
|
||||
{
|
||||
return sdfile_get_attrs(fp, attr);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* VFS_ENABLE */
|
||||
|
||||
int sdfile_delete_data(SDFILE *fp);
|
||||
#define fdel_data sdfile_delete_data
|
||||
|
||||
#ifndef SDFILE_MOUNT_PATH
|
||||
#define SDFILE_MOUNT_PATH "mnt/sdfile"
|
||||
#endif /* #ifndef SDFILE_MOUNT_PATH */
|
||||
|
||||
#if (USE_SDFILE_NEW)
|
||||
|
||||
#ifndef SDFILE_APP_ROOT_PATH
|
||||
#define SDFILE_APP_ROOT_PATH SDFILE_MOUNT_PATH"/app/" //app分区
|
||||
#endif /* #ifndef SDFILE_APP_ROOT_PATH */
|
||||
|
||||
#ifndef SDFILE_RES_ROOT_PATH
|
||||
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/res/" //资源文件分区
|
||||
#endif /* #ifndef SDFILE_RES_ROOT_PATH */
|
||||
|
||||
#else
|
||||
#ifndef SDFILE_RES_ROOT_PATH
|
||||
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/C/"
|
||||
#endif /* #ifndef SDFILE_RES_ROOT_PATH */
|
||||
|
||||
#endif /* #if (USE_SDFILE_NEW) */
|
||||
|
||||
//获取flash物理大小, 单位: Byte
|
||||
u32 sdfile_get_disk_capacity(void);
|
||||
//flash addr -> cpu addr
|
||||
u32 sdfile_flash_addr2cpu_addr(u32 offset);
|
||||
//cpu addr -> flash addr
|
||||
u32 sdfile_cpu_addr2flash_addr(u32 offset);
|
||||
|
||||
void sdfile_head_addr_get(char *name, u32 *addr, u32 *len);
|
||||
|
||||
u32 init_norsdfile_hdl(void);
|
||||
int set_res_startaddr(int offset);
|
||||
|
||||
#endif /* _SDFILE_H_ */
|
||||
|
||||
161
include_lib/system/fs/virfat_flash.h
Normal file
161
include_lib/system/fs/virfat_flash.h
Normal file
@ -0,0 +1,161 @@
|
||||
#ifndef VIRTUAL_DISK_H
|
||||
#define VIRTUAL_DISK_H
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
|
||||
#define VIR_FILE_TYPE_MP3 1
|
||||
#define VIR_FILE_TYPE_WAV 2
|
||||
|
||||
extern const struct device_operations virfat_flash_dev_ops;
|
||||
extern const struct device_operations private_sfc_dev_ops;
|
||||
|
||||
typedef enum {
|
||||
FS_FAT12 = 0x01,
|
||||
FS_FAT16 = 0x02,
|
||||
FS_FAT32 = 0x04,
|
||||
FS_EXFAT = 0x14,
|
||||
} FS_TYPE;
|
||||
|
||||
#define JLFAT_DIRINFO_ENABLE 0
|
||||
#if JLFAT_DIRINFO_ENABLE
|
||||
typedef struct jlfat_dirinfo {
|
||||
u8 name[12]; //文件名字
|
||||
int fsize; // 文件大小
|
||||
u16 fix_date; //修改日期
|
||||
u16 fix_time; //修改时间
|
||||
u8 attr; //文件属性
|
||||
int sclust; //文件起始簇
|
||||
} JLFAT_DIRINFO;
|
||||
#endif
|
||||
|
||||
typedef struct _virfat_flash_t {
|
||||
u32 fatbase;
|
||||
// u32 fatbase2;
|
||||
u16 fatsize;
|
||||
u32 dirbase;
|
||||
u32 database;
|
||||
u32 clustSize;
|
||||
u32 max_clust;
|
||||
u32 capacity;
|
||||
u8 csize;
|
||||
FS_TYPE fs_type;
|
||||
char re_devname[24];
|
||||
u32 flash_fatfs_addr;
|
||||
u32 fatfs_len;
|
||||
} virfat_flash_t;
|
||||
|
||||
typedef struct _dir_entry {
|
||||
u8 name[12];
|
||||
u32 fileSize;
|
||||
} dir_entry_t;
|
||||
|
||||
|
||||
#if 0
|
||||
extern void virfat_flash_rand_file_size();
|
||||
extern void virtual_disk_reduce_file_size(tu8 file_num);
|
||||
extern void virtual_disk_remove_files(tu8 file_type);
|
||||
extern void virtual_disk_reduce_file_size(tu8 file_num);
|
||||
extern u8 virfat_flash_init(void *buf_512, void (*fun_read_file)(u32, u32, u8 *, u32));
|
||||
#endif
|
||||
|
||||
#define MIN_FAT16 4086 /* Minimum number of clusters for FAT16 */
|
||||
#define MIN_FAT32 65526 /* Minimum number of clusters for FAT32 */
|
||||
|
||||
#define AM_RDO 0x01 /* Read only */
|
||||
#define AM_HID 0x02 /* Hidden */
|
||||
#define AM_SYS 0x04 /* System */
|
||||
#define AM_VOL 0x08 /* Volume label */
|
||||
#define AM_LFN 0x0F /* LFN entry */
|
||||
#define AM_DIR 0x10 /* Directory */
|
||||
#define AM_ARC 0x20 /* Archive */
|
||||
#define AM_FCH 0x80 /* exFAT下,文件簇连续标志 */
|
||||
#define AM_FRG 0x40 /* exFAT下,文件簇BITMAP 有碎片 */
|
||||
#define AM_LFN0_START 0x1
|
||||
#define AM_LFN0_LEN 10
|
||||
#define AM_LFN1_START 0xE
|
||||
#define AM_LFN1_LEN 12
|
||||
#define AM_LFN2_START 0x1C
|
||||
#define AM_LFN2_LEN 4
|
||||
#define AM_LFN_LEN 26
|
||||
|
||||
#define AM_EX_DIR_STRETCHED 0x08
|
||||
|
||||
#define BS_jmpBoot 0
|
||||
#define BS_OEMName 3
|
||||
#define BPB_BytsPerSec_l 11
|
||||
#define BPB_BytsPerSec_h 12
|
||||
#define BPB_SecPerClus 13
|
||||
#define BPB_RsvdSecCnt 14
|
||||
#define BPB_NumFATs 16
|
||||
#define BPB_RootEntCnt 17
|
||||
#define BPB_TotSec16 19
|
||||
#define BPB_Media 21
|
||||
#define BPB_FATSz16 22
|
||||
#define BPB_SecPerTrk 24
|
||||
#define BPB_NumHeads 26
|
||||
#define BPB_HiddSec 28
|
||||
#define BPB_TotSec32 32
|
||||
#define BS_55AA 510
|
||||
|
||||
#define BS_DrvNum 36
|
||||
#define BS_BootSig 38
|
||||
#define BS_VolID 39
|
||||
#define BS_VolLab 43
|
||||
#define BS_FilSysType 54
|
||||
|
||||
#define BPB_FATSz32 36
|
||||
#define BPB_ExtFlags 40
|
||||
#define BPB_FSVer 42
|
||||
#define BPB_RootClus 44
|
||||
#define BPB_FSInfo 48
|
||||
#define BPB_BkBootSec 50
|
||||
#define BS_DrvNum32 64
|
||||
#define BS_BootSig32 66
|
||||
#define BS_VolID32 67
|
||||
#define BS_VolLab32 71
|
||||
#define BS_FilSysType32 82
|
||||
#define BS_FileSysTypeexFAT 5
|
||||
#define BPB_FatOffset 80
|
||||
#define BPB_FatLength 84
|
||||
#define BPB_ClusterHeapOffset 88
|
||||
#define BPB_ClusterCount 92
|
||||
#define BPB_FirstClusterOfRootDirectory 96
|
||||
#define BPB_VolumeFlags 106
|
||||
#define BPB_BytesPerSectorShift 108
|
||||
#define BPB_SectorsPerClusterShift 109
|
||||
#define BPB_NumberOfFats 110
|
||||
#define MBR_Table 446
|
||||
#define FSI_LeadSig 0 /* FSI: Leading signature (4) */
|
||||
#define FSI_StrucSig 484 /* FSI: Structure signature (4) */
|
||||
#define FSI_Free_Count 488 /* FSI: Number of free clusters (4) */
|
||||
#define FSI_Nxt_Free 492 /* FSI: Last allocated cluster (4) */
|
||||
|
||||
///for FAT12/FAT16/FAT32
|
||||
#define DIR_Name 0 /* Short file name (11) */
|
||||
#define DIR_Attr 11 /* Attribute (1) */
|
||||
#define DIR_NTres 12 /* NT flag (1) */
|
||||
#define DIR_CrtTimeTenth 13 /* Created time sub-second (1) */
|
||||
#define DIR_CrtTime 14 /* Created time (2) */
|
||||
#define DIR_CrtDate 16 /* Created date (2) */
|
||||
#define DIR_LstAccDate 18 /* Last accessed date (2) */
|
||||
#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (2) */
|
||||
#define DIR_WrtTime 22 /* Modified time (2) */
|
||||
#define DIR_WrtDate 24 /* Modified date (2) */
|
||||
#define DIR_FstClusLO 26
|
||||
#define DIR_FileSize 28
|
||||
#define LDIR_Attr 11 /* LFN attribute (1) */
|
||||
#define LDIR_Type 12 /* LFN type (1) */
|
||||
#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */
|
||||
////for exFAT
|
||||
#define DIR_FileChainFlags 1
|
||||
#define DIR_NameLen 3
|
||||
#define DIR_AttrexFAT 4
|
||||
#define DIR_FileSizeexFAT 8
|
||||
#define DIR_FstClustexFAT 20
|
||||
#define DIR_FileSize2exFAT 24
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user