1 lv_indev的作用
在LittlevGL的全局设置中可以看到(如下图),lv_indev的作用是定义获取输入操作的周期,单位为毫秒。
2 效果
- 当
#define LV_INDEV_READ_PERIOD 10
的时候,在屏幕上滑动列表,感觉滑动的效果会比较流畅 - 当
#define LV_INDEV_READ_PERIOD 50
的时候,在屏幕上滑动列表,感觉滑动的效果有明显的卡顿感
3 实现过程
在 lv_obj.c 文件中可以找到如下定义,lv_indev的启动入口即是从这里开始
在 lv_indev.c 中可以看到 lv_indev_init()
模块的初始化其实是创建了一个任务
任务唤醒周期参数LV_INDEV_READ_PERIOD
正好就是全局设置中设置好的宏定义。任务中调用的模块indev_proc_task
如下所示
可以看到首先是通过indev_proc_task
来获取下一个输入操作的指针,
如果指针存在,就在载入这个输入操作之前重置其句柄,随后判断如果输入操作没有被禁用,就去读这个输入操作的类型,是长按、点击、组合键盘、还是按钮的类型,并且读取输入操作获取的数据,最后结束判断后再将句柄重置一遍,再获取下一个输入操作的指针,并且标记当前输入活动为空。
下面是代码是指向下一个输入设备的操作
可以看到,如果没有指定的句柄,就直接返回输入操作的列表,否则就返回句柄中的下一个输入操作。
而indev_list
的值是通过lv_indev_drv_register
来获取的的,如下图所示,其实也就是一个带有输入操作参数的结构体,然后其指针被付给了indev_list
而这个lv_indev_drv_register
在 main
函数中被加载