lvgl: kscan: Only process prev state if it has been updated
When no message was get from kscan_msgq queue, the prev state (x/y point) was processed as a new state. During process its coordinates could be inverted or modified, depending on the LVGL_POINTER_KSCAN_SWAP_XY, LVGL_POINTER_KSCAN_INVERT_X, LVGL_POINTER_KSCAN_INVERT_Y or display orientation configuration. In these cases, it could cause wrong input data. Signed-off-by: Robin-Charles Guihéneuf <robin-charles@hotmail.fr>
This commit is contained in:
parent
deac6d73c5
commit
f0250d5c71
1 changed files with 5 additions and 2 deletions
|
@ -206,10 +206,12 @@ static bool lvgl_pointer_kscan_read(lv_indev_drv_t *drv, lv_indev_data_t *data)
|
||||||
.state = LV_INDEV_STATE_REL,
|
.state = LV_INDEV_STATE_REL,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (k_msgq_get(&kscan_msgq, &curr, K_NO_WAIT) == 0) {
|
if (k_msgq_get(&kscan_msgq, &curr, K_NO_WAIT) != 0) {
|
||||||
prev = curr;
|
goto set_and_release;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prev = curr;
|
||||||
|
|
||||||
disp = lv_disp_get_default();
|
disp = lv_disp_get_default();
|
||||||
disp_dev = disp->driver.user_data;
|
disp_dev = disp->driver.user_data;
|
||||||
|
|
||||||
|
@ -260,6 +262,7 @@ static bool lvgl_pointer_kscan_read(lv_indev_drv_t *drv, lv_indev_data_t *data)
|
||||||
prev.point.y = x;
|
prev.point.y = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_and_release:
|
||||||
*data = prev;
|
*data = prev;
|
||||||
|
|
||||||
return k_msgq_num_used_get(&kscan_msgq) > 0;
|
return k_msgq_num_used_get(&kscan_msgq) > 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue