⚡️ Improve LVGL touch driver (#22817)
This commit is contained in:
parent
9ae6351a02
commit
3deb54d0fd
|
@ -264,9 +264,7 @@ unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool get_point(int16_t *x, int16_t *y) {
|
static bool get_point(int16_t *x, int16_t *y) {
|
||||||
bool is_touched = touch.getRawPoint(x, y);
|
if (!touch.getRawPoint(x, y)) return false;
|
||||||
|
|
||||||
if (!is_touched) return false;
|
|
||||||
|
|
||||||
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
|
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
|
||||||
const calibrationState state = touch_calibration.get_calibration_state();
|
const calibrationState state = touch_calibration.get_calibration_state();
|
||||||
|
@ -286,34 +284,26 @@ static bool get_point(int16_t *x, int16_t *y) {
|
||||||
|
|
||||||
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
|
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
|
||||||
static int16_t last_x = 0, last_y = 0;
|
static int16_t last_x = 0, last_y = 0;
|
||||||
static uint8_t last_touch_state = LV_INDEV_STATE_REL;
|
|
||||||
static int32_t touch_time1 = 0;
|
|
||||||
uint32_t tmpTime, diffTime = 0;
|
|
||||||
|
|
||||||
tmpTime = millis();
|
|
||||||
diffTime = getTickDiff(tmpTime, touch_time1);
|
|
||||||
if (diffTime > 20) {
|
|
||||||
if (get_point(&last_x, &last_y)) {
|
if (get_point(&last_x, &last_y)) {
|
||||||
|
#if TFT_ROTATION == TFT_ROTATE_180
|
||||||
if (last_touch_state == LV_INDEV_STATE_PR) return false;
|
data->point.x = TFT_WIDTH - last_x;
|
||||||
data->state = LV_INDEV_STATE_PR;
|
data->point.y = TFT_HEIGHT - last_y;
|
||||||
|
#else
|
||||||
// Set the coordinates (if released use the last-pressed coordinates)
|
|
||||||
data->point.x = last_x;
|
data->point.x = last_x;
|
||||||
data->point.y = last_y;
|
data->point.y = last_y;
|
||||||
|
#endif
|
||||||
last_x = last_y = 0;
|
data->state = LV_INDEV_STATE_PR;
|
||||||
last_touch_state = LV_INDEV_STATE_PR;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (last_touch_state == LV_INDEV_STATE_PR)
|
#if TFT_ROTATION == TFT_ROTATE_180
|
||||||
|
data->point.x = TFT_WIDTH - last_x;
|
||||||
|
data->point.y = TFT_HEIGHT - last_y;
|
||||||
|
#else
|
||||||
|
data->point.x = last_x;
|
||||||
|
data->point.y = last_y;
|
||||||
|
#endif
|
||||||
data->state = LV_INDEV_STATE_REL;
|
data->state = LV_INDEV_STATE_REL;
|
||||||
last_touch_state = LV_INDEV_STATE_REL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
touch_time1 = tmpTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false; // Return `false` since no data is buffering or left to read
|
return false; // Return `false` since no data is buffering or left to read
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ exec_test $1 $2 "MKS Robin config (FSMC Color UI)" "$3"
|
||||||
use_example_configs Mks/Robin
|
use_example_configs Mks/Robin
|
||||||
opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
|
opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
|
||||||
opt_enable TFT_LVGL_UI TFT_RES_480x320
|
opt_enable TFT_LVGL_UI TFT_RES_480x320
|
||||||
|
opt_set TFT_ROTATION TFT_ROTATE_180
|
||||||
exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
|
exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
|
|
Loading…
Reference in a new issue