From: <Phi...@mi...> - 2010-04-30 20:52:22
|
Thanks. ________________________________ From: Nathan Hjelm [mailto:hj...@ma...] Sent: Friday, April 30, 2010 1:51 PM To: Philip Joslin - C10554 Cc: lib...@li... Subject: Re: [Libusb-devel] libusb_get_device_list Question This is a known bug in all releases. The bug is fixed in the current git head. -Nathan On Apr 30, 2010, at 2:42 PM, Phi...@mi... wrote: I am running into a problem with libusb_get_device_list on the Mac (OSX version 10.6 and using libusb-1.0.3). Let me give an example so that my steps are clear. Let me start with Linux, since my process works just fine in Linux. On Linux, to get a device list, I first call libusb_initialize to get a specific context, then I call libusb_get_device_list with that context. Let's say I get back the following single device in the list: vid=0xABCD pid=0x1234 product_string="The Product AAAA" Suffice it to say that I can get notifications from the system for hotplug purposes, so I know when a device from vendor ABCD is plugged in or is unplugged. So if I unplug Product AAAA and now plug in Product BBBB, I get notified and I call libusb_get_device_list again using the same context I passed into the initial call to libusb_get_device_list. The info that comes back is now: vid=0xABCD pid=0x5678 product_string="The Product BBBB" which is correct. However, if I do this same process on the Mac, initially I get: vid=0xABCD pid=0x1234 product_string="The Product AAAA" which I should, but after unplugging AAAA and plugging in BBBB, I get: vid=0xABCD pid=0x1234 product_string="The Product BBBB" The product ID remains the same, regardless of what product I plug in. Yet the product string is correct (as is the serial number). Both devices are bulk devices. If on my second call to libusb_get_device_list, I first call libusb_initialize, getting a different context, and pass that new context, then I get the correct response. I could conceivably throw away my initial list and go with the second, but the problem with that is that I am keeping an internal copy of the device handles around and may have active processes from the user being done on devices that were not unplugged or plugged. I can't simply throw them away because that might disrupt the user. I could start keeping a separate context for each device instead of for a device list, but that would awkward, and I am not sure how calling libusb_initialize over and over again might also screw things up. I am now looking at the libusb/Darwin backend code to see what I might be able to change to correct this problem. Any guidance would be greatly appreciated. Thanks. -- Phil ------------------------------------------------------------------------ ------ _______________________________________________ Libusb-devel mailing list Lib...@li... https://lists.sourceforge.net/lists/listinfo/libusb-devel |