lvgl lv_indev_t 之 _lv_indev_proc_t解读

_lv_indev_proc_t proc

输入设备运行时需要保存的参数

  • lv_indev_state_t state; 当前输入设备状态

    这个是一个枚举,就两个状态,按下(LV_INDEV_STATE_PRESSED),释放(LV_INDEV_STATE_RELEASED)。这个状态由输入设备驱动中读取外部设备数据接口,上一节中的read_cb回调获取(lv_indev_data_t)。


  • 一些标志位

       /*Flags*/
        uint8_t long_pr_sent : 1;
        uint8_t reset_query : 1;
        uint8_t disabled : 1;
        uint8_t wait_until_release : 1;
    
      long_pr_sent:是否触发长按标志,内部使用。长按置1,释放清0。
    
      reset_query: 重置请求标志, 内部使用,用于重置proc中参数,以及放弃当前检测判读
    
      disabled :     输入设备使能标志,lv_indev_enable可以使能。置false之后,定时任务将不会去读取外部输入设备
    
      wait_until_release: 等待释放标志,一旦使能之后,按下处理函数将不会处理按下的状态,而是一直等待释放判断释放状态,
    
      								通过lv_indev_wait_release这个接口使能。
    
  • types ; 这是一个共用体

    共用体由两部分组成:pointer,keypad。按照字面意思肯定是两种不同的输入设备在处理时数据内容有所区别。

    pointer 是用来存放触摸板,鼠标,外部按钮的运行参数。

    keypad 是用来存放键盘的参数。

    pointer:

      lv_point_t act_point;					当前输入设备的坐标点read_cb读取的坐标
    
      lv_point_t last_point; 				存放上次输入设备的坐标点
    
      lv_point_t last_raw_point;			存放上次从read_cb读取的坐标点
    
      这个变量唯一作用就是在没有注册read_cb时将这个值赋值给 act_point,相当于初始化值
    
      lv_point_t vect; 						存放act_point和  last_point偏差值
      通过这个偏差值做累计就可以得到滑动的总像素点即 gesture_sum或者将这个值通过低通滤波(偏移的一半)累加到scroll_throw_vect中
    
      lv_point_t scroll_sum;				滚动累计偏差值与 scroll_limit比较用
    
      lv_point_t scroll_throw_vect;			滚动偏移一半的累计值
    
      lv_point_t scroll_throw_vect_ori;		保存scroll_throw_vect的原始值,scroll_throw_vect这个值会参与运算被修改
    
      struct _lv_obj_t * act_obj; 			按下的对象
    
      struct _lv_obj_t * last_obj; 			上一次按下的对象	
    
      struct _lv_obj_t * scroll_obj; 		滚动对象
    
      struct _lv_obj_t * last_pressed; 		上一次按下的对象用于focus处理
    
      lv_area_t scroll_area;				滚动区域
    
      lv_point_t gesture_sum;				手势滑动总像素点与gesture_limit判断手势触发
    
       lv_dir_t scroll_dir : 4;				滚动方向
    
      lv_dir_t gesture_dir : 4;				手势方向
    
      uint8_t gesture_sent : 1;				是否触发手势标志,触发过一次不在重复触发,每次按下置0
    

    keypad:

  • uint32_t pr_timestamp; 按下时的时间戳

  • uint32_t longpr_rep_timestamp; 长按重复时的时间戳

    总结

这个结构体主要存储底层用于判断状态的实时运行参数。根据这些参数以及lv_indev_drv_t中的设定的参数可以判断出滑动,按下,长按,以及手势等行为,触发对应的事件做处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值