Bigan(安)
东方欲晓 莫道君行早
展开
-
LVGL 源码分析大全
LVGL 是一款流行的免费和开源嵌入式图形库,为纯C的轻量级GUI框架,支持framebuffer直接渲染图层,因此LVGL能更容易为 MCU、MPU等显示设备开发漂亮的UI。可视化的 UI 编辑器官方上有推荐使用工具。当然,也可以选择 NXP(恩智浦半导体) 提供的工具。........................原创 2022-08-12 20:25:08 · 9957 阅读 · 4 评论 -
【XSLVGL2.0】如何实现一些简单的图表(lv_chart.c)
本章节旨在熟悉lv_chart组件。原创 2024-04-22 15:01:39 · 145 阅读 · 0 评论 -
【嵌入式】关于lv_img_conv工具安装后执行失败的问题
最近在使用。原创 2024-03-19 19:21:54 · 162 阅读 · 0 评论 -
【案例讲解】LVGL 如何用LVGL画加载圈
很多场景下,在用户操作时,需要使用一个加载圈来缓解用户焦虑问题。原创 2023-11-26 19:11:46 · 869 阅读 · 1 评论 -
LVGL lv_color_t 像素定义详解
本章节从一个特殊的4x2的32位真彩色的长方形图片,通过工具生成不同的内置图片数据来入手,以更深入的了解LVGL中像素的处理思路和逻辑。小白提醒转换时,最好先将图片转换成png格式,因为使用bmp或者其它格式图片存在生成的数据丢失透明度的问题。CF_RAW生成的内置图片数据被定义为一个/**在结构体,有一个颜色格式(Color format)字段(header.cf),决定了对数据的处理逻辑,它被定义为的枚举类型。而这个未知,资源可能出错了;包含和。原创 2023-06-08 22:55:35 · 1817 阅读 · 0 评论 -
【案例讲解】LVGL关于旋转的配置
在实现项目中,因为横竖屏的关系,需要对其做90度的旋转。配置旋转时发现一些局部刷新控件,旋转后效果不对。异常图标正常图标。原创 2023-10-13 13:04:26 · 1950 阅读 · 0 评论 -
LVGL misc area 方块区域通用函数(lv_area.c)
该章节主要描述LVGL中lv_area.c和lv_area.h中定义的对方块区域使用时常用到的函数接口。这些函数的理解,直接影响对LVGL渲染的方案理解,所以这里列举说明一下。原创 2023-10-08 20:57:37 · 438 阅读 · 0 评论 -
【定制功能】LVGL 邮件日志功能
邮件日志功能是为了方便定位客户问题的方案。在使用此功能时,需要保证网络连接是正常的。原创 2023-04-22 00:48:21 · 503 阅读 · 1 评论 -
【案例讲解】LVGL 焦点处理示例
这一章节主要是测试焦点的一些特性,及常用焦点的功能实现方法。原创 2023-03-22 23:23:30 · 1753 阅读 · 0 评论 -
LVGL core group焦点分组管理(lv_group.c)
lv_group_t是用于焦点管理的,将需要获取焦点的对像加入到同一个分组内,再将其通过挂到指定的事件驱动中,就可以控制焦点了。而被加入的对象又可以通过焦点状态事件和事件来控制对象的焦点逻辑了。创建好的分组通过接口挂事件驱动中,这样就可以指定一个自定义的焦点分组了。;) {if(!} }友情提示:无论是接口还是都是单例的,即被设置后前一个被设置的值就失效了;此方案可以保证焦点的唯一 性,但也一定要记住要在适合的位置设置回来,以防丢失焦点。原创 2023-03-22 21:49:12 · 2240 阅读 · 0 评论 -
【案例讲解】LVGL 向UI任务发送顺序执行的延时任务方法
为例:ESP32上的LVGL是采用多任务(相当于Linux上的多线程)的方式来实现,这样导致在多数情况下,操作UI需要使用UI线程的锁,来保证操作的安全性。中的操作UI接口,都是在UI线程非工作状态下进行的,这样不会产生冲突(LVGL本身是不支持多线程操作)。的栈执行方式,这导致在添加一些需要顺序执行的延时任务时会很麻烦,因此,需要实现一个。接口中加入队列的方式决定的, 因此只需要将加入队列的。决定定时任务的执行方式是在。原创 2023-03-22 16:13:39 · 1637 阅读 · 3 评论 -
【案例讲解】LVGL GIF开机动画和关机动画
LVGL本身有多个图层,我们采用最高的图层来画开机动画和关机动画,就可以将其覆盖其它图层,所以在创建对象时,可以使用。LVGL默认的GIF解码播放是按GIF图片中配置的循环标记来做的,而多数GIF是被设置了循环播放的功能的。因为退出时使用的回调是在UI线程的,而且是在当前对象只是,所以不能直接使用。因此,在GIF图片加载后,播放之前应当替换掉其循环播放的回调接口。可能会被其它定时任务打断,所以应当使用。回调中,修改OK键驱动中的。回调,即可用来监听OK键(在前面注册的动画完成。接口来完成销毁工作。原创 2023-03-22 15:20:58 · 3026 阅读 · 2 评论 -
【内部接口】升级方案
升级模块为我司自定义、自主开发模块,具有完全的知识产权。我司各项目可使用此功能模块,但不得转让相关代码权益。升级模块基于私有dispatcher协议实现,文档中描述的接口均为dispatcher协议接口。升级模块的dispatcher协议名称值模块名服务名版本号分为应用版本号和系统版本号。应用版本在编译时直接编译进了项目应用的可执行程序,一般可以通过执行这个可执行程序的--versino参数查看;系统版本号写在``应用版本号格式定义如下:vLARGEMIDDLESMALLDATE。原创 2023-02-21 18:01:23 · 284 阅读 · 0 评论 -
【案例讲解】LVGL 解决字体展示花屏的问题
R11上显示字体花屏原创 2023-02-21 13:07:26 · 1712 阅读 · 0 评论 -
【案例讲解】LVGL 给label增加滑动条
【代码】【案例讲解】给label增加滑动条。原创 2023-02-20 14:47:26 · 779 阅读 · 0 评论 -
【案例讲解】LVGL 如何用LVGL画一个勾
在很多的场景下需要确认和取消按钮。而如果只是显示几个字符的样例,你的DEMO是上去档次的,所以这里介绍一下确认按钮中的勾和叉,如何实现。原创 2022-12-26 10:01:18 · 1177 阅读 · 0 评论 -
【内部接口】关于LVGL基线代码说明
本文档为内部文档,旨在描述LVGL基线代码的框架设计及各项自定义配置的使用方法。原创 2022-12-10 17:18:50 · 448 阅读 · 0 评论 -
【内部接口】亮度管理接口
为方便应用调用,我们封装了一个亮度配置的接口。该接口直接使用ioctl实现。原创 2022-12-09 11:35:00 · 350 阅读 · 1 评论 -
【内部接口】音量设置接口说明文档
为方便应用调用,我们封装了一个音量配置的接口。原创 2022-11-30 11:24:40 · 289 阅读 · 1 评论 -
【定制功能】LVGL加密资源管理
时,先判定打开的文件是不是加密资源,如果是需要设置一个加密标签,这样其它的接口就能依据这个标签来进行不同的操作了。因为项目的需要,一些资源文件需要进行特殊处理,以防止资源在产品发布后外泄出去而导致不必要的损失。结构体的定义,我们需要替换掉下列接口,即可实现加密资源的管理了。该代码逻辑涉及机密内容,这里只给出修改注册接口的方法。对象,这样就能将文件管理方案替换成我们的方案。原创 2022-11-06 00:35:23 · 326 阅读 · 0 评论 -
【定制功能】LVGL 多任务异步执行时也按添加顺序执行
接口是以向入后出的方式执行任务。这不符合一些特定的对任务执行顺序有要求的场景,因此需要修正该逻辑。在添加任务是插在队列首部的,取出时也是从头开始查询取出,这样就决定了。时,发现如果向队列依次添加。三个任务时,执行顺序却会变成。经查代码,发现定时器。最近在使用异步执行接口。原创 2022-11-01 17:13:10 · 883 阅读 · 0 评论 -
【内部接口】LVGL WIFI配网
在设置的开始过程中,配网功能的开发往往是工作量比较大的地方,主要是:其一各个平台的配网功能接口有所不同、其二接口的逻辑关连性比较高,很多接口是在特殊状态下才能使用的。这样会导致应用开发UI时,会牵涉很多逻辑代码,从而增加开发难度和出BUG的分险。应用UI开发与硬件SDK解耦,假设从全志的平台换成海思的平台,只需要重新适配此部分代码即可封装配网的逻辑代码,提供给应用UI的只有事件和触发接口,以保存应用UI开发的简单性转换配网逻辑中的同步接口为异步接口,以防止应用UI出现卡顿的情况。原创 2022-10-31 11:38:00 · 1828 阅读 · 0 评论 -
【定制功能】LVGL 图片缩放
实际项目中,有很多图片与实际展示的大小不一致的,所以需要有一个功能,能自行对图片进行缩放。原创 2022-10-20 19:50:51 · 4585 阅读 · 0 评论 -
LVGL core obj_tree对象树管理(lv_obj_tree.c)
实际了对象树管理接口,实际就是树的基本操作增、删、改、查功能。相当于一个工具类。原创 2022-10-11 16:48:54 · 801 阅读 · 2 评论 -
【定制功能】字体裁减工具
LVGL一般都是跑在资源比较紧张的设备上的,所以字段的使用时,应当特别注意把一些不必要的字体给裁减出去。原创 2022-10-09 21:54:58 · 1068 阅读 · 0 评论 -
LVGL core disp显示设计(lv_disp.c)
lv_disp.c当前显示页面的配置scr_act在原始的LVGL是以screen的概念存在,但我们还是习惯叫它为一个页面提供获取top_layer、sys_layer、prev_scr图层接口配置主题管理默认的主题管理是递归查找的,实际项目中因此页面的复杂性,虽然也兼容了此主题管理的方案,但还是推荐使用单页面自行管理主题的方案壁纸设置多页面切换的动画支持计算无用户操作时间清理显示缓存。原创 2022-10-02 18:50:53 · 1724 阅读 · 0 评论 -
【定制功能】LVGL 新增图层
因为项目的复杂性,我们需要壁纸图层和对话框图层。原创 2022-09-29 21:04:34 · 788 阅读 · 0 评论 -
【定制功能】LVGL 页面管理
页面管理的主要针对实际复杂的UI项目的。支持多页面管理,包含页面跳转和返回(主要是方便项目功能管理)支持后台页面自动销毁、前台页面自动创建(主要是节约资源使用)支持语言切换逻辑(页面重建功能)支持主题切换逻辑支持页面切换动画效果首先,页面管理是针对act_src图层来讲的。仅在screens数组中供act_src切换的对象树才会被此页面管理功能所管理。这意味着,如果top_layer或者sys_layer图层上,有页面需要重建时,需要特殊处理(实际项目中top_layer或者。原创 2022-09-29 17:00:29 · 4473 阅读 · 1 评论 -
【定制功能】LVGL 词条管理
因项目多数是需要支持多语言的,那么词条的管理也是LVGL需要支持的一项目功能。一般LVGL的项目使用的词条数量也不是很多,因此这里没有必要过于纠结因数量导致的词条查询速度问题。咱们采用 JSON格式实现一个最简单的词条管理就可以了。当然,此代码也要考虑如何嵌入LVGL代码,在LVGL中做到切换语言后实时刷新页面的功能。设置当前有效语言。参数language语言名字。用户配置在词条目录下的配置文件名字。返回值-1表示失败。未找到语言词条配置文件,或者解析语言词条配置文件失败0表示未修改语言。原创 2022-09-14 10:51:26 · 747 阅读 · 1 评论 -
LVGL core obj and obj_class 对象管理(lv_obj.c/lv_obj_class.c)
LVGL的虽然是用c语言实现的代码,却采用lv_obj_t和结构体来实现一些对象思想。相比与C++语言来讲,该套机制实现了继承关系,却没有支持重载关系(之所以说它只支持继承关系而不支持重载,就是因为这个结构体在使用时,多被定义为const修饰,这样对象的功能函数就没法修改了。如果有用到重载关系的,需要开发者自行处理)。对应C++中的类,而lv_obj_t对应着对象,对象lv_obj_t通过类来构造。对象使用中定义的接口来构造成lv_obj_t对象,lv_obj_t对象使用lv_obj.c。...原创 2022-08-29 18:39:20 · 1657 阅读 · 0 评论 -
LVGL misc lru最少使用算法(lv_lru.c)
lru算法全称为的缩写,即最近最少使用的意思,是一种常用的页面转换算法,多用于缓存管理中。百度百科 页面置换算法页面转换算法:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法该算法的思路非常简单:发生缺页中断时,将最久未使用的页面转换出去。在LVGL中,该算法用于SDL的缓存管理中,代码位置。}......原创 2022-08-26 17:59:13 · 978 阅读 · 0 评论 -
LVGL misc log日志系统(lv_log.h)
LVGL的日志系统实现比较简单,它支持五个日志级别和一个日志导出接口。用户可以通过接口来设置输出日志级别;通过接口来导出日志到用户的日志管理系统中。当然为了减少代码量,日志级别设置也有一个宏来管理日志级别。是从代码编译上管理日志接口的,它管理对应级别的日志是否编译进代码;而只是控制运行时是否将日志输出。...原创 2022-08-24 16:49:01 · 923 阅读 · 0 评论 -
LVGL misc tlsf算法(lv_tlsf.c)
LVGL采用的内存分配器是使用的tlsf算法。因为这个算法只是一个实时系统常用的算法,可以看作是一个工具,对LVGL本身并没有逻辑上的关联,所以这里只介绍一下算法的基本知识,就不过多分析源码实现了。如果有想了解该算法的,可以再找找相关实现原理。...原创 2022-08-22 21:39:57 · 1250 阅读 · 0 评论 -
LVGL core event事件管理(lv_event.c)
LVGL 事件机制是其框架的一个核心组成部件。所有lv_obj_t对象状态更新、信息交互等都是通过该事件机制来完成的。因此建议在研究lv_obj_t的渲染过程之前,先把事件机制完全弄懂是非常必要的事件。LVGL 事件管理机制仅支持单线程运行,在MCU上使用不会存在并发的问题,但如果在Linux上使用,需要特别注意不能在其它线程中调用此类接口。...原创 2022-08-22 17:00:42 · 1411 阅读 · 0 评论 -
LVGL font 字库管理(lv_font.c)
LVGL框架中对于字库提供了三个接口(在`lvgl/src/font/lv_font.c`中)用于获取字的图片、字的信息及查询字的宽度。在这三个接口之下,提供了两种字库解决方案:内置字库和外挂字库(freetype)。原创 2022-08-19 19:14:02 · 1796 阅读 · 0 评论 -
LVGL misc list 列表管理(lv_ll.c)
LVGL中提供了一个基础的列表管理机制,它是一个标准的双向循环列表。由表头和数据节点组成。所形成的形态如下图所示:数据结构上,将节点的数据段data放在前面,而head和tail放在末尾,这样就不影响将列表生成的对象直接强转成定义的数据结构了。...原创 2022-08-19 12:29:59 · 1536 阅读 · 0 评论 -
LVGL core theme主题管理(lv_theme.c)
如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....原创 2022-08-18 19:16:11 · 2162 阅读 · 0 评论 -
LVGL misc timer 定时器(lv_timer.c)
定时器机制是LVGL中非常重要的一项功能,它承载了LVGL的延时任务执行,周期任务执行,时序任务执行等,可以说理解定时器的设计就一定程度上理解发LVGL的任务调度机制。原创 2022-08-17 19:01:24 · 3628 阅读 · 0 评论 -
LVGL hal disp(porting display)
LVGL本身是没有对接最终的显示框架的,所以到具体的某个平台上,需要自行porting。原创 2022-08-16 19:02:50 · 1395 阅读 · 0 评论 -
LVGL hal indev(porting evdev)
LVGL中对输入设备的管理是单例实现的,而在Linux的输入设备是多个的,所以需要对其进行改造成多例实现。原创 2022-08-14 19:45:25 · 1978 阅读 · 0 评论