_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中的设定的参数可以判断出滑动,按下,长按,以及手势等行为,触发对应的事件做处理。