在https://github.com/RT-Thread/RTGUI/blob/master/components/rtgui/server/touch.c中的
```rt_bool_t rtgui_touch_do_calibration(struct rtgui_event_touch *event)
{
/ calibration mode /
if (_calibrating == RT_TRUE)
{
/ only do the calibration on touch UP /
if (event->up_down == RTGUI_TOUCH_UP && _cali_ops != RT_NULL &&
_cali_ops->calibration_post != RT_NULL)
_cali_ops->calibration_post(event->x, event->y);
return RT_FALSE;
}
if (event->up_down == RTGUI_TOUCH_UP)
{
x_prev = 0; y_prev = 0;
}
else
{
if (!((x_prev > event->x + RTGUI_TOUCH_SMOOTH) ||
(x_prev < event->x - RTGUI_TOUCH_SMOOTH) ||
(y_prev > event->y + RTGUI_TOUCH_SMOOTH) ||
(y_prev < event->y - RTGUI_TOUCH_SMOOTH)))
{
/ smooth the touch point /
return RT_FALSE;
}
x_prev = event->x;
y_prev = event->y;
}
/ update touch (x, y) with calibrated data /
if (_cali_ops != RT_NULL && _cali_ops->calibrate_x != RT_NULL)
//调试时发现event->x传入为384,函数执行完毕后返回后event->x=0
event->x = _cali_ops->calibrate_x(event->x, event->y);
if (_cali_ops != RT_NULL && _cali_ops->calibrate_y != RT_NULL)
//在这里,event->x已经被改变了,不是之前的384了,变成0了,导致y值校准错误,返回的是一个错误值(一个很大的数值)
event->y = _cali_ops->calibrate_y(event->x, event->y);
return RT_TRUE;
}```
把代码
```/ update touch (x, y) with calibrated data /
if (_cali_ops != RT_NULL && _cali_ops->calibrate_x != RT_NULL)
//调试时发现event->x传入为384,函数执行完毕后返回后event->x=0
event->x = _cali_ops->calibrate_x(event->x, event->y);
if (_cali_ops != RT_NULL && _cali_ops->calibrate_y != RT_NULL)
//在这里,event->x已经被改变了,不是之前的384了,变成0了,导致y值校准错误,返回的是一个错误值(一个很大的数值)
event->y = _cali_ops->calibrate_y(event->x, event->y);
return RT_TRUE;
}```
修改成下面后,触摸可以正常使用了