On Thu, Mar 31, 2011 at 11:13:36PM -0700, Ping Cheng wrote:
> On Thu, Mar 31, 2011 at 10:57 PM, Peter Hutterer
> <[email protected]>wrote:
>
> > On Thu, Mar 31, 2011 at 10:37:54PM -0700, Ping Cheng wrote:
> > > On Thu, Mar 31, 2011 at 4:43 PM, Peter Hutterer <
> > [email protected]>wrote:
> > >
> > > > /* FIXME: why strstr and not strcmp? */
> > > > if (!strstr(device->drv->driverName, "wacom"))
> > > > continue;
> > > >
> > >
> > > I guess, the intention was to allow driverName has extra characters
> > instead
> > > of exact "wacom". As long as it has "wacom" in it, we take care of it.
> > Not
> > > sure if it is necessary though.
> >
> > I'd rather be precise on the match. I don't think anyone has a driver that
> > could possibly conflict but substring matches have a nasty habit of finding
> > things humans don't necessarily see.
> >
> > > > would it make sense to have them share the common struct once we've
> > linked
> > > > them?
> > > >
> > >
> > > It makes sense. One issue, even with the current code, is how to tell the
> > > difference between two identical tablets in the driver. How do we know if
> > we
> > > are linking the proper devices together?
> > >
> > > So far, I assume all devices attached to the same system have different
> > > product IDs.
> >
> > maybe we need an Option Uniq then to let the user associate the devices?
> >
>
> What information can the user use for Uniq to associate the devices, which
> we do not have in the driver? Both devices have the same product ID and
> name.
I only have one Bamboo, but the test code below gives me the right answer.
argv[1,2] are the two device nodes (/dev/input/eventX and /dev/input/eventY).
static struct udev_device *udev_from_file(struct udev *udev, const char
*filename)
{
struct stat st;
stat(filename, &st);
return udev_device_new_from_devnum(udev, 'c', st.st_rdev);
}
int main(int argc, char** argv)
{
int rc = 1;
struct udev *udev = NULL;
struct udev_device *dev1, *dev2 = NULL;
struct udev_device *parent1, *parent2;
const char *syspath1, *syspath2;
if (argc < 3)
goto out;
udev = udev_new();
dev1 = udev_from_file(udev, argv[1]);
dev2 = udev_from_file(udev, argv[2]);
if (!dev1 || !dev2)
goto out;
parent1 = udev_device_get_parent_with_subsystem_devtype(dev1, "usb",
"usb_device");
parent2 = udev_device_get_parent_with_subsystem_devtype(dev2, "usb",
"usb_device");
syspath1 = udev_device_get_syspath(parent1);
syspath2 = udev_device_get_syspath(parent2);
if (strcmp(syspath1, syspath2) == 0)
printf("Yep, they're the same physical device\n");
else
printf("Nope, different devices\n");
out:
udev_device_unref(dev1);
udev_device_unref(dev2);
udev_unref(udev);
return rc;
}
Cheers,
Peter
------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself;
WebMatrix provides all the features you need to develop and
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel