全志Melis LVGL显示初始化

全志Melis LVGL显示初始化

  1. 初始化显示图层
static void disp_init(void)
{
    /*You code here*/
    __s32		width, height;
	__disp_layer_info_t layer_para;
    __u32 arg[3];
    __s32 ret;
	__u32 value;

	p_disp = esKSRV_Get_Display_Hld();
	if(!p_disp)
	{
		__wrn("open display device fail!\n");
		return EPDK_FAIL;
	}

	g_screen_width  = esMODS_MIoctrl(p_disp, MOD_DISP_GET_SCN_WIDTH, 0, 0);
    g_screen_height = esMODS_MIoctrl(p_disp, MOD_DISP_GET_SCN_HEIGHT, 0, 0);

	width  = g_screen_width;//esMODS_MIoctrl(p_disp, DISP_CMD_SCN_GET_WIDTH, 0, 0);
	height = g_screen_height;//esMODS_MIoctrl(p_disp, DISP_CMD_SCN_GET_HEIGHT, 0, 0);

    arg[0] = MOD_DISP_LAYER_WORK_MODE_NORMAL;
	arg[1] = 0;
    arg[2] = 0;
    lvgl_layer = esMODS_MIoctrl(p_disp, MOD_DISP_LAYER_REQUEST, 0, (void*)arg);
	if(lvgl_layer != NULL)
	{
		eLIBs_printf("layer ok! lvgl_layer = %d\n",lvgl_layer);
	}
	return EPDK_OK;
}
  1. 初始化绘制缓冲区
	static lv_disp_draw_buf_t draw_buf_dsc_3;

    static lv_color_t *buf3_1 = NULL;
    static lv_color_t *buf3_2 = NULL;
    //申请两块满屏buffer
    buf3_1 = esMEMS_Palloc((g_screen_width*g_screen_height*4+1023)>>10, 0);
	buf3_2 = esMEMS_Palloc((g_screen_width*g_screen_height*4+1023)>>10, 0);
    //将两块满屏buffer注册进lvgl中,注意传入的长度以像素点为单位
    lv_disp_draw_buf_init(&draw_buf_dsc_3, buf3_1, buf3_2, g_screen_width * g_screen_height);   /*Initialize the display buffer*/
  1. 实现刷图函数
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
    /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/
    __s32		width, height;
	static __disp_layer_info_t layer_para;
    __u64 arg[3];
    __s32 ret;
	static int cnt = 0;
	static __disp_fb_t fb_para;
	static lv_color_t*pic = NULL;

    if(cnt == 0)
    {
        cnt++;

        layer_para.mode = MOD_DISP_LAYER_WORK_MODE_NORMAL;
        esMEMS_CleanFlushDCacheRegion((__u32)color_p, g_screen_width*g_screen_height*4);

        layer_para.fb.format        = DISP_FORMAT_ARGB_8888;//DISP_FORMAT_YUV420_SP_UVUV;
        layer_para.fb.seq           = DISP_SEQ_ARGB;
        layer_para.fb.mode          = DISP_MOD_INTERLEAVED;//
        layer_para.fb.br_swap       = 0;//
        layer_para.fb.cs_mode       = DISP_BT601;
        layer_para.mode             = MOD_DISP_LAYER_WORK_MODE_NORMAL;//
        layer_para.pipe             = 0;
        layer_para.prio             = 4;
        layer_para.alpha_en         = 0;
        layer_para.alpha_val        = 0xff;
        layer_para.ck_enable        = 0;
        layer_para.src_win.x        = 0;
        layer_para.src_win.y        = 0;
        layer_para.src_win.width    = g_screen_width;
        layer_para.src_win.height   = g_screen_height;
        layer_para.scn_win.x        = 0;
        layer_para.scn_win.y        = 0;
        layer_para.scn_win.width    = g_screen_width;
        layer_para.scn_win.height   = g_screen_height;
        layer_para.fb.addr[0]       = (__u64)color_p;
        layer_para.fb.addr[1]       = NULL;
        layer_para.fb.addr[2]       = NULL;
        layer_para.fb.size.width = g_screen_width;
        layer_para.fb.size.height = g_screen_height;

        close_logo();
        arg[0] = lvgl_layer;
        arg[1] = (__u32)&layer_para;
        arg[2] = 0;
        esMODS_MIoctrl(p_disp,MOD_DISP_CMD_LAYER_SET_PARA,0,(void*)arg);

    }
    else
    {
        //time11 = esKRNL_TimeGet();
        esMEMS_CleanFlushDCacheRegion((__u32)color_p, g_screen_width*g_screen_height*4);
        layer_para.fb.addr[0]       = (__u32)color_p;
        arg[0] = lvgl_layer;
        arg[1] = (__u32)&layer_para;
        arg[2] = 0;
        esMODS_MIoctrl(p_disp,MOD_DISP_CMD_LAYER_SET_PARA,0,(void*)arg);
        //eLIBs_printf("take = %d\n",esKRNL_TimeGet()-time11);
		//eLIBs_printf("flush\n");
    }

    lv_disp_flush_ready(disp_drv);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值