#ifndef RESFILE_H #define RESFILE_H #include "typedef.h" #include "fs/fs.h" #include "fs/sdfile.h" // resfile共用文件句柄 #if (defined(CONFIG_CPU_BR23) && defined(CONFIG_APP_WATCH)) #define RESFILE_COMMON_HDL_EN 0 #else #define RESFILE_COMMON_HDL_EN 0 #endif #define FILE_TYPE_JPEG 5 #ifndef AT_UI_RAM #define AT_UI_RAM //AT(.ui_ram) #endif //文本数据格式 enum { TEXT_1BPP, TEXT_2BPP, TEXT_4BPP, TEXT_8BPP, }; //图像数据格式 enum { PIXEL_FMT_ARGB8888, PIXEL_FMT_ARGB8565, PIXEL_FMT_ARGB1555, PIXEL_FMT_ARGB4444, PIXEL_FMT_RGB888, PIXEL_FMT_RGB565, PIXEL_FMT_AL88, PIXEL_FMT_AL44, PIXEL_FMT_AL22, PIXEL_FMT_L8, PIXEL_FMT_L4, PIXEL_FMT_L2, PIXEL_FMT_L1, PIXEL_FMT_A8, PIXEL_FMT_A4, PIXEL_FMT_A2, PIXEL_FMT_A1, PIXEL_FMT_JPEG, PIXEL_FMT_GIF, }; struct image_file { u8 format; u8 clut_format; u8 compress; u8 has_clut; u8 strpic_mode; u16 data_crc; u16 width; u16 height; u32 offset; u32 len; u32 unzipOffset; u32 unzipLen; }; struct file_cache { struct list_head entry; u32 addr; u32 len; u8 *buf; u16 crc; }; typedef struct ui_resfile { FILE *file; int offset; u32 ver; char fname[64]; struct list_head root; #if RESFILE_COMMON_HDL_EN struct list_head entry; u32 offset; u32 size; #endif u32 in_addr; u32 in_len; } UI_RESFILE; struct flashheader { u16 crc16; u16 crcfileheaddata; u8 info[8]; u32 filenum; u32 version; u32 version1; u8 chiptype[8]; }; struct flashfilehead { u8 filetype; u8 reserv; u16 crc16; u32 addr; u32 len; u32 version; u8 name[64]; }; struct myfile { SDFILE *file; FILE *_file; u8 name[64]; u32 addr; u32 len; }; struct flash_file_info { u32 *tab; u16 tab_size; u32 offset; u32 last_tab_data_len; }; #define PHY_JL_EXTERN_FLASH 0 //杰理外挂fat 文件系统方案 #define PHY_JL_INSERT_FLASH 1 //杰理内置flash 文件系统方案 #define PHY_JL_NAND_FLASH 2 //nandflash文件系统方案 //针对内封flash 场景 ui 硬件模块需要获取知道当前路径是挂靠在内置flash 还是 外挂flash struct ui_load_info { u8 pj_id; u8 mmu_tab; u8 phy_dev; //针对内封flash 场景 ui 硬件模块需要获取知道当前路径是挂靠在内置flash 还是 外挂flash u32 phy_addr; //针对内封flash 场景 设备的物理地址不是从0开始的,需要告诉硬件模块偏移 const char *path; UI_RESFILE *file; UI_RESFILE *res; UI_RESFILE *str; struct flash_file_info image_file_info; struct flash_file_info str_file_info; }; int open_resfile(const char *name); void close_resfile(); int open_str_file(const char *name); void close_str_file(); int open_style_file(const char *name); int res_file_version_compare(int res_ver); int str_file_version_compare(int str_ver); int sty_file_check(UI_RESFILE *file); int font_ascii_init(const char *name); int load_pallet_table(int id, u32 *data); int ui_language_set(int language); int ui_language_get(); UI_RESFILE *res_fopen(const char *path, const char *mode); int res_fread(UI_RESFILE *_file, void *buf, u32 len); int res_fseek(UI_RESFILE *_file, int offset, int fromwhere); int res_cache(UI_RESFILE *_file, int addr, u32 len); int res_nocache(UI_RESFILE *_file, int addr, u32 len); int res_flen(UI_RESFILE *file); int res_fclose(UI_RESFILE *file); int _norflash_read_watch(u8 *buf, u32 addr, u32 len, u8 wait);//加速读 int ui_prj_info_table_init( struct ui_load_info *info, void *(*malloc)(int size, u32 ram_type, u32 module_type), void (*free)(void *p, u32 ram_type, u32 module_type)); int ui_prj_info_table_release(); void *ui_load_res_by_pj_id(int pj_id); void *ui_load_str_by_pj_id(int pj_id); void *ui_load_sty_by_pj_id(int pj_id); void *ui_get_image_file_info_by_pj_id(int pj_id); void *ui_get_str_file_info_by_pj_id(int pj_id); int ui_unload_file_info_not_contain_prj_id(u8 pj_id); int ui_res_flash_info_get(struct flash_file_info *file_info, char *path, char *str, int mmu_tab); void ui_res_flash_info_free(struct flash_file_info *file_info, char *str); int ui_res_get_image_flash_info(struct flash_file_info *image_info, struct flash_file_info *prj_info, struct image_file *img_file); int ui_res_get_flash_tab_info(struct flash_file_info *file_info, u32 file_base_addr, u32 filelen); int ui_set_sty_path_by_pj_id(int pj_id, const u8 *path); int __ui_res_flash_info_get(struct flash_file_info *file_info, char *path, char *str, u8 phy_dev, u32 phy_addr, int mmu_tab); int ui_res_file_open(struct ui_load_info *info, const u8 *path, const char *mode); int ui_unload_file_info(); void select_resfile(u8 index); void select_strfile(u8 index); int open_image_by_id(int prj, UI_RESFILE *specfile, struct image_file *f, int id, int page); int open_image_by_addr_id(struct image_file *f, u32 res_addr, int id, int page_num); int read_image_data(int prj, UI_RESFILE *specfile, struct image_file *f, u8 *data, int len, int offset); int br23_read_image_data(int prj, UI_RESFILE *specfile, struct image_file *f, u8 *data, int len, int offset); int br25_read_image_data(UI_RESFILE *specfile, struct image_file *f, u8 *data, int len, int offset); u32 image_decode(const void *pSour, void *pDest, u32 SourLen, u32 DestLen, u8 compress); int open_string_pic(int prj, struct image_file *file, int id); int open_string_by_id(int prj, UI_RESFILE *specfile, struct image_file *f, int id); int read_str_data(struct image_file *f, u8 *data, int len); int br23_read_str_data(struct image_file *f, u8 *data, int len, int offset); int br25_read_str_data(struct image_file *f, u8 *data, int len, int offset); int read_string_type(int prj, int id); int open_string_pic2(int prj, struct image_file *file, int id); int ui_res_cache_head(UI_RESFILE *file); int ui_res_cache(UI_RESFILE *file, int page_num); int ui_res_nocache(UI_RESFILE *file, int page_num); int ui_str_cache(UI_RESFILE *file, int language_index); int ui_str_nocache(UI_RESFILE *file, int language_index); int ui_sty_cache(UI_RESFILE *file, int page); int ui_sty_nocache(UI_RESFILE *file, int page); int ui_sty_cache_head(UI_RESFILE *file); int res_get_image_stride(int gpu_format, struct image_file *image, u8 *adr_mode, u8 *compress_mode, int *compress_size); int res_get_image_len(u32 gpu_format, int height, u32 adr_mode, u32 compress_mode, u32 compress_size, u32 stride); #endif