/** * @file app_fatfs.h * @brief FATFS 文件系统兼容头文件(整合自 CCU601E_D) * * CCU621_M 平台:FATFS 功能由 flash_file_mgr + externalflash + sdmmc 共同实现。 * 本头文件为从 CCU601E_D 移植的应用层代码提供兼容的类型和 API 声明。 */ #ifndef APP_FATFS_H #define APP_FATFS_H #include #include #include "publicdata/type.h" #include "publicdata/public_define.h" #define FS_PATH_LEN 64 #define FS_FILE_NAME_LEN 32 #define FS_READ_BUF_SIZE 512 #define LOG_DIR_PATH "0:/log" #define LOG_FILE_MAX_SIZE (2*1024*1024) #define LOG_FILE_MAX_COUNT 3 #define LOG_MAX_FILES 20 #if FATFS_ENABLE_FAULT #define FAULT_DIR_PATH "0:/fault" #define FAULT_FILE_MAX_SIZE (1024*500) #define FAULT_FILE_MAX_COUNT 2 #define FAULT_MAX_FILES 20 #endif #if FATFS_ENABLE_ORDER #define ORDER_DIR_PATH "0:/order" #define ORDER_FILE_MAX_SIZE (1024*500) #define ORDER_FILE_MAX_COUNT 2 #define ORDER_MAX_FILES 20 #endif #define LOG_SYNC_INTERVAL 10 typedef enum { FS_STATUS_OK = 0, FS_STATUS_INIT_FAILED, FS_STATUS_FS_ERROR, FS_STATUS_FILE_FULL, FS_STATUS_WRITE_FAILED, FS_STATUS_READ_FAILED, FS_STATUS_FILE_NOT_FOUND, FS_STATUS_PARAM_ERROR, FS_STATUS_NO_SPACE } FS_Status; typedef struct { char name[FS_FILE_NAME_LEN]; uint32_t size; uint16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; } FS_FileInfo; typedef struct { uint32_t start_pos; uint32_t end_pos; uint32_t actual_read; } FS_ReadRange; typedef enum { FILE_TYPE_LOG = 0, FILE_TYPE_FAULT, FILE_TYPE_ORDER, FILE_TYPE_MAX } FileType; typedef struct { FileType type; const char *dir_path; const char *file_prefix; const char *file_extension; uint32_t max_file_size; uint32_t max_file_count; } FileManagerConfig; /* 文件系统基础操作 */ FS_Status fs_init(void); FS_Status fs_deinit(void); FS_Status fs_mount(const char *path); FS_Status fs_unmount(const char *path); FS_Status fs_check_space(void); bool fs_get_is_mounted(void); /* 文件系统格式化 */ FS_Status fs_format_drive(const char *drive_path); FS_Status fs_format_drive_fat16(const char *drive_path); /* 目录操作 */ FS_Status fs_mkdir(const char *path); FS_Status fs_dir_exists(const char *path, bool *exists); FS_Status fs_list_dir(const char *path, FS_FileInfo *file_list, uint32_t *count, uint32_t max_count); /* 文件操作 */ FS_Status fs_create_file(const char *path); FS_Status fs_delete_file(const char *path); FS_Status fs_file_exists(const char *path, bool *exists); FS_Status fs_get_file_size(const char *path, uint32_t *size); FS_Status fs_get_file_info(const char *path, FS_FileInfo *info); FS_Status fs_rename_file(const char *old_path, const char *new_path); FS_Status fs_copy_file(const char *src_path, const char *dst_path); /* 文件读写(FatFs FIL 类型用 void* 代理,避免引入 ff.h) */ FS_Status fs_open(void *file, const char *path, uint8_t mode); FS_Status fs_close(void *file); FS_Status fs_read(void *file, void *buffer, uint32_t size, uint32_t *bytes_read); FS_Status fs_write(void *file, const void *buffer, uint32_t size, uint32_t *bytes_written); FS_Status fs_seek(void *file, uint32_t offset); FS_Status fs_truncate(void *file); FS_Status fs_sync(void *file); /* 文件内容操作 */ FS_Status fs_read_file_content(const char *path, char *buffer, uint32_t buffer_size, FS_ReadRange *range); FS_Status fs_write_file_content(const char *path, const void *data, uint32_t size, bool append); FS_Status fs_write_string(const char *path, const char *str, bool append); /* 文件系统信息 */ FS_Status fs_get_volume_info(const char *path, uint32_t *total_kb, uint32_t *free_kb, float *usage_percent); /* 通用文件管理 */ FS_Status fs_file_manager_check_and_roll_ex(const FileManagerConfig *config, const char *current_file, uint32_t pending_write_size, char *new_filename, uint32_t new_filename_len); FS_Status fs_file_manager_create_new(const FileManagerConfig *config, char *new_filename, uint32_t max_len); FS_Status fs_file_manager_ensure_dir_exists(const FileManagerConfig *config); FS_Status fs_file_manager_get_count(const FileManagerConfig *config, uint32_t *count); FS_Status fs_file_manager_delete_oldest(const FileManagerConfig *config); FS_Status fs_file_manager_find_latest(const FileManagerConfig *config, char *filename, uint32_t max_len); FS_Status fs_file_manager_find_oldest(const FileManagerConfig *config, char *filename, uint32_t max_len); FS_Status fs_file_manager_resolve_log_append_path(const FileManagerConfig *config, char *filename, uint32_t max_len); void fs_log_set_filename_start_seq(uint8_t start_seq); FS_Status fs_generate_timestamp_filename(const FileManagerConfig *config, char *filename, uint32_t max_len); bool fs_is_filename_valid(const char *filename, const FileManagerConfig *config); FS_Status fs_cleanup_invalid_files(const FileManagerConfig *config); uint32_t fs_get_current_fat_time(void); FS_Status fs_get_current_time_string(char *buffer, uint32_t size); FS_Status fs_get_formatted_time_string(char *buffer, uint32_t size); extern const FileManagerConfig g_log_file_config; #if FATFS_ENABLE_FAULT extern const FileManagerConfig g_fault_file_config; #endif #if FATFS_ENABLE_ORDER extern const FileManagerConfig g_order_file_config; #endif #endif /* APP_FATFS_H */