KT24-1110_65E-HA-651B/include_lib/system/fs/sdfile.h
2024-11-10 18:44:17 +08:00

182 lines
4.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
#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
#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);
u32 decode_data_by_user_key_in_sdfile(u16 key, u8 *buff, u16 size, u32 dec_addr, u8 dec_len);
u32 init_norsdfile_hdl(void);
int set_res_startaddr(int offset);
#endif /* _SDFILE_H_ */