[libhid-discuss] finding multile devices
Charles Lepple
clepple at ghz.cc
Sat Jan 12 22:27:59 UTC 2008
[please keep the list CC'd.]
On Jan 12, 2008, at 10:48 AM, Warren Jasper wrote:
> I think you missed my point. When searching the bus for a match,
> there should be a helper function that returns either:
>
> 1. ALL the devices that match (could be more than one)
Most people are using one device at a time. You might have an
argument for an extra function that returns a list of opened device
handles, though.
> 2. Subsequent calls need to return matched devices that have not
> been open.
I understand exactly what you're looking for here, and what I was
saying is that checking with the hid_is_opened() function can only
prove that something in that process (or thread, really) has opened
that interface. That won't catch the device/interface being opened by
another library, program or thread.
That said, my suggestion about keeping a list inside your code would
work. The custom matcher function doesn't have to match against
serial numbers - it can also check against a list of devices that
your code has previously opened. The reason why I am suggesting this
before changing libhid code is that it means you don't have to wait
for a new release of libhid to get this functionality, and you can
test this idea to make sure there isn't something wrong with my
reasoning.
> Due to the way the code is structured, the change needs to occur in
> hid_find_usb_device(). An easy fix would be to pass an extra argument
Extra arguments break backwards compatibility.
> You check for open devices before you call
> hid_find_devices (for example in hid_get_usb _handle() which is
> called by hid_open() which is called by ...). You are checking for
> that too early, and missing un-opened devices on the bus.
I'm not sure I follow the last sentence. Again, hid_is_opened() only
checks a handle that is internal to the process calling libhid -
there is not a one-to-one mapping to a device.
> Otherwise, I need to rewrite the entire way devices are scanned to
> get a handle to open a device. The way libhid is currently
> implemented,
> you only return the first match, and there is no mechanism to get
> other matches on the bus for multiple devices.;
See above. The way I see this working, you create an empty list of
devices you have opened (I assume that you have such a list anyway).
In the custom matcher function, you return "false" if you have
already have that particular device in the list.
If we were to have that in libhid, you still stand the chance of
getting a few devices that have been grabbed by other processes or
kernel drivers.
--
Charles Lepple
More information about the libhid-discuss
mailing list