KDocs 研发资料库
  • 视频技术应用资料与文档入口汇总
  • Window下使用Makefile编译代码教程
  • AC52系列PWM使用说明文档
  • AC57系列PWM使用说明文档
  • 52 系列_串口外设的使用说明
  • 57 系列_串口外设的使用说明
  • AC52系列SPI使用说明文档
  • AC57系列SPI使用说明文档
  • AC52系列外部中断使用说明文档
  • AC57系列外部中断使用说明文档
  • AC54&56外部中断使用说明文档
  • AC52 红外捕获中断demo使用说明文档
  • 视频系列SDK汇总及获取方法
  • AC52系列软件典型问题整理文档获取
  • AC791N开发-入门到进阶开发指导文档(完善ing)
  • AC792N开发-入门到进阶开发指导文档(完善ing)
  • 792 littlefs文件系统配置
  • 792N系列 U盘单备份升级说明
  • 792x串口uart升级说明参考

52 系列_图层像素级使用说明文档

📎 原始文档:https://www.kdocs.cn/l/cooasruiLQN2 

52 系列_图层像素级使用说明文档

目录TOC \o "1-3" \h \u 

 HYPERLINK \l _Toc20483 文档简介  PAGEREF _Toc20483 \h 2
 HYPERLINK \l _Toc18384 参考demo文件  PAGEREF _Toc18384 \h 2
 HYPERLINK \l _Toc23997 (步骤一)、初始化图层  PAGEREF _Toc23997 \h 3
 HYPERLINK \l _Toc22373 (步骤二)、推RGB数据到图层  PAGEREF _Toc22373 \h 4
 HYPERLINK \l _Toc24022 (步骤三)、创建图层绘图线程  PAGEREF _Toc24022 \h 5
 HYPERLINK \l _Toc16190 (最后)、关闭图层  PAGEREF _Toc16190 \h 6




文档简介

满足用户在杰理52系列上图层像素级透明显示的需求,文档将以杰理AC5211为例,介绍SDK中如何配置透明图层。
52系列 SDK版本:V1.1.4。
image

参考demo文件

 EMBED Package 
image 



(步骤一)、初始化图层

注意:fb0图层格式应设置为FB_COLOR_FORMAT_OSD16,像素格式为RGB565,底层已经约定0x0000为透明色(全黑可以用0x0001等RGB分量非0值代替)。

1./
2.
 初始化52图层
3.* xoffset   设定图层x坐标(相对于屏幕)
4.* yoffset   设定图层y坐标
5.* xres   设定图层宽度
6.* yres   设定图层高度
7.* 返回值   -1图层创建失败 0成功
8.*/
9.static int lv_fb_init(int xoffset, int yoffset, int xres, int yres)
10.{​
11.    int err;
12.    struct fb_var_screeninfo info = {​0​};
13.
14. //52系列是FB_COLOR_FORMAT_OSD16图层格式才支持像素透明
15.    fb = dev_open("fb0", (void *)FB_COLOR_FORMAT_OSD16);
16.
17.    if (!fb) {​
18.        log_e("fb open failed\n\n");
19.        return -1;
20.    ​}
21.
22.    info.s_xoffset = xoffset;
23.    info.s_yoffset = yoffset;
24.    info.s_xres    = xres;
25.    info.s_yres    = yres;
26.    info.v_xoffset = 0;
27.    info.v_yoffset = 0;
28.    info.v_xres    = xres;
29.    info.v_yres    = yres;
30.
31.    err = dev_ioctl(fb, FBIOSET_VSCREENINFO, (u32)&info);
32.    err = dev_ioctl(fb, FBIOSET_FBUFFER_NUM, 1);
33.    err = dev_ioctl(fb, FBIOSET_TRANSP, 0);
34.    err = dev_ioctl(fb, FBIOSET_ENABLE, true);
35.    err = dev_ioctl(fb, FBIOGETMAP, (u32)&map);
36.
37.    if (err) {​
38.        printf("fb ioctl fail:%d\n", err);
39.        return -1;
40.    ​}
41.    printf("map.baddr:%p", map.baddr);
42.
43.    return 0;
44.​}

(步骤二)、推RGB数据到图层

1./
2.
 按照52图层格式所规定颜色格式往图层推rgb像素数据
3.* 返回值   空
4.*/
5.static void lv_fb_map(void)
6.{​
7.    if (map.baddr) {​
8.        dev_ioctl(fb, FBIOPUTMAP, (u32)&map);
9.    ​}
10.​}



(步骤三)、创建图层绘图线程

1. /
2.
 图层绘图线程
3.* priv   线程传递参数指针
4.* 返回值   无意义
5./
6.static void usr_draw_task(void priv)
7.{​
8. int fb_w = 320;
9. int fb_h = 240;
10.
11. //初始化图层
12. lv_fb_init(0, 0, fb_w, fb_h);
13.
14. int16_t
 rgb565_buf = (int16_t
)map.baddr;//RGB565数据
15. //RGB565 4色测试图数据:
16. //草坪绿:0x7fe0 纯黄:0xffe0 黑色:0x0001 透明像素:0x0000
17. for(int h = 0; h<fb_h; h++){​
18.  for(int w = 0; w<fb_w; w++){​
19.   if(w<fb_w/4){​
20.    rgb565_buf = 0xffff;
21.   ​}
22.   else if(fb_w/4<w && w<fb_w/4
2){​
23.    rgb565_buf = 0x0001;
24.   ​}
25.   else if(fb_w/4
2<w && w<fb_w/4*3){​
26.    rgb565_buf = 0x0000;
27.   ​}
28.   else if(fb_w/4
3<w && w<fb_w){​
29.    *rgb565_buf = 0x8800;
30.   ​}
31.   rgb565_buf++;
32.  ​}
33. ​}
34. //将rgb数据推到图层
35. lv_fb_map();
36.    for (;😉 {​
37.        os_time_dly(10);
38.    ​}
39.​}
40.
41.//用户自行在合适位置使用(建议在app_main函数),以启动图层测试
42.void usr_draw_task_run(void)
43.{​
44.    thread_fork("usr_draw_task", 20, 1024, 0, NULL, usr_draw_task, NULL);
45.​}

(最后)、关闭图层

1./
2.
 关闭图层 并释放相应的图层buffer
3.* 用户在关闭图层显示的时候调用
4.* 返回值   空
5.*/
6.void fb_close(void)
7.{​
8. dev_ioctl(fb, FBIOSET_FBUFFER_NUM, 0);//写0 清空图层申请的所有buffer
9. dev_close(fb);
10. fb = NULL;
11. malloc_stats();
12.​}

杰理科技
2023年8月28日