#include "lvgl.h"

static lv_img_dsc_t ui_img_gif = {0};

/*
gif文件加载
*/
OPERATE_RET gif_img_load(char *filename, lv_img_dsc_t *img_dst)
{
    OPERATE_RET ret = OPRT_COM_ERROR;
    lv_fs_file_t file;
    lv_fs_res_t res;

    res = lv_fs_open(&file, filename, LV_FS_MODE_RD);
    if (res != LV_FS_RES_OK) {
        LV_LOG_ERROR("Failed to open file: %s\n", filename);
        return ret;
    }

    // 读取文件大小
    lv_fs_seek(&file, 0, LV_FS_SEEK_END);  // 移动到文件末尾
    uint32_t file_size;
    lv_fs_tell(&file, &file_size);   // 获取文件大小
    lv_fs_seek(&file, 0, LV_FS_SEEK_SET);   // 移动回文件开头

    // 分配内存以存储文件内容
    uint8_t *buffer = tkl_system_psram_malloc(file_size);
    if (buffer == NULL) {
        LV_LOG_ERROR("Memory allocation failed\n");
        lv_fs_close(&file);
        return ret;
    }

    uint32_t bytes_read;
    res = lv_fs_read(&file, buffer, file_size, &bytes_read);
    if (res != LV_FS_RES_OK || bytes_read != file_size) {
        LV_LOG_ERROR("Failed to read file: %s\n", filename);
        tkl_system_psram_free(buffer);  // 释放内存
    }
    else {
        LV_LOG_WARN("------------------------gif file '%s' load successful !\r\n", filename);
        img_dst->data = buffer;
        img_dst->data_size = file_size;
        ret = OPRT_OK;
    }
    lv_fs_close(&file);
    return ret;
}

void test_play_gif(void)
{
	memset(&ui_img_gif, 0 ,sizeof(lv_img_dsc_t));
	ui_img_gif.data = NULL;
	if (gif_img_load("/pic/3.gif"), &ui_img_gif) == 0) {		//gif文件路径为"/pic/3.gif"
		lv_obj_t * gif_obj = lv_gif_create(switch_screen);		//switch_screen为屏幕对象
		lv_obj_align_to(gif_obj, switch_screen, LV_ALIGN_TOP_LEFT, 10, 30);    //放置屏幕左上角
		lv_gif_set_src(gif_obj, (const void *)&ui_img_gif);
		lv_gif_restart(gif_obj);
	}
}