[Development] QT Touch Handling Bug

Rob Martens rmartens at gmail.com
Mon Aug 8 16:04:10 CEST 2016


I'm relatively sure this problem exposes a bug in qevdevtouchhandler.cpp. I
sometimes get a 0 reported from a touch event when I know the locations
from the driver never included a 0. I hope someone with experience
in QEvdevTouchScreenData::processInputEvent would look at it and see if
this isn't the case.
Thanks,
Rob

Problem Summary

Driver:

FocalTech ft5x06 TouchScreen driver.

ft5x06_ts.c

QT Code:

qevdevtouchhandler.cpp, within libQt5EglDeviceIntegration.so.5.5.0

Configuration:

type A processing (or not B type)

single touch is true

Description of problem:

When QEvdevTouchScreenData::processInputEvent gets the following (see
below) set of events an invalid touch location (always zero) is reported to
the qt Window. You can see below the full output trace (no other events
occurred).  When QT is processing the input events the second touch up
reports the y as 0, which is wrong.

The patterns seems to be the following. When QT doesn't get a ABS_Y
location after the last BTN_TOUCH Down, it reports y as 0 which is
incorrect. This always happens when y or x does not change between touches.
So if a user happens to touch in the same spot (like on a button) the
second click may not register.

Is this a problem with QT not keeping the previous Y or X location and
using that or is it a problem with the driver not reporting the X or Y
location after the touch down event? This is an annoying problem because it
means that on screens button presses are randomly missed.

QEvdevTouchScreenData::processInputEvent EV_KEY, BTN_TOUCH, 1 DOWN ******
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_X, 334
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_Y, 174
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_PRESSURE, 100
QEvdevTouchScreenData::processInputEvent EV_SYN, SYN_REPORT, 0
QEvdevTouchScreenData::addTouchPoint tp.rawPositions.append(QPointF(334,
174));
QEvdevTouchScreenData::processInputEvent reportPoints()
QWindowSystemInterface::handleTouchEvent m_touchPoints.count()=1 1
x=0.695833 y=0.639706
QEvdevTouchScreenData::processInputEvent EV_KEY, BTN_TOUCH, 0   UP
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_PRESSURE, 0
QEvdevTouchScreenData::processInputEvent EV_SYN, SYN_REPORT, 0
QEvdevTouchScreenData::addTouchPoint tp.rawPositions.append(QPointF(334,
174));
QEvdevTouchScreenData::processInputEvent reportPoints()
QWindowSystemInterface::handleTouchEvent m_touchPoints.count()=1 1
x=0.695833 y=0.639706
QEvdevTouchScreenData::processInputEvent EV_KEY, BTN_TOUCH, 1 DOWN
***************
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_X, 336

>>>>>>>>>>>>>>>>>>>>>>>>>> NOTICE Y not reported because it is the same
location as before
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_PRESSURE, 100
QEvdevTouchScreenData::processInputEvent EV_SYN, SYN_REPORT, 0
QEvdevTouchScreenData::addTouchPoint tp.rawPositions.append(QPointF(336, 0
));
QEvdevTouchScreenData::processInputEvent reportPoints()
QWindowSystemInterface::handleTouchEvent m_touchPoints.count()=1 1 0.700000
0.000000
QEvdevTouchScreenData::processInputEvent EV_KEY, BTN_TOUCH, 0   UP
QEvdevTouchScreenData::processInputEvent EV_ABS, ABS_PRESSURE, 0
QEvdevTouchScreenData::processInputEvent EV_SYN, SYN_REPORT, 0
QEvdevTouchScreenData::addTouchPoint  tp.rawPositions.append(QPointF(336, 0
));
QWindowSystemInterface::handleTouchEvent m_touchPoints.count()=1 1
x=0.700000 y=0.000000

DTS for ft5x06

dts

  ft5x06_ts at 38 {

   compatible = "focaltech,5x06";

   reg = <0x38>;

   focaltech,family-id = <0x55>;

   pinctrl-names = "default";

   pinctrl-0 = <&ctw6120_pins>;

   interrupt-parent = <&gpio0>;

   interrupts = <3 IRQ_TYPE_EDGE_FALLING>;

   vdd-supply = <&touch_3v3_regulator>;

   vcc_i2c-supply = <&touch_3v3_regulator>;

   focaltech,irq-gpio = <&gpio0 3 0x00>;

   focaltech,display-coords = <0 0 480 272>;

   focaltech,name = "ft6x06";

   focaltech,no-force-update;

   focaltech,group-id = <1>;

   focaltech,hard-reset-delay-ms = <20>;

   focaltech,soft-reset-delay-ms = <150>;

   focaltech,num-max-touches = <1>;

   focaltech,fw-name = "ft_8610_qrd_fw.bin";

   focaltech,fw-delay-aa-ms = <100>;

   focaltech,fw-delay-55-ms = <30>;

   focaltech,fw-upgrade-id1 = <0x79>;

   focaltech,fw-upgrade-id2 = <0x08>;

   focaltech,fw-delay-readid-ms = <10>;

   focaltech,fw-delay-era-flsh-ms = <2000>;

   focaltech,fw-auto-cal;

   //focaltech,mirror_h;

   //focaltech,mirror_v;

   };
-- 
Rob Martens
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20160808/346b7066/attachment.html>


More information about the Development mailing list