/*================================================================ Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved. Quectel Wireless Solutions Proprietary and Confidential. =================================================================*/ #ifndef _QUEC_FS_H #define _QUEC_FS_H #include "quec_rtos.h" #include "lfs.h" #include "lfs_api.h" typedef unsigned int File_Handle; #define QFS_ID_MAX 3 #define EXTERNAL_NORFLASH 1 #define INTERNAL_NORFLASH 0 #ifdef QUEC_FS_WEAR_BALANCE_VERIFY #define FS_FLASH_BLOCK_SIZE (1024*4) //each block size:4K byte #endif //freddy @20200713 Add for external fs typedef struct { unsigned int start_addr;//外部spi的起始地址 unsigned int size;//挂载为文件系统的大小 unsigned char spi_port;//SPI端口 }ex_spifs_info; typedef struct { quec_mutex_t mutex; char disk_sym; lfs_t lfs; struct lfs_config cfg; lfs_flash_info flash_info; bool is_inited; char *patition_name; unsigned char is_exflash; ex_spifs_info spi_info;//外部SPI的信息 } qfs_ctx_t; typedef struct { int fs_id; lfs_file_t file; } QFILE; typedef struct { int fs_id; lfs_dir_t dir; } QDIR; #define GET_FILE_PATH(path) (path+2) #define FILE_OPEN_FLAGS_R (LFS_O_RDONLY) #define FILE_OPEN_FLAGS_W (LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) #define FILE_OPEN_FLAGS_A (LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) #define FILE_OPEN_FLAGS_RPluse (LFS_O_RDWR) #define FILE_OPEN_FLAGS_WPluse (LFS_O_RDWR | LFS_O_CREAT | LFS_O_TRUNC) #define FILE_OPEN_FLAGS_APluse (LFS_O_RDWR | LFS_O_CREAT | LFS_O_APPEND) #define U_DISK_SYM 'U' #define B_DISK_SYM 'B' int qfs_per_init(int fs_id, char disk_sym, unsigned char is_format); void qfs_per_deinit(int fs_id); int qfs_deinit(char disk_sym); int qfs_get_fs_id_from_disk_sym(char disk_sym); int qfs_init(char disk_sym, char *patition_name, unsigned char is_format); int qextfs_init(char disk_sym, char *patition_name, unsigned char is_format, unsigned char spi_port, unsigned int startaddr, unsigned int size); int qfs_format(int fs_id); int qfs_mount(int fs_id); int qfs_unmount(int fs_id); int qfs_size(int fs_id); int qfs_used_size(int fs_id); int qfs_free_size(int fs_id); int qfs_remove(int fs_id, const char *path); int qfs_rename(int fs_id, const char *oldpath, const char *newpath); int qfs_copy(int old_fs_id, int new_fs_id, const char *oldpath, const char *newpath); int qfs_access(int fs_id, const char *path); int qfs_stat(int fs_id, const char *path, struct lfs_info *info); int qfs_file_open(int fs_id, lfs_file_t *file, const char *path, int flags); int qfs_file_opencfg(int fs_id, lfs_file_t *file, const char *path, int flags, const struct lfs_file_config *config); int qfs_file_close(int fs_id, lfs_file_t *file); int qfs_file_sync(int fs_id, lfs_file_t *file); lfs_ssize_t qfs_file_read(int fs_id, lfs_file_t *file, void *buffer, lfs_size_t size); lfs_ssize_t qfs_file_write(int fs_id, lfs_file_t *file, const void *buffer, lfs_size_t size); lfs_soff_t qfs_file_seek(int fs_id, lfs_file_t *file, lfs_soff_t off, int whence); int qfs_file_truncate(int fs_id, lfs_file_t *file, lfs_off_t size); lfs_soff_t qfs_file_tell(int fs_id, lfs_file_t *file); int qfs_file_rewind(int fs_id, lfs_file_t *file); lfs_soff_t qfs_file_size(int fs_id, lfs_file_t *file); int qfs_mkdir(int fs_id, const char *path); int qfs_dir_open(int fs_id, lfs_dir_t *dir, const char *path); int qfs_dir_close(int fs_id, lfs_dir_t *dir); int qfs_dir_read(int fs_id, lfs_dir_t *dir, struct lfs_info *info); int qfs_dir_seek(int fs_id, lfs_dir_t *dir, lfs_off_t off); lfs_soff_t qfs_dir_tell(int fs_id, lfs_dir_t *dir); int qfs_dir_rewind(int fs_id, lfs_dir_t *dir); int qfs_traverse(int fs_id, int (*cb)(void*, lfs_block_t), void *data); int qfs_deorphan(int fs_id); int qfs_set_flash_atomic_size(unsigned int read_size,unsigned int prog_size); #endif