/*================================================================ Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved. Quectel Wireless Solutions Proprietary and Confidential. =================================================================*/ #ifndef _QL_FS_H #define _QL_FS_H #include "quec_rtos.h" #include "quec_fs.h" #include "lfs.h" #include "lfs_api.h" #ifdef QUEC_NAND_YAFFS #include "yaffs_fdi2.h" /*----------------------------------------------------------------------------------------- * Nand hardware Information Structure *-----------------------------------------------------------------------------------------*/ typedef struct { unsigned int page_size; unsigned int spare_size; unsigned int pages_per_block; unsigned int block_size; unsigned int total_blocks; unsigned int total_size; unsigned char manufacturer_id; unsigned char device_id[4]; char model_name[32]; char manufacturer_name[32]; } ql_spi_nand_flash_hw_info_t; typedef enum { QL_SPI_NAND_AREA_MAIN_ONLY = 0, QL_SPI_NAND_AREA_WITH_SPARE = 1, } ql_spi_nand_access_e; typedef struct nand_device* ql_spi_nand_flash_hndl_t; struct ql_yaffs_dev { const char *name; u32 start_block; u32 end_block; }; #endif int ql_fs_format(char disk_sym); int ql_fs_mount(char disk_sym); int ql_fs_unmount(char disk_sym); int ql_fs_size(char disk_sym); int ql_fs_used_size(char disk_sym); int ql_fs_free_size(char disk_sym); QFILE * ql_fopen(const char *fname, const char *mode); int ql_fclose(QFILE * fp); int ql_fsync(QFILE * fp); int ql_fread(void * buffer, size_t size, size_t num, QFILE * fp); int ql_fwrite(void * buffer, size_t size, size_t num, QFILE * fp); int ql_fputc(int chr, QFILE *fp); int ql_fputs(const char *str, QFILE *fp); int _ql_fprintf(QFILE *fp, const char *format, va_list arg_ptr); int ql_fprintf(QFILE *fp, const char *format, ...); int ql_fgetc(QFILE *fp); char *ql_fgets(char *str, int n, QFILE *fp); int ql_fscanf(QFILE *fp, const char *format, ...); int _ql_fscanf(QFILE *fp, const char *format, va_list arg_ptr); int ql_fseek(QFILE *fp, long offset, int origin); int ql_ftruncate(QFILE *fp, uint32 length); long ql_ftell(QFILE *fp); int ql_frewind(QFILE *fp); int ql_fsize(QFILE *fp); int ql_mkdir(const char *path, uint32 mode); QDIR * ql_opendir(const char *path); int ql_closedir(QDIR *dp); int ql_readdir(QDIR *dp, struct lfs_info *info); int ql_seekdir(QDIR *dp, long int loc); long ql_telldir(QDIR *dp); int ql_rewinddir(QDIR *dp); int ql_remove(const char *fname); int ql_rename(const char *oldpath, const char *newpath); int ql_copy(const char *oldpath, const char *newpath); int ql_access(const char *path, uint32 mode); int ql_stat(const char *path, struct lfs_info *info); int ql_set_flash_atomic_size(unsigned int read_size,unsigned int prog_size); File_Handle ql_FDI_fopen(const char *filename_ptr, const char *mode); int ql_FDI_fclose(File_Handle stream); size_t ql_FDI_fread(void *buffer_ptr, size_t element_size, size_t count, File_Handle stream); size_t ql_FDI_fwrite(const void *buffer_ptr,size_t element_size,size_t count,File_Handle stream); int ql_FDI_fseek(File_Handle stream, long offset, int wherefrom); unsigned int ql_FDI_GetFileSize(int fd); #ifdef QUEC_NAND_YAFFS int ql_spi_nand_init(int spi_port, int spi_pin,int spi_clk); int ql_spi_nand_flash_get_hw_info(ql_spi_nand_flash_hndl_t hndl,ql_spi_nand_flash_hw_info_t *info); int ql_spi_nand_flash_get_block_num(ql_spi_nand_flash_hndl_t hndl); int ql_spi_nand_flash_open(int spi_port, int spi_pin, int spi_clk,unsigned char flashnu, ql_spi_nand_flash_hndl_t *hndl); int ql_spi_nand_flash_close(ql_spi_nand_flash_hndl_t hndl); int ql_spi_nand_flash_read(ql_spi_nand_flash_hndl_t hndl, unsigned int flash_addr,unsigned char *buf, unsigned int size, ql_spi_nand_access_e area); int ql_spi_nand_flash_write(ql_spi_nand_flash_hndl_t hndl, unsigned int flash_addr,const unsigned char *buf, unsigned int size, ql_spi_nand_access_e area); int ql_spi_nand_flash_erase(ql_spi_nand_flash_hndl_t hndl, unsigned int flash_addr,unsigned int size); const struct nand_device *ql_spi_nand_flash_get_nand_device(ql_spi_nand_flash_hndl_t hndl); File_Handle ql_nand_fopen(const char *filename_ptr, const char *mode); int ql_nand_fclose(File_Handle stream); int ql_nand_fread(void *buff, size_t element_size, size_t count, File_Handle stream); int ql_nand_fwrite(const void *buff, size_t element_size, size_t count, File_Handle stream); int ql_nand_fseek(File_Handle stream, long offset, int wherefrom); int ql_nand_lseek(File_Handle stream, long offset, int wherefrom); int ql_nand_ftell(File_Handle stream); int ql_nand_fremove(const char *filename_ptr); int ql_nand_frename(char *name, char *new_name); int ql_nand_fsize(char *file_name); int ql_nand_mkdir(char *dir_name); int ql_nand_access(char *file_name); int ql_nand_get_free_size(void); void ql_nand_format(void); int ql_nand_removedir(char *dir_name); int ql_nand_closedir(FILE_ID hDirID); int ql_nand_readddir(FILE_ID hDirID, NandFs_info *fileinfo_ptr); FILE_ID ql_nand_opendir(char *dir_name); int ql_nand_lstat(char *path,NandFs_info *fileinfo_ptr); int ql_nand_fgetc(File_Handle stream); char *ql_nand_fgets(char *str, int n, File_Handle stream); int ql_nand_fsync(File_Handle stream); int ql_nand_yaffs_sync(void); int ql_nand_feof(File_Handle stream,char *file_name); int ql_nand_frewind(File_Handle stream); int ql_nand_get_total_size(void); int ql_nand_get_used_size(void); int ql_nand_fdsize(FILE_ID fd); int ql_nand_get_fmountstatus(void); int ql_yaffs_start_up(void); int ql_yaffs_create_dev(struct ql_yaffs_dev *dev_config); int ql_yaffs_mount(const char *path); int ql_yaffs_unmount(const char *path); int ql_yaffs_open(const char *filename, const char *mode); int ql_yaffs_close(int fd); int ql_yaffs_read(void *buff, size_t element_size, size_t count, int fd); int ql_yaffs_write(const void *buff, size_t element_size, size_t count, int fd); int ql_yaffs_lseek(int fd, long offset, int whence); int ql_yaffs_unlink(const char *path); int ql_yaffs_fsize(const char *path); int ql_yaffs_rename(const char *name, const char *new_name); int ql_yaffs_mkdir(const char *dir_name); int ql_yaffs_opendir(const char *dir_name); int ql_yaffs_closedir(int fd); int ql_yaffs_rmdir(const char *dir_name); int ql_yaffs_access(const char *path); int ql_yaffs_freespace(const char *path); int ql_yaffs_fsync(int fd); int ql_yaffs_sync(const char *path); int ql_yaffs_format(const char *path, int unmount_flag, int force_unmount_flag, int remount_flag); int ql_yaffs_ftell(int fd); int ql_yaffs_fgetc(int fd); char *ql_yaffs_fgets(char *str, int n, int fd); int ql_yaffs_feof(int fd, const char *file_name); int ql_yaffs_frewind(int fd); int ql_yaffs_readddir(int fd, NandFs_info *fileinfo_ptr); int ql_yaffs_lstat(char *path, NandFs_info *fileinfo_ptr); int ql_yaffsfs_getlasterror(void); #endif #endif