On Fri, Feb 10, 2017 at 09:53:01PM -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", > :Touch", 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> > Signed-off-by: Ping Cheng <ping.ch...@wacom.com> > --- > v2: split a long if statement into two lines, as per Peter's suggestion.
pushed, thanks Cheers, Peter > --- > src/wcmConfig.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/src/wcmConfig.c b/src/wcmConfig.c > index 27c686f..0924c43 100644 > --- a/src/wcmConfig.c > +++ b/src/wcmConfig.c > @@ -320,10 +320,19 @@ 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")) > + { > + *b = '\0'; > + strncpy(subdevice, b+1, len-1); > + subdevice[len-1] = '\0'; > + b = strrchr(name, ' '); > + } > + else > + b = NULL; > } > strncat(tool, a+1, len-1); > } > -- > 1.8.3.1 > ------------------------------------------------------------------------------ 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