Re: [PATCH v2 0/4] Stylus-on-touchscreen device support

From: Benjamin Tissoires
Date: Tue May 04 2021 - 09:35:29 EST


On Mon, May 3, 2021 at 3:00 PM наб <nabijaczleweli@xxxxxxxxxxxxxxxxxx> wrote:
>
> On Mon, May 03, 2021 at 11:52:43AM +0200, Benjamin Tissoires wrote:
> > On Mon, May 3, 2021 at 11:39 AM Benjamin Tissoires
> > <benjamin.tissoires@xxxxxxxxxx> wrote:
> > >
> > > On Mon, May 3, 2021 at 11:11 AM Jiri Kosina <jikos@xxxxxxxxxx> wrote:
> > > >
> > > > On Tue, 20 Apr 2021, наб wrote:
> > > >
> > > > > > This patchset adds support for stylus-on-touchscreen devices as found on
> > > > > > the OneMix 3 Pro and Dell Inspiron 15 7000 2-in-1 (7591), among others;
> > > > > > with it, they properly behave like a drawing tablet.
> > > > > >
> > > > > > Patches 2 and 4 funxionally depend on patch 1.
> > > > > > Patch 4 needs patch 3 to apply.
> > > > > >
> > > > > > The output of this patchset and the need for a kernel, rather than
> > > > > > userspace, patch was previously discussed here:
> > > > > > https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/558#note_792834
> > > > > >
> > > > > > Changes in v2:
> > > > > > Patch 4 now ANDs the secondary button with the tip switch,
> > > > > > since it's otherwise borderline useless to the user.
> > > > > >
> > > > > > Ahelenia Ziemiańska (4):
> > > > > > HID: multitouch: require Finger field to mark Win8 reports as MT
> > > > > > HID: multitouch: set Stylus suffix for Stylus-application devices, too
> > > > > > HID: input: replace outdated HID numbers+comments with macros
> > > > > > HID: input: work around Win8 stylus-on-touchscreen reporting
> > > > > >
> > > > > > drivers/hid/hid-input.c | 54 ++++++++++++++++++++++++++++++++++--
> > > > > > drivers/hid/hid-multitouch.c | 18 +++++++-----
> > > > > > 2 files changed, 62 insertions(+), 10 deletions(-)
> > > > > >
> > > > > > --
> > > > > > 2.20.1
> > > > >
> > > > > Bumping this after a monthish ‒ is it missing something? Am I?
> > > >
> > > > Benjamin had concerns about regressions and wanted to run a full battery
> > > > of testing on it.
> > > >
> > > > Benjamin, is there any outcome of that, please?
> > > >
> > >
> > > Sorry, no real outcome here.
> > >
> > > I ran the test suite, and there were no errors, until I realized that
> > > there are no tests regarding tablets, so it can't detect any
> > > regressions here.
> > > And then, the usual happens, no time to actually work on the test suite... :(
> > >
> > > I'll do a "normal" review soon (i.e. today)
> > >
> >
> > So I did a quick pass at the patches:
> > - 1/4 -> I think this one is safe and could go as it is, maybe with
> > CC: stable on it. Any regressions should have been caught by the
> > testsuite, so that's a good one.
> > - 2/4 and 3/4 -> Ack on those 2 too, note stable material, but not
> > necessary v5.13 material
> > - 4/4 -> I honestly have no idea if the patch is correct or not. I
> > would hold on this one until we have proper tests for those.
> >
> > Jiri, would you be ok to split the series as this?
>
> Splitting 2/4 away from 1/4 presents a minor cosmetic problem:
> since 1/4 no longer tags the stylus-on-touchscreen device as MT,
> the device name turns from "GXTP7386:00 27C6:0113 Stylus"
> to "GXTP7386:00 27C6:0113", so the user is left with
> two identically-named devices, the first of which corresponds
> to the touchscreen, and the second to the stylus.
>
> Granted, it might also append "Stylus" to names that could contain it,
> but I haven't managed to trace where hdev->name is born to determine if
> that's a concern.
>
> > наб, would you be OK to work on the test suite at
> > https://gitlab.freedesktop.org/libevdev/hid-tools so we can move
> > forward for your last patch?
> >
> > The problem I see on the last patch is that it is touching a generic
> > path and is not trivial. So adding tests would have 3 benefits:
> > - we ensure we are doing the correct thing
> > - we ensure we are not breaking existing devices (to some extent,
> > given that the tests are non written for the tablets)
> > - we ensure we are not breaking that in the future.
>
> I'd be more than happy to add tests of some sort, but reading the
> repository and tests/ under it has me positively stumped,
> not a clue where an entry-point would be, or how I'd instrument a
> reasonable test around my rdesc, so some sort of vague guidance
> to that end would be greatly appreciated.
>

Sorry, it was a little bit harsh to ask this from scratch.

I created an initial MR you can work on top of it:
https://gitlab.freedesktop.org/libevdev/hid-tools/-/merge_requests/115

Basically, you need to add your device in `tests/test_tablet.py` (like
all the other devices). You probably also need to add more tests to
the two I added, to expose the bug.

Hopefully, just doing that should expose the bug. If not, you'll need
to subclass PenDigitizer and override the `event()` function to
actually match what is sent on the wire when you request a high level
`Pen()` event.

To run the test suite, we are using `pytest`, which means it is all
automagic: `sudo pytest -k 'tablet' -v` will run every `test_*` pytest
finds with the `tablet` string in it. You can be more specific by just
running your device by issuing `sudo pytest -k 'tablet and
VENDOR_VID_PID' -v` (replace VENDOR_VID_PID with the name of the
class).

Note also that the patch 2 here will probably make the `test_creation`
fail as this one checks for the name. We will need a separate MR for
this depending on how the patches end up being included in the kernel
tree.

Hope this helps.

Cheers,
Benjamin