52 系列_图层像素级使用说明文档
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。
参考demo文件
EMBED Package
(步骤一)、初始化图层
注意: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/42){ 23. rgb565_buf = 0x0001; 24. } 25. else if(fb_w/42<w && w<fb_w/4*3){ 26. rgb565_buf = 0x0000; 27. } 28. else if(fb_w/43<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日