On Sep 11 2014 or thereabouts, Bastien Nocera wrote:
> On Thu, 2014-09-11 at 14:07 -0400, Benjamin Tissoires wrote:
> > PRODUCT attribute is set correctly for the input device, whether the
> > device is USB or Bluetooth. We can use a common path for those two.
> > uinput devices have their PRODUCT attribute set according to the
> > registered device, so they work too.
> > 
> > This change allows libwacom to properly detect the actual PID of the
> > tablet connected through the wireless receiver when the following kernel
> > patch (or its sucessor) will be merged in 3.18:
> > https://patchwork.kernel.org/patch/4889811/
> > 
> > Signed-off-by: Benjamin Tissoires <benjamin.tissoi...@redhat.com>
> > ---
> > 
> > Hi,
> > 
> > so this is the second part of the kernel patch that can be found at
> > https://patchwork.kernel.org/patch/4889811/
> > 
> > There should not be any impact except for the wireless users.
> > PRODUCT is set by the input device, so theorically, the serial ones should 
> > also
> > have it (I can not test this with my current setup).
> > 
> > Cheers,
> > Benjamin
> > 
> >  libwacom/libwacom.c | 130 
> > +++++++++++++++++++++++++---------------------------
> >  1 file changed, 62 insertions(+), 68 deletions(-)
> > 
> > diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c
> > index 2a99c95..0257fbe 100644
> > --- a/libwacom/libwacom.c
> > +++ b/libwacom/libwacom.c
> > @@ -88,6 +88,57 @@ get_uinput_subsystem (GUdevDevice *device)
> >     return bus_str ? g_strdup (bus_str) : NULL;
> >  }
> >  
> > +static gboolean
> > +get_bus_vid_pid (GUdevDevice  *device,
> > +            WacomBusType *bus,
> > +            int          *vendor_id,
> > +            int          *product_id,
> > +            WacomError   *error)
> > +{
> > +   GUdevDevice *parent;
> > +   const char *product_str;
> > +   int garbage;
> > +   int bus_id = -1;
> > +   gboolean retval = FALSE;
> > +
> > +   /* Parse that:
> > +    * E: PRODUCT=5/56a/81/100
> > +    * into:
> > +    * vendor 0x56a
> > +    * product 0x81 */
> <snip>
> > +   if (!product_str ||
> > +       (sscanf (product_str, "%u/%x/%x/%d", &bus_id, vendor_id, 
> > product_id, &garbage) != 4)) {
> > +           libwacom_error_set(error, WERROR_UNKNOWN_MODEL, "Unable to 
> > parse model identification");
> > +           goto bail;
> > +   }
> 
> I'd use g_strsplit() on the PRODUCT string, and parse each item
> separately with strtol/strtoul.
> 

Yep, that works too.

v2 on its way.

Cheers,
Benjamin

------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to