Hi Richard,
Reporting absolute position allows the synaptics and libinput xorg drivers
to treat the BYD touchpad as a touchpad, rather than a mouse. This allows
edge scrolling, tap to click, natural scrolling and any other location
based single touch gesture to work.
I opted to completely disable the hardware multitouch gesture recognition
(including two finger scroll) for a couple of reasons:
1. time delta between gesture packets was very large resulting in a rather
jerky scrolling experience, especially compared to touchpad with real
multitouch reporting.
2. Reporting absolute position and touch support enables the users to
configure the touchpad in the touchpad settings section of gnome, cinnamon,
etc because those applets configure synaptics and libinput. Otherwise xorg
thinks it's just a mouse.
This all sounds good - I look forward to trying your patch!
Also, how did you figure out how to enable the absolute packets? I couldn't
find anything like that with the Windows driver I was using.
3. Enabling multitouch gesture recognition results in the mouse cursor
freezing up when the user uses two fingers, one to move the mouse cursor
and another to click. This is because movement packets stop getting sent
while a gesture (such as pinch, rotate, etc) is being detected and/or
reported.
So with your patch, how will this gesture work, if it can only recognise one
finger at a time? I guess you'd have to enable the "double-tap then drag"
thing in synaptics and use that?
Disabling all hardware gesture detection, including two finger
scroll, provides the most fluid user experience.
Yep, I agree that if it works, good one-finger scrolling would be much better
than the touchpad's internal gesture recognition.
Regarding serio_pause_rx(), I was following a pattern similar to another
touchpad driver in psmouse. That whole callback mechanism is required to
report the touch had ended, since the BYD hardware only sends packets when
a touch is occurring. Is there a better way?
You're right, actually - I was worried that the input_report_* functions might
sleep, but I just had a proper look and they don't.
I'll try to rebase and post an updated patch tonight.
Cheers!
Chris