On Wednesday, February 8, 2017, Peter Hutterer <peter.hutte...@who-t.net>
wrote:
> On Mon, Feb 06, 2017 at 05:36:21PM -0800, Ping Cheng wrote:
> > The wcmIsSiblingDevice function uses several tricks to try and determine
> > if two devices should be considered siblings. If its 'logical_only'
> > parameter is false, this includes comparing device names. Device name
> > comparison is complicated by the fact that suffixes are added on by
> > the X and kernel drivers. To deal with this, the wcmSplitName function
> > tries to split a device name into three pieces: its "basename" that
> > describes the model, its "subdevice" name that describes the interface,
> > and its "tool" name which describes the X11 tool.
> >
> > Spliting the name is a somewhat kludgy process which does not properly
> > handle the device names for the MobileStudio Pro or Cintiq Pro. The
> > kernel reads the name of these devices directly from the hardware's
> > descriptors, and the names are slightly different between the pen and
> > touch interfaces (the touch device has an extra "Touch" suffix).
> >
> > This patch tweaks how wcmSplitName breaks apart device names in order
> > to handle the MobileStudio Pro and Cintiq Pro. Specifically, it now
> > allows the "subdevice" to contain an arbitrary number of "Pen", "Finger",
> > or "Pad" suffixes. For the MobileStudio Pro and Cintiq Pro, this should
> > allow the "basename" that is considered for sibling device matches
> > to be identical between both the pen and touch interfaces.
> >
> > Signed-off-by: Jason Gerecke <jason.gere...@wacom.com <javascript:;>>
> > Signed-off-by: Ping Cheng <ping.ch...@wacom.com <javascript:;>>
> > ---
> > src/wcmConfig.c | 14 +++++++++++---
> > 1 file changed, 11 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/wcmConfig.c b/src/wcmConfig.c
> > index 27c686f..ab82918 100644
> > --- a/src/wcmConfig.c
> > +++ b/src/wcmConfig.c
> > @@ -320,10 +320,18 @@ static void wcmSplitName(char* devicename, char
> *basename, char *subdevice, char
> > {
> > *a = '\0';
> > b = strrchr(name, ' ');
> > - if (b && (!strcmp(b, " Pen") || !strcmp(b, " Finger") ||
> !strcmp(b, " Pad")))
> > +
> > + while (b)
> > {
> > - *b = '\0';
> > - strncat(subdevice, b+1, len-1);
> > + if (!strcmp(b, " Pen") || !strcmp(b, " Finger") ||
> !strcmp(b, " Pad") || !strcmp(b, " Touch"))
>
> can we break this up over two lines please?
Sure. Can you update the patch and merge it upstream? Thanks.
> > + {
> > + *b = '\0';
> > + strncpy(subdevice, b+1, len-1);
> > + subdevice[len-1] = '\0';
> > + b = strrchr(name, ' ');
> > + }
> > + else
> > + b = NULL;
> > }
> > strncat(tool, a+1, len-1);
> > }
>
> I'm really wondering if we can't have a better approach here, similar to
> libinput's device groups? we can read bits from udev or worst case even
> write out a giant xorg.conf file with static options associations.
That's a great idea. Let's keep the info here so we can come back when we
have time.
The patch itself loks good though, thanks.
>
Thank you for the review. The patch fixes a potential touch switch issue...
Cheers,
Ping
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel