Even though we know that the device is on the proper bus, libusb doesn't always find it on the first try. Once we find the right bus, if we iterate it twice, we tend to find the device. === modified file 'extras/hid2hci/hid2hci.c' --- extras/hid2hci/hid2hci.c 2009-07-24 16:06:22 +0000 +++ extras/hid2hci/hid2hci.c 2009-07-27 20:45:34 +0000 @@ -161,6 +161,7 @@ const char *str; int busnum; int devnum; + int trynum; str = udev_device_get_sysattr_value(usb_dev, "busnum"); if (str == NULL) @@ -174,7 +175,6 @@ usb_init(); usb_find_busses(); - usb_find_devices(); for (bus = usb_get_busses(); bus; bus = bus->next) { struct usb_device *dev; @@ -182,9 +182,11 @@ if (strtol(bus->dirname, NULL, 10) != busnum) continue; - for (dev = bus->devices; dev; dev = dev->next) { - if (dev->devnum == devnum) - return dev; + for (trynum = 0; trynum < 2; trynum++) { + usb_find_devices(); + for (dev = bus->devices; dev; dev = dev->next) + if (dev->devnum == devnum) + return dev; } }