- Be sure to update lvgl from the latest version from the
master
branch.
Description
My lvgl cloud load an img from c array,and display it normal. But When i change to bin file ,and put it on my fatfs , display show “No data”. The flash and fatfs is work normal.
The bin file format is RGB565 with true color and alpha which is my succeed c array’ format.
I doubt the problem is on ‘lv_port_fs.c’ or i use the “lv_img_set_src” in worong way.
Unfortunately,my lvgl project is base on 7.0,i will update it when i free.
What MCU/Processor/Board and compiler are you using?
MCU:GD32F303RC
Complier:Keil 5.26
What do you want to achieve?
I want to make my lvgl show a img form fatfs normaly.
What have you tried so far?
I had changed bin’s format to true color & true color with alpha,but it does work.
Code to reproduce
The code block(s) should be between ```c
and ```
tags:
Here is use the bin file:
lv_img_set_src(ui->Home_Background_img, "F:\\bg.bin");
Folowwing is the ‘lv_port_fs.c’ witch is connected lvgl and fatfs:
lv_port_fs.c
void lv_port_fs_init(void)
{
lv_fs_drv_t fs_drv;
lv_fs_drv_init(&fs_drv);
fs_drv.letter = 'F';
fs_drv.file_size = sizeof(file_t);
fs_drv.ready_cb = NULL;
fs_drv.open_cb = fs_open;
fs_drv.close_cb = fs_close;
fs_drv.read_cb = fs_read;
fs_drv.write_cb = fs_write;
fs_drv.seek_cb = fs_seek;
fs_drv.tell_cb = fs_tell;
fs_drv.free_space_cb = fs_free;
fs_drv.size_cb = fs_size;
fs_drv.remove_cb = fs_remove;
fs_drv.rename_cb = fs_rename;
fs_drv.trunc_cb = fs_trunc;
// fs_drv.rddir_size = sizeof(dir_t);
// fs_drv.dir_close_cb = fs_dir_close;
// fs_drv.dir_open_cb = fs_dir_open;
// fs_drv.dir_read_cb = fs_dir_read;
lv_fs_drv_register(&fs_drv);
}
static void fs_init(void)
{
FileSteamInit(); //mount put on this function
}
static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t FSOperateMode)
{
int8_t OperateMode = 0;
char *path_buf = NULL;
uint16_t path_len = strlen(path);
path_buf = (char *)lv_mem_alloc(sizeof(char) * (path_len + 6));
sprintf(path_buf, "0:/%s", path);
if(FSOperateMode == LV_FS_MODE_WR)
OperateMode = FA_OPEN_ALWAYS | FA_WRITE;
else if(FSOperateMode == LV_FS_MODE_RD)
OperateMode = FA_OPEN_EXISTING | FA_READ;
else if(FSOperateMode == (LV_FS_MODE_WR | LV_FS_MODE_RD))
OperateMode = FA_WRITE | FA_READ;
lv_FSResult=f_open(file_p,path_buf,OperateMode);
return lv_FSResult;
}
static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p)
{
lv_FSResult=f_close(file_p);
return lv_FSResult;
}
static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br)
{
lv_FSResult=f_read(file_p,buf,btr,br);
return lv_FSResult;
}
static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw)
{
lv_FSResult=f_write(file_p,buf,btw,bw);
return lv_FSResult;
}
static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos)
{
return f_lseek(file_p,pos);
}
static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * size_p)
{
*size_p = f_size((FIL *)file_p);
return LV_FS_RES_OK;
}
static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
{
*pos_p=f_tell((FIL *)file_p);
return LV_FS_RES_OK;
}
static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path)
{
return f_unlink(path);
}
static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p)
{
return f_truncate((FIL *)file_p);
}
static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const char * newname)
{
return f_rename(oldname,newname);
}
static lv_fs_res_t fs_free (lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p)
{
lv_fs_res_t res;
uint32_t fre_clust;
uint32_t fre_sect;
uint32_t tot_sect;
FATFS *fs1 = &FileSystemObject;
res = f_getfree((const TCHAR *)&drv->letter,&fre_clust,&fs1);
if(res == 0)
{
tot_sect = (fs1->n_fatent-2)*fs1->csize;
fre_sect = fre_clust * fs1->csize;
#if FF_MAX_SS != 512
tot_sect *= 4096/512;
tot_sect *= 4096/512;
tot_sect *= 4096/512;
tot_sect *= 4096/512;
#endif
*total_p = tot_sect >> 1;
*free_p = fre_sect >> 1;
}
return res;
}
Screenshot and/or video
If possible, add screenshots and/or videos about the current state.
Please ,helo,save me.