Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slow listing of usb devices -- and potential libusb improvement to make netlink runtime selectable #237

Open
pali opened this issue Dec 7, 2016 · 120 comments
Labels

Comments

@pali
Copy link

pali commented Dec 7, 2016

Sent to ML, but after 8 months without any answer: https://sourceforge.net/p/libusb/mailman/message/34985373/

Hi!

I'm in step of migrating application from libusb 0.1 to libusb 1.0 and 
see one big problem in libusb 1.0 Linux implementation.

Listing of usb devices is too slow. When usb device appear on USB bus 
just for 0.3 - 0.7 seconds, then libusb 1.0 does not see it. libusb 0.1 
does not have any problem and perfectly detect it.

It means that I cannot migrate application to libusb 1.0 because it 
stops working, it does not detect usb device in slow period of second.

Is there any way how to solve this problem to speed up listing of usb 
devices on Linux? Currently Linux distributions are going to deprecate 
and remove libusb 0.1, so I will not able to use working libusb 0.1 
library.

I suspect that slow listing is because of asynchronous nature of Linux 
libusb 1.0 backend...
@LudovicRousseau
Copy link
Member

Hello,
Have you tried to use the hotplug mechanism?
http://libusb.sourceforge.net/api-1.0/group__hotplug.html

@pali
Copy link
Author

pali commented Dec 7, 2016

Yes, and that libusb-1.0 hotplug mechanism is unusable too. As wrote I think the whole libusb is slow due to asynchronous code. So hotplug (as async too) cannot help here.

Here is testing code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>

#include <libusb-1.0/libusb.h>

static volatile sig_atomic_t signal_quit;

static void signal_handler(int signum) {
  signal_quit = 1;
  (void)signum;
}

static int hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
                     libusb_hotplug_event event, void *user_data) {
  libusb_device_handle *handle = NULL;
  struct libusb_device_descriptor desc;
  char buf[1024];
  int rc;

  (void)libusb_get_device_descriptor(dev, &desc);

  if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) {
    printf("Unplugged: idVendor=0x%04x idProduct=0x%04x\n", desc.idVendor, desc.idProduct);
    return 0;
  } else if (event != LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED) {
    printf("Unhandled event %d\n", event);
    return 0;
  }

  memset(buf, 0, sizeof(buf));

  rc = libusb_open(dev, &handle);
  if (rc == LIBUSB_SUCCESS) {
    (void)libusb_get_string_descriptor_ascii(handle, desc.iProduct, (unsigned char*)buf, sizeof(buf));
    libusb_close(handle);
  }

  printf("Plugged: idVendor=0x%04x idProduct=0x%04x iProduct=%s\n", desc.idVendor, desc.idProduct, buf);
  return 0;
}

int main (void) {
  libusb_hotplug_callback_handle handle;
  int rc;

  libusb_init(NULL);

  rc = libusb_hotplug_register_callback(NULL, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
                                        0, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY,
                                        LIBUSB_HOTPLUG_MATCH_ANY, hotplug_callback, NULL,
                                        &handle);
  if (rc != LIBUSB_SUCCESS) {
    printf("Error creating a hotplug callback\n");
    libusb_exit(NULL);
    return EXIT_FAILURE;
  }

  signal(SIGINT, signal_handler);

  while (!signal_quit) {
    libusb_handle_events_completed(NULL, NULL);
    usleep(10000);
  }

  libusb_hotplug_deregister_callback(NULL, handle);
  libusb_exit(NULL);

  return 0;
}

And here is combined output from dmesg and above testing code:

[ 2732.336276] usb 3-1: new high-speed USB device number 26 using xhci_hcd
[ 2732.352813] usb 3-1: unable to get BOS descriptor
[ 2732.353563] usb 3-1: New USB device found, idVendor=0421, idProduct=0106
[ 2732.353566] usb 3-1: New USB device strings: Mfr=34, Product=38, SerialNumber=0
[ 2732.353568] usb 3-1: Product: Nokia USB ROM
[ 2732.353569] usb 3-1: Manufacturer: Nokia
[ 2732.654600] usb 3-1: USB disconnect, device number 26
[ 2733.625071] usb 3-1: new high-speed USB device number 27 using xhci_hcd
[ 2733.728148] usb 3-1: New USB device found, idVendor=0421, idProduct=0105
[ 2733.728151] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 2733.728153] usb 3-1: Product: Nokia N900 (Update mode)
[ 2733.728154] usb 3-1: Manufacturer: Nokia
[ 2733.728155] usb 3-1: SerialNumber: XXXXXXXXXXXXXXXXXX
[ 2734.288626] NET: Registered protocol family 35
[ 2734.303286] usbcore: registered new interface driver cdc_phonet
Plugged: idVendor=0x0421 idProduct=0x0105 iProduct=Nokia N900 (Update mode)
[ 2735.353984] usb 3-1: USB disconnect, device number 27
Unplugged: idVendor=0x0421 idProduct=0x0105

As you can see there is just 0.3s window (from 2732.336276 to 2732.654600) to detect and immediatelly open usb device "Nokia USB ROM". And this cannot be done by hotplug or other asynchronous waiting. Busy waiting needs to be used for such action.

Above libusb-1.0 hotplug test code detected just usb device "Nokia N900 (Update mode)" and it was later then 1s, which is slow as hell and absolutelly unusable.

Note that libusb 0.1 does not have this problem and can dectect & open usb device "Nokia USB ROM" in that 0.3s window.

@mcuee
Copy link
Member

mcuee commented Dec 7, 2016

I thiink you need to provide more detail what you want to do. And it is good to provide the debug log (set LIBUSB_DEBUG=4 and then run your libusb program) to see where is the delay. And you can even provide the debug log of your libusb-0.1 program as well (set USB_DEBUG=255 and run your libusb-0.1 program).

@mcuee
Copy link
Member

mcuee commented Dec 7, 2016

BTW, what is your Linux version? As far as I know, majority of the Linux distro use libusb-compat-0.1 which is based on libusb-1.0.

@mcuee
Copy link
Member

mcuee commented Dec 7, 2016

BTW, I think this is better discussed in the mailing list. You need to subscribe to the mailing list in order to post, please go to this URL.
https://lists.sourceforge.net/lists/listinfo/libusb-devel

When your previously posted, it did not make to the mailing list. Even though the other user forwarded it to the mailing list, it does not have the details. Once you provide more details, I think there will be more meaningful discussions in the mailing list.

@pali
Copy link
Author

pali commented Dec 7, 2016

Here is combined log from dmesg and above testing hotplug code. It was started with env LIBUSB_DEBUG=4 and against libusb-1.0.20 compiled from tarball:

[timestamp] [threadID] facility level [function call] <message>
--------------------------------------------------------------------------------
[ 0.000031] [00004170] libusb: debug [libusb_init] created default context
[ 0.000074] [00004170] libusb: debug [libusb_init] libusb v1.0.20.11004
[ 0.000093] [00004170] libusb: debug [find_usbfs_path] found usbfs at /dev/bus/usb
[ 0.000110] [00004170] libusb: debug [op_init] bulk continuation flag supported
[ 0.000114] [00004170] libusb: debug [op_init] zero length packet flag supported
[ 0.000123] [00004170] libusb: debug [op_init] sysfs can relate devices
[ 0.000126] [00004170] libusb: debug [op_init] sysfs has complete descriptors
[ 0.000219] [00004171] libusb: debug [linux_udev_event_thread_main] udev event thread entering.
[ 0.000442] [00004170] libusb: debug [linux_get_device_address] getting address for device: usb3 detached: 0
[ 0.000452] [00004170] libusb: debug [linux_get_device_address] scan usb3
[ 0.000487] [00004170] libusb: debug [linux_get_device_address] bus=3 dev=1
[ 0.000493] [00004170] libusb: debug [linux_enumerate_device] busnum 3 devaddr 1 session_id 769
[ 0.000496] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 3/1 (session 769)
[ 0.000585] [00004170] libusb: debug [linux_get_device_address] getting address for device: usb4 detached: 0
[ 0.000591] [00004170] libusb: debug [linux_get_device_address] scan usb4
[ 0.000621] [00004170] libusb: debug [linux_get_device_address] bus=4 dev=1
[ 0.000626] [00004170] libusb: debug [linux_enumerate_device] busnum 4 devaddr 1 session_id 1025
[ 0.000630] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 4/1 (session 1025)
[ 0.000707] [00004170] libusb: debug [linux_get_device_address] getting address for device: usb1 detached: 0
[ 0.000713] [00004170] libusb: debug [linux_get_device_address] scan usb1
[ 0.000743] [00004170] libusb: debug [linux_get_device_address] bus=1 dev=1
[ 0.000747] [00004170] libusb: debug [linux_enumerate_device] busnum 1 devaddr 1 session_id 257
[ 0.000751] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 1/1 (session 257)
[ 0.000825] [00004170] libusb: debug [linux_get_device_address] getting address for device: 1-1 detached: 0
[ 0.000831] [00004170] libusb: debug [linux_get_device_address] scan 1-1
[ 0.000861] [00004170] libusb: debug [linux_get_device_address] bus=1 dev=2
[ 0.000865] [00004170] libusb: debug [linux_enumerate_device] busnum 1 devaddr 2 session_id 258
[ 0.000869] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 1/2 (session 258)
[ 0.000890] [00004170] libusb: debug [linux_get_parent_info] Dev 0x11bc3a0 (1-1) has parent 0x11bc2e0 (usb1) port 1
[ 0.000937] [00004170] libusb: debug [linux_get_device_address] getting address for device: 1-1.5 detached: 0
[ 0.000943] [00004170] libusb: debug [linux_get_device_address] scan 1-1.5
[ 0.000973] [00004170] libusb: debug [linux_get_device_address] bus=1 dev=3
[ 0.000978] [00004170] libusb: debug [linux_enumerate_device] busnum 1 devaddr 3 session_id 259
[ 0.000981] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 1/3 (session 259)
[ 0.001001] [00004170] libusb: debug [linux_get_parent_info] Dev 0x11bd710 (1-1.5) has parent 0x11bc3a0 (1-1) port 5
[ 0.001103] [00004170] libusb: debug [linux_get_device_address] getting address for device: usb2 detached: 0
[ 0.001109] [00004170] libusb: debug [linux_get_device_address] scan usb2
[ 0.001138] [00004170] libusb: debug [linux_get_device_address] bus=2 dev=1
[ 0.001143] [00004170] libusb: debug [linux_enumerate_device] busnum 2 devaddr 1 session_id 513
[ 0.001147] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 2/1 (session 513)
[ 0.001239] [00004170] libusb: debug [linux_get_device_address] getting address for device: 2-1 detached: 0
[ 0.001250] [00004170] libusb: debug [linux_get_device_address] scan 2-1
[ 0.001284] [00004170] libusb: debug [linux_get_device_address] bus=2 dev=2
[ 0.001293] [00004170] libusb: debug [linux_enumerate_device] busnum 2 devaddr 2 session_id 514
[ 0.001300] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 2/2 (session 514)
[ 0.001330] [00004170] libusb: debug [linux_get_parent_info] Dev 0x11be5c0 (2-1) has parent 0x11bd820 (usb2) port 1
[ 0.001390] [00004170] libusb: debug [linux_get_device_address] getting address for device: 2-1.5 detached: 0
[ 0.001400] [00004170] libusb: debug [linux_get_device_address] scan 2-1.5
[ 0.001433] [00004170] libusb: debug [linux_get_device_address] bus=2 dev=3
[ 0.001442] [00004170] libusb: debug [linux_enumerate_device] busnum 2 devaddr 3 session_id 515
[ 0.001449] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 2/3 (session 515)
[ 0.001480] [00004170] libusb: debug [linux_get_parent_info] Dev 0x11be680 (2-1.5) has parent 0x11be5c0 (2-1) port 5
[ 0.001600] [00004170] libusb: debug [linux_get_device_address] getting address for device: 2-1.8 detached: 0
[ 0.001611] [00004170] libusb: debug [linux_get_device_address] scan 2-1.8
[ 0.001637] [00004170] libusb: debug [linux_get_device_address] bus=2 dev=4
[ 0.001643] [00004170] libusb: debug [linux_enumerate_device] busnum 2 devaddr 4 session_id 516
[ 0.001648] [00004170] libusb: debug [linux_enumerate_device] allocating new device for 2/4 (session 516)
[ 0.001667] [00004170] libusb: debug [linux_get_parent_info] Dev 0x11be740 (2-1.8) has parent 0x11be5c0 (2-1) port 8
[ 0.001741] [00004170] libusb: debug [usbi_add_pollfd] add fd 6 events 1
[ 0.001753] [00004170] libusb: debug [usbi_io_init] using timerfd for timeouts
[ 0.001756] [00004170] libusb: debug [usbi_add_pollfd] add fd 8 events 1
[ 0.001766] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.001770] [00004170] libusb: debug [handle_events] poll fds modified, reallocating
[ 0.001775] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 60000ms
[ 9745.816172] usb 3-2: new high-speed USB device number 4 using xhci_hcd
[ 9745.816172] usb 3-2: new high-speed USB device number 4 using xhci_hcd
[ 9745.832701] usb 3-2: unable to get BOS descriptor
[ 9745.833380] usb 3-2: New USB device found, idVendor=0421, idProduct=0106
[ 9745.833382] usb 3-2: New USB device strings: Mfr=34, Product=38, SerialNumber=0
[ 9745.833384] usb 3-2: Product: Nokia USB ROM
[ 9745.833385] usb 3-2: Manufacturer: Nokia
[ 9745.832701] usb 3-2: unable to get BOS descriptor
[ 9745.833380] usb 3-2: New USB device found, idVendor=0421, idProduct=0106
[ 9745.833382] usb 3-2: New USB device strings: Mfr=34, Product=38, SerialNumber=0
[ 9745.833384] usb 3-2: Product: Nokia USB ROM
[ 9745.833385] usb 3-2: Manufacturer: Nokia
[ 9746.134363] usb 3-2: USB disconnect, device number 4
[ 9746.134363] usb 3-2: USB disconnect, device number 4
[ 5.173378] [00004171] libusb: debug [linux_get_device_address] getting address for device: 3-2 detached: 0
[ 5.173390] [00004171] libusb: debug [linux_get_device_address] scan 3-2
[ 5.175602] [00004171] libusb: debug [linux_get_device_address] getting address for device: 3-2 detached: 1
[ 5.175615] [00004171] libusb: debug [udev_hotplug_event] udev hotplug event. action: remove.
[ 5.175619] [00004171] libusb: debug [linux_device_disconnected] device not found for session 304
[ 9747.100948] usb 3-2: new high-speed USB device number 5 using xhci_hcd
[ 9747.100948] usb 3-2: new high-speed USB device number 5 using xhci_hcd
[ 9747.203804] usb 3-2: New USB device found, idVendor=0421, idProduct=0105
[ 9747.203808] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 9747.203809] usb 3-2: Product: Nokia N900 (Update mode)
[ 9747.203810] usb 3-2: Manufacturer: Nokia
[ 9747.203811] usb 3-2: SerialNumber: XXXXXXXXXXXXXXXXXX
[ 9747.203804] usb 3-2: New USB device found, idVendor=0421, idProduct=0105
[ 9747.203808] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 9747.203809] usb 3-2: Product: Nokia N900 (Update mode)
[ 9747.203810] usb 3-2: Manufacturer: Nokia
[ 9747.203811] usb 3-2: SerialNumber: XXXXXXXXXXXXXXXXXX
[ 6.599707] [00004171] libusb: debug [linux_get_device_address] getting address for device: 3-2 detached: 0
[ 6.599721] [00004171] libusb: debug [linux_get_device_address] scan 3-2
[ 6.599770] [00004171] libusb: debug [linux_get_device_address] bus=3 dev=5
[ 6.599773] [00004171] libusb: debug [udev_hotplug_event] udev hotplug event. action: add.
[ 6.599776] [00004171] libusb: debug [linux_enumerate_device] busnum 3 devaddr 5 session_id 773
[ 6.599780] [00004171] libusb: debug [linux_enumerate_device] allocating new device for 3/5 (session 773)
[ 6.599811] [00004171] libusb: debug [linux_get_parent_info] Dev 0x7fc458001a80 (3-2) has parent 0x11bbc70 (usb3) port 2
[ 6.599828] [00004170] libusb: debug [handle_events] poll() returned 1
[ 6.599835] [00004170] libusb: debug [handle_events] caught a fish on the event pipe
[ 6.599840] [00004170] libusb: debug [handle_events] hotplug message received
[ 6.599846] [00004170] libusb: debug [libusb_get_device_descriptor] 
[ 6.599849] [00004170] libusb: debug [libusb_open] open 3.5
[ 6.599873] [00004170] libusb: debug [usbi_add_pollfd] add fd 9 events 4
[ 6.599879] [00004170] libusb: debug [libusb_alloc_transfer] transfer 0x11bb738
[ 6.599882] [00004170] libusb: debug [libusb_submit_transfer] transfer 0x11bb738
[ 6.599885] [00004170] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 6.599900] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 6.599903] [00004170] libusb: debug [handle_events] poll fds modified, reallocating
[ 6.599906] [00004170] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 6.610396] [00004170] libusb: debug [handle_events] poll() returned 1
[ 6.610419] [00004170] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=4
[ 6.610422] [00004170] libusb: debug [handle_control_completion] handling completion status 0
[ 6.610426] [00004170] libusb: debug [disarm_timerfd] 
[ 6.610429] [00004170] libusb: debug [usbi_handle_transfer_completion] transfer 0x11bb738 has callback 0x7fc45ee0ba70
[ 6.610432] [00004170] libusb: debug [sync_transfer_cb] actual_length=4
[ 6.610448] [00004170] libusb: debug [libusb_free_transfer] transfer 0x11bb738
[ 6.610453] [00004170] libusb: debug [libusb_alloc_transfer] transfer 0x11bb738
[ 6.610456] [00004170] libusb: debug [libusb_submit_transfer] transfer 0x11bb738
[ 6.610458] [00004170] libusb: debug [add_to_flying_list] arm timerfd for timeout in 1000ms (first in line)
[ 6.610472] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 6.610474] [00004170] libusb: debug [handle_events] poll() 3 fds with timeout in 60000ms
[ 6.620347] [00004170] libusb: debug [handle_events] poll() returned 1
[ 6.620364] [00004170] libusb: debug [reap_for_handle] urb type=2 status=0 transferred=50
[ 6.620367] [00004170] libusb: debug [handle_control_completion] handling completion status 0
[ 6.620370] [00004170] libusb: debug [disarm_timerfd] 
[ 6.620382] [00004170] libusb: debug [usbi_handle_transfer_completion] transfer 0x11bb738 has callback 0x7fc45ee0ba70
[ 6.620384] [00004170] libusb: debug [sync_transfer_cb] actual_length=50
[ 6.620387] [00004170] libusb: debug [libusb_free_transfer] transfer 0x11bb738
[ 6.620391] [00004170] libusb: debug [libusb_close] 
[ 6.620396] [00004170] libusb: debug [usbi_remove_pollfd] remove fd 9
Plugged: idVendor=0x0421 idProduct=0x0105 iProduct=Nokia N900 (Update mode)
[ 6.620418] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 0ms
[ 6.620420] [00004170] libusb: debug [handle_events] poll() returned 1
[ 6.620421] [00004170] libusb: debug [handle_events] caught a fish on the event pipe
[ 6.620423] [00004170] libusb: debug [handle_events] someone updated the poll fds
[ 6.630491] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 6.630512] [00004170] libusb: debug [handle_events] poll fds modified, reallocating
[ 6.630519] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 60000ms
[ 9748.828439] usb 3-2: USB disconnect, device number 5
[ 9748.828439] usb 3-2: USB disconnect, device number 5
[ 7.681058] [00004171] libusb: debug [linux_get_device_address] getting address for device: 3-2 detached: 1
[ 7.681075] [00004171] libusb: debug [udev_hotplug_event] udev hotplug event. action: remove.
[ 7.681092] [00004170] libusb: debug [handle_events] poll() returned 1
[ 7.681095] [00004170] libusb: debug [handle_events] caught a fish on the event pipe
[ 7.681097] [00004170] libusb: debug [handle_events] hotplug message received
[ 7.681101] [00004170] libusb: debug [libusb_get_device_descriptor] 
Unplugged: idVendor=0x0421 idProduct=0x0105
[ 7.681106] [00004170] libusb: debug [libusb_unref_device] destroy device 3.5
[ 7.681109] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 0ms
[ 7.681112] [00004170] libusb: debug [handle_events] poll() returned 0
[ 7.691175] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 7.691187] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 60000ms
^C
[13.935082] [00004170] libusb: debug [handle_events] poll() returned -1
[13.935114] [00004170] libusb: debug [libusb_exit] 
[13.935121] [00004170] libusb: debug [libusb_exit] destroying default context
[13.935127] [00004170] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[13.935130] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 0ms
[13.935133] [00004170] libusb: debug [handle_events] poll() returned 1
[13.935136] [00004170] libusb: debug [handle_events] caught a fish on the event pipe
[13.935137] [00004170] libusb: debug [handle_events] hotplug message received
[13.935141] [00004170] libusb: debug [handle_events] poll() 2 fds with timeout in 0ms
[13.935144] [00004170] libusb: debug [handle_events] poll() returned 0
[13.935146] [00004170] libusb: debug [libusb_unref_device] destroy device 2.4
[13.935150] [00004170] libusb: debug [libusb_unref_device] destroy device 2.3
[13.935153] [00004170] libusb: debug [libusb_unref_device] destroy device 2.2
[13.935155] [00004170] libusb: debug [libusb_unref_device] destroy device 2.1
[13.935157] [00004170] libusb: debug [libusb_unref_device] destroy device 1.3
[13.935160] [00004170] libusb: debug [libusb_unref_device] destroy device 1.2
[13.935162] [00004170] libusb: debug [libusb_unref_device] destroy device 1.1
[13.935165] [00004170] libusb: debug [libusb_unref_device] destroy device 4.1
[13.935167] [00004170] libusb: debug [libusb_unref_device] destroy device 3.1
[13.935169] [00004170] libusb: debug [usbi_remove_pollfd] remove fd 6
[13.935181] [00004170] libusb: debug [usbi_remove_pollfd] remove fd 8
[13.935196] [00004171] libusb: debug [linux_udev_event_thread_main] udev event thread exiting

As you can see libusb-1.0 detected some device after "Nokia USB ROM" was connected, but it is slow and just received detached=1 event... So it is unusable...

And about libusb 0.1, I'm using real libusb 0.1, not libusb-compat around libusb-1.0.

@pali
Copy link
Author

pali commented Dec 7, 2016

Here is libusb 0.1 code which use busy waiting:

#include <stdio.h>
#include <string.h>
#include <signal.h>

#include <usb.h>

static volatile sig_atomic_t signal_quit;

static void signal_handler(int signum) {
  signal_quit = 1;
  (void)signum;
}

static int usb_device_is_valid(struct usb_device * dev) {
  static char found[1 << 16];

  if (dev->descriptor.idVendor != 0x0421)
    return 0;

  if (found[dev->descriptor.idProduct])
    return 0;

  found[dev->descriptor.idProduct] = 1;
  return 1;
}

static struct usb_device * usb_search_device(struct usb_device * dev, int level) {
  int i;
  struct usb_device * dev2;

  if (!dev)
    return NULL;

  if (usb_device_is_valid(dev))
    return dev;

  for (i = 0; i < dev->num_children; i++) {
    dev2 = usb_search_device(dev->children[i], level + 1);
    if (dev2)
      return dev2;
  }

  return NULL;
}

int main() {
  usb_dev_handle * udev;
  struct usb_bus * bus;
  struct usb_device *dev;
  struct usb_device *dev2;
  char buf[1024];

  usb_init();
  usb_find_busses();

  signal(SIGINT, signal_handler);

  while (!signal_quit) {
    usb_find_devices();

    dev = NULL;

    for (bus = usb_get_busses(); bus; bus = bus->next) {
      if (bus->root_dev)
        dev = usb_search_device(bus->root_dev, 0);
      else {
        for (dev2 = bus->devices; dev2; dev2 = dev2->next) {
          dev = usb_search_device(dev2, 0);
          if (dev)
            break;
        }
      }
      if (dev)
        break;
    }

    if (!dev) {
      usleep(0xc350);
      continue;
    }

    memset(buf, 0, sizeof(buf));

    udev = usb_open(dev);
    if (udev) {
      usb_get_string_simple(udev, dev->descriptor.iProduct, buf, sizeof(buf)-1);
      usb_close(udev);
    }

    printf("Plugged: idVendor=0x%04x idProduct=0x%04x iProduct=%s\n", dev->descriptor.idVendor, dev->descriptor.idProduct, buf);
  }

  return 0;
}

It detect "Nokia USB ROM" usb device without any problem. Here is combined output from dmesg and this libusb 0.1 code:

[12539.007580] usb 3-2: new high-speed USB device number 10 using xhci_hcd
[12539.024076] usb 3-2: unable to get BOS descriptor
[12539.024694] usb 3-2: New USB device found, idVendor=0421, idProduct=0106
[12539.024698] usb 3-2: New USB device strings: Mfr=34, Product=38, SerialNumber=0
[12539.024700] usb 3-2: Product: Nokia USB ROM
[12539.024702] usb 3-2: Manufacturer: Nokia
Plugged: idVendor=0x0421 idProduct=0x0106 iProduct=Nokia USB ROM
[12539.325608] usb 3-2: USB disconnect, device number 10
[12540.304322] usb 3-2: new high-speed USB device number 11 using xhci_hcd
[12540.407548] usb 3-2: New USB device found, idVendor=0421, idProduct=0105
[12540.407560] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[12540.407562] usb 3-2: Product: Nokia N900 (Update mode)
[12540.407563] usb 3-2: Manufacturer: Nokia
[12540.407564] usb 3-2: SerialNumber: XXXXXXXXXXXXXXXXXX
Plugged: idVendor=0x0421 idProduct=0x0105 iProduct=Nokia N900 (Update mode)
[12542.020674] usb 3-2: USB disconnect, device number 11

As you can see libusb 0.1 (real!, not compat wrapper) is working fine and can detect usb devices in time. libusb-1.0 either hotplug code or similar busy waiting loop is slow and so is unusable...

@mcuee
Copy link
Member

mcuee commented Dec 11, 2016

Can you post the debug log for libusb 0.1 as well? Thanks. You can set USB_DEBUG=255 for that purpose.

@mcuee mcuee added the linux label Dec 11, 2016
@mcuee
Copy link
Member

mcuee commented Dec 11, 2016

Setting this as Linux for now.

@pali
Copy link
Author

pali commented Dec 11, 2016

I do not know why you need that log as libusb 0.1 is working and such busy waiting log is long, but here is (again combined with dmesg):

usb_set_debug: Setting debugging level to 255 (on)
usb_os_init: Found USB VFS at /dev/bus/usb
usb_os_find_busses: Found 004
usb_os_find_busses: Found 003
usb_os_find_busses: Found 002
usb_os_find_busses: Found 001
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
[10000.790034] usb 3-2: new high-speed USB device number 2 using xhci_hcd
[10000.806693] usb 3-2: unable to get BOS descriptor
[10000.807261] usb 3-2: New USB device found, idVendor=0421, idProduct=0106
[10000.807267] usb 3-2: New USB device strings: Mfr=34, Product=38, SerialNumber=0
[10000.807270] usb 3-2: Product: Nokia USB ROM
[10000.807272] usb 3-2: Manufacturer: Nokia
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 002 on 003
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
Plugged: idVendor=0x0421 idProduct=0x0106 iProduct=Nokia USB ROM
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 002 on 003
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 002 on 003
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 002 on 003
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 002 on 003
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
[10001.108053] usb 3-2: USB disconnect, device number 2
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
[10001.806587] usb 3-2: new high-speed USB device number 3 using xhci_hcd
[10001.909596] usb 3-2: New USB device found, idVendor=0421, idProduct=0105
[10001.909600] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[10001.909602] usb 3-2: Product: Nokia N900 (Update mode)
[10001.909603] usb 3-2: Manufacturer: Nokia
[10001.909604] usb 3-2: SerialNumber: XXXXXXXXXXXXXXXXXX
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
Plugged: idVendor=0x0421 idProduct=0x0105 iProduct=Nokia N900 (Update mode)
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
[10002.472376] NET: Registered protocol family 35
[10002.482496] usbcore: registered new interface driver cdc_phonet
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 003 on 003
skipped 3 class/vendor specific interface descriptors
skipped 3 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 001 on 003
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
[10003.538466] usb 3-2: USB disconnect, device number 3
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
skipping descriptor 0x30
skipped 1 class/vendor specific endpoint descriptors
usb_os_find_devices: Found 001 on 003
^Cusb_os_find_devices: Found 004 on 002
skipped 1 class/vendor specific interface descriptors
skipped 1 class/vendor specific interface descriptors
usb_os_find_devices: Found 003 on 002
usb_os_find_devices: Found 002 on 002
usb_os_find_devices: Found 001 on 002
error obtaining child information: Inappropriate ioctl for device
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 003 on 001
skipping descriptor 0xFF
skipping descriptor 0xB
skipped 2 class/vendor specific endpoint descriptors
skipped 5 class/vendor specific interface descriptors
skipping descriptor 0x25
skipped 1 class/vendor specific endpoint descriptors
skipped 15 class/vendor specific interface descriptors
usb_os_find_devices: Found 002 on 001
usb_os_find_devices: Found 001 on 001
error obtaining child information: Inappropriate ioctl for device

@pali
Copy link
Author

pali commented Dec 12, 2016

@mcuee Thats all? Or do you need anything else?

@mcuee
Copy link
Member

mcuee commented Dec 13, 2016

Yes that is all. I am thinking that your specific use case may be which libusb under Linux may not be able to support. I could be wrong. Maybe it is better you use the mailing list to tell a bit more details what is your use case and then probably there is a way out.

@pali
Copy link
Author

pali commented Dec 13, 2016

Use case (as already wrote): start communication with device at correct time. If computer does not negotiate device protocol in 0.3s time window, then device disconnect from usb.

I already sent email to ML at least two times and other people forwarded it to ML again.

@mcuee
Copy link
Member

mcuee commented Dec 14, 2016 via email

@pali
Copy link
Author

pali commented Dec 14, 2016

What I need to achieve? Communicate with that device ("Nokia USB ROM ") which is on usb bus just for 0.3s.

@mcuee
Copy link
Member

mcuee commented Dec 14, 2016 via email

@mcuee
Copy link
Member

mcuee commented Dec 14, 2016 via email

@pali
Copy link
Author

pali commented Dec 14, 2016

Short: Query various parameters, change boot settings or load own boot code.
In details: See my project 0xFFFF: https://github.com/pali/0xFFFF

But reason for device communication is irrelevant in this bug report. libusb 1.0 does not even detect usb devices!

@mcuee
Copy link
Member

mcuee commented Dec 14, 2016

Having all these details may help. Anyway, I can sense your frustration. I'll shut up for now to see if others can help you better.

@msva
Copy link

msva commented Aug 2, 2017

any progress on this?
ping devs ( @LudovicRousseau @dickens @hjelmn @pbatard )

I just read this discussion and the thread on maillist and...
I'd like to say that I think that forcing people to subscribe to maillist to even take a look an issue is a bad way to go (the ML discussion contains no discussion on the issue, but only "reporter should subscribe the ML").

Can't say for @pali, but I already have too big incoming traffic from many other maillists to subscribe to one more just to track one single issue.

Well, yes, I understand that it is "this is opensource, baby, so patches or gtfo" opinion exists, but libusb is too important system package on GNU/Linux these days to just ignore this issue.

This exact issue brakes use-case of flashing very mush devices (not only nokia, but also some mediatek ones, and even more). And standing to "non-libusb-way" is bad option too, imho.

So, can you, please, re-implement the blocking method like it was in libusb0 for this very cases?

@marmistrz
Copy link

marmistrz commented Aug 17, 2017

I'm the Arch Linux maintainer of a package affected by this bug and developed by @pali. The fact that the package is affected by this bug makes the whole packaging difficult and error-prone because libusb0 is not shipped by the distribution anymore.

Could you please look into this issue that has been open for such a long time?

And, as for the suggestion about the non-libusb solution, libusb has been employed for the means of flashing devices ever since I remember, even by the old, Nokia-made flashers.

@dickens
Copy link
Member

dickens commented Aug 25, 2017

@pali are you using the udev or netlink option for hotplug? If using udev, what happens if you switch to netlink?

@pali
Copy link
Author

pali commented Aug 25, 2017

I'm using code from comment #237 (comment) As you can see I have not specified udev or netlink in libusb_hotplug_register_callback() call.

@daveyoung
Copy link

Pali, as I said I got a working test result with Fedora libusb, but after checking the dmesg I get below, so apparently my time slot window is longer than yours, it is about 2.83 seconds, I do not know why the difference happens, my kernel is 4.13.0-rc6+:
[ 6594.074552] usb 2-1: Product: Nokia USB ROM
[ 6594.074554] usb 2-1: Manufacturer: Nokia
[ 6594.376517] usb 2-1: USB disconnect, device number 23
[ 6595.229111] usb 2-1: new high-speed USB device number 24 using xhci_hcd
[ 6595.483747] usb 2-1: New USB device found, idVendor=0421, idProduct=0105
[ 6595.483757] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=5
[ 6595.483762] usb 2-1: Product: Nokia N900 (Update mode)
[ 6595.483766] usb 2-1: Manufacturer: Nokia
[ 6595.483770] usb 2-1: SerialNumber: 4D554D333335333037
[ 6596.906483] usb 2-1: USB disconnect, device number 24

@pali
Copy link
Author

pali commented Aug 28, 2017

Time slot is not longer, look at output again:

[ 6594.074554] usb 2-1: Manufacturer: Nokia
[ 6594.376517] usb 2-1: USB disconnect, device number 23

It is just 0.3s before device leave and disconnects. In log is missing line new high-speed USB device number 23 which would tell exact time when device was discovered by kernel.

@dickens
Copy link
Member

dickens commented Aug 28, 2017

@pali this is a compile-time option, not something you specify at runtime. Looking at the log debug log again I see udev messages. Try this again after compiling libusb with the --disable-udev option when running the configure script.

@daveyoung
Copy link

Here is the output of my test result with pali's test code:
[usbtest]# ./a.out
Plugged: idVendor=0x0421 idProduct=0x01c7 iProduct=
^C[root@dhcp-128-65 usbtest]# ./a.out
Plugged: idVendor=0x0421 idProduct=0x0106 iProduct=
Unplugged: idVendor=0x0421 idProduct=0x0106
Plugged: idVendor=0x0421 idProduct=0x0105 iProduct=
Unplugged: idVendor=0x0421 idProduct=0x0105

OS: Fedora rawhide, mainline kernel 4.13.0-rc6+
libusb-0.1.5-10.fc27.x86_64
(based on libusb-compat)

@marmistrz
Copy link

@pali, I've just recalled that I at one point had libusb-compat before I replaced it with libusb0 and successfully flashed the device. I guess it was a Nokia N950, though, not N900.

Should I try with an N900 + libusb-compat to try to reproduce it on my side?

@mcuee mcuee reopened this Dec 13, 2022
@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

Reopen this issue. PRs are welcome to address this issue.

@pali
Copy link
Author

pali commented Dec 13, 2022

@mcuee Application developer which use library X is not interested what is in library X.

If you show me how to update example from #237 (comment) to not use that udev I can try it.

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

@mcuee Application developer which use library X is not interested what is in library X.

If you show me how to update example from #237 (comment) to not use that udev I can try it.

No need to change your code. Just try to build libusb with '--disable-udev' option.

@pali
Copy link
Author

pali commented Dec 13, 2022

Seems that you misunderstood, I'm not building libusb. I'm building application and I'm using libusb which is installed in the target system.

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

Seems that you misunderstood, I'm not building libusb. I'm building application and I'm using libusb which is installed in the target system.

Please just give it a try. If that works you have a workaround, you can ship your application with a libusb library with the custom build option. You can call it another name as well.

I tend to think that is a better workaround than shipping with the legacy libusb-0.1.

@pali
Copy link
Author

pali commented Dec 13, 2022

you can ship your application with a libusb library with the custom build option.

Which major linux distribution is doing this? Please no kidding. This is ridiculous advice. Have you already spoke with linux package maintainers with this?

Why on the earth then I should switch from fully working libusb-0.1 to libusb-1.0 which requires 1) special compilation, 2) requires bundling of whole libusb-1.0 code into my application and 3) modifying whole build system to handle this crap?

@pali
Copy link
Author

pali commented Dec 13, 2022

I tend to think that is a better workaround

workaround? No! After 7 years nobody is interested in workaround, but in resolving problem.

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

Anyway, the other idea is to change your code to use the following API to see if that helps.
https://libusb.sourceforge.io/api-1.0/group__libusb__dev.html#ga98f783e115ceff4eaf88a60e6439563c

@pali
Copy link
Author

pali commented Dec 13, 2022

Could you show example similar to #237 (comment) ?

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

Could you show example similar to #237 (comment) ?

Sorry but you have to try yourself. I am not a programmer myself.

Or maybe @benzea or @tormodvolden can chime in to see if that is a viable option or not, and suggest the modification needed if it is potentially viable.

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

@pali
Please also do not use words like ridiculous. Consider that you are warned. Further comments like this will get you banned here.

@pali
Copy link
Author

pali commented Dec 13, 2022

I just do not understand you, so could you be please so kind and write me a list of words which are like ridiculous? And what has your last post in common with libusb issue here that libusb is slow in listing of usb devices? I'm feeling that you do not like this bug report, trying to be off-topic and now trying to convince me to that I'm like an idiot here.

So back to the issue, that new API seems to be also unusable as it is linux-only? Why?

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

@pali

I am refering to your comment above. You used the word ridiculous in the comment.

you can ship your application with a libusb library with the custom build option.

Which major linux distribution is doing this? Please no kidding. This is ridiculous advice. Have you already spoke with linux package maintainers with this?

Why on the earth then I should switch from fully working libusb-0.1 to libusb-1.0 which requires 1) special compilation, 2) requires bundling of whole libusb-1.0 code into my application and 3) modifying whole build system to handle this crap?

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

So back to the issue, that new API seems to be also unusable as it is linux-only? Why?

udev is also Linux only.

Do you have issues under other OS like macOS or Windows?

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

I just do not understand you, so could you be please so kind and write me a list of words which are like ridiculous? And what has your last post in common with libusb issue here that libusb is slow in listing of usb devices? I'm feeling that you do not like this bug report, trying to be off-topic and now trying to convince me to that I'm like an idiot here.

I can understand your frustration, but comments like this will get you nowhere, when you are talking to an admin of a project.

To be clear, I am not trying to be off-topic. And I have no idea why you think in that way.

Anyway stop this.kind of off-topic comments.

@mcuee
Copy link
Member

mcuee commented Dec 13, 2022

Another thing, consider this as a limitation of libusb and libusb-compat-01 under Linux now. Please refer to the last point in libusb FAQ. Again PRs are welcome to enhance libusb project for this kind of use case.
https://github.com/libusb/libusb/wiki/FAQ#known-quirksdifferences-between-libusb-compat-01-and-legacy-libusb-01

@msva
Copy link

msva commented Dec 14, 2022

Which major linux distribution is doing this

To be honest, almost none of them ship libusb-0.1 these days as well 🤷

And yes, I also personally don't like the idea of bundling (as well as it is "bad way policy" in many distros.

@msva
Copy link

msva commented Dec 14, 2022

@msva PRs are welcome to implement your ideas.

By the way, are they?

I mean: if I'll spent a significant amount of time to dig into this, and will made a PR with such low-level API, what is the probability for it to be merged (especially in the cases that: 1) I'm not a professional programmer (so code will need a qualified review, and I may require some advices), 2) if it will happen at all, it can take about a few months, or even half-a-year, as I'm too busy at my jobs ATM)?

@mcuee
Copy link
Member

mcuee commented Dec 14, 2022

Which major linux distribution is doing this

To be honest, almost none of them ship libusb-0.1 these days as well 🤷

And yes, I also personally don't like the idea of bundling (as well as it is "bad way policy" in many distros.

FYI Debian/Ubuntu still ships legacy libusb-0.1.

I am just providing a potential work-around. As of now there is no solution so that I am pointing out potential work-around. I can unserstand that you do not like the work-around though.

Therefore I am mentioning another potential work-around of using libusb_wrap_sys_device() from the application side. But someone needs to try it out.
https://libusb.sourceforge.io/api-1.0/group__libusb__dev.html#ga98f783e115ceff4eaf88a60e6439563c

@mcuee
Copy link
Member

mcuee commented Dec 14, 2022

@msva PRs are welcome to implement your ideas.

By the way, are they?

Yes, PRs are welcome.

I mean: if I'll spent a significant amount of time to dig into this, and will made a PR with such low-level API, what is the probability for it to be merged (especially in the cases that: 1) I'm not a professional programmer (so code will need a qualified review, and I may require some advices), 2) if it will happen at all, it can take about a few months, or even half-a-year, as I'm too busy at my jobs ATM)?

Fair enough.

Again,the issue will still be there without people wokring on it.

Right now the No 1 issue with libusb project is the lack of developers/contributors.

@benzea
Copy link

benzea commented Dec 14, 2022

Or maybe @benzea or @tormodvolden can chime in to see if that is a viable option or not, and suggest the modification needed if it is potentially viable.

So, my thought is that this is a bit of a fringe use case. However, it is valid, so the question is how one should deal with it in the future.

Adding a more low level API could be a way to fix this. The other way to fix this is creating a udev rule that does the basic stuff. So, I would say:

  1. An API to open a device directly (using an already open FD for the device file) would be good; not sure if that exists yet. That is more generically useful, as it would work in various cases (FD passing through DBus, using libusb from a udev rule already).
  2. Linux non hotplug for containers #559 could kind of be a workaround
  3. It would be good to undersand the use case. Could it work to have a udev rule to do the time critical processing instead of trying to be fast from userspace directly?

Note that if the API from 1. exists, you could implement it yourself, by watching /dev/bus/usb/. Hacky, but it would work just fine. And, such an API is definitely more generally useful.

@mcuee
Copy link
Member

mcuee commented Dec 14, 2022

An API to open a device directly (using an already open FD for the device file) would be good; not sure if that exists yet. That is more generically useful, as it would work in various cases (FD passing through DBus, using libusb from a udev rule already).

I tend to think that libusb_wrap_sys_device() is potentially the candidate here. It is mostly used by Android but can be used for Linux as well.
https://libusb.sourceforge.io/api-1.0/group__libusb__dev.html#ga98f783e115ceff4eaf88a60e6439563c

int libusb_wrap_sys_device (libusb_context* ctx, intptr_t sys_dev, libusb_device_handle** dev_handle)

Wrap a platform-specific system device handle and obtain a libusb device handle for the underlying device.

The handle allows you to use libusb to perform I/O on the device in question.

Call libusb_set_option() with the parameters (NULL, LIBUSB_OPTION_NO_DEVICE_DISCOVERY) before libusb_init() if you want to skip enumeration of USB devices. In particular, this might be needed on Android if you don't have authority to access USB devices in general.

On Linux, the system device handle must be a valid file descriptor opened on the device node.

The system device handle must remain open until libusb_close() is called. The system device handle will not be closed by libusb_close().

@benzea
Copy link

benzea commented Dec 14, 2022

int libusb_wrap_sys_device (libusb_context* ctx, intptr_t sys_dev, libusb_device_handle** dev_handle)

Aha, that was what I was looking for but didn't find!

@mcuee
Copy link
Member

mcuee commented Dec 14, 2022

@pali and @msva

So looks like libusb_wrap_sys_device() is a potential solution for your application, without changing libusb.

I am not a porgrammer so that I can not give you the code modification needed for the test codes, but you can refer to the libusb example codes here.
https://github.com/libusb/libusb/blob/master/examples/testlibusb.c (Linux only)

Or here (for Android)
https://github.com/libusb/libusb/blob/master/android/examples/unrooted_android.c

If you need more guidance on the code modification, @benzea or @tormodvolden may be able to help you better.

Here is the test run under Ubuntu 20.04.

mcuee@UbuntuSwift3:~/build/libusb$ ./examples/testlibusb -d /dev/bus/usb/003/005
Dev (bus 3, device 5): 1C7A - 0575 speed: 480M
  Manufacturer:              EgisTec
  Product:                   EgisTec EH575

mcuee@UbuntuSwift3:~/build/libusb$ ./examples/testlibusb -v -d /dev/bus/usb/003/007
Dev (bus 3, device 7): 03EB - 2111 speed: 480M
  Manufacturer:              Atmel Corp.
  Product:                   EDBG CMSIS-DAP
  Serial Number:             ATML2654061800002660
  Configuration:
    wTotalLength:            130
    bNumInterfaces:          4
    bConfigurationValue:     1
    iConfiguration:          0
    bmAttributes:            80h
    MaxPower:                250
    Interface:
      bInterfaceNumber:      0
      bAlternateSetting:     0
      bNumEndpoints:         2
      bInterfaceClass:       3
      bInterfaceSubClass:    0
      bInterfaceProtocol:    0
      iInterface:            4
      Endpoint:
        bEndpointAddress:    01h
        bmAttributes:        03h
        wMaxPacketSize:      512
        bInterval:           1
        bRefresh:            0
        bSynchAddress:       0
      Endpoint:
        bEndpointAddress:    82h
        bmAttributes:        03h
        wMaxPacketSize:      512
        bInterval:           1
        bRefresh:            0
        bSynchAddress:       0
    Interface:
      bInterfaceNumber:      1
      bAlternateSetting:     0
      bNumEndpoints:         1
      bInterfaceClass:       2
      bInterfaceSubClass:    2
      bInterfaceProtocol:    1
      iInterface:            0
      Endpoint:
        bEndpointAddress:    83h
        bmAttributes:        03h
        wMaxPacketSize:      64
        bInterval:           8
        bRefresh:            0
        bSynchAddress:       0
    Interface:
      bInterfaceNumber:      2
      bAlternateSetting:     0
      bNumEndpoints:         2
      bInterfaceClass:       10
      bInterfaceSubClass:    0
      bInterfaceProtocol:    0
      iInterface:            0
      Endpoint:
        bEndpointAddress:    84h
        bmAttributes:        02h
        wMaxPacketSize:      64
        bInterval:           0
        bRefresh:            0
        bSynchAddress:       0
      Endpoint:
        bEndpointAddress:    05h
        bmAttributes:        02h
        wMaxPacketSize:      64
        bInterval:           0
        bRefresh:            0
        bSynchAddress:       0
    Interface:
      bInterfaceNumber:      3
      bAlternateSetting:     0
      bNumEndpoints:         2
      bInterfaceClass:       255
      bInterfaceSubClass:    255
      bInterfaceProtocol:    255
      iInterface:            5
      Endpoint:
        bEndpointAddress:    87h
        bmAttributes:        02h
        wMaxPacketSize:      512
        bInterval:           255
        bRefresh:            0
        bSynchAddress:       0
      Endpoint:
        bEndpointAddress:    06h
        bmAttributes:        02h
        wMaxPacketSize:      512
        bInterval:           255
        bRefresh:            0
        bSynchAddress:       0

@tormodvolden
Copy link
Contributor

I can tell you a couple things about major Linux distributions: 1) They don't care much about old exotic hardware, and 2) they increasingly ship bundles of applications with custom-built libraries ("snap", "flatpak", etc) instead of using one global library version.

However, we are open for contributions to make libusb work better also in this case.

It has been suggested to make netlink runtime selectable. But I don't know if anyone is interested enough to implement this.

libusb_wrap_sys_device() can be very useful, for instance in combination with udev scripts. I have used it to open devices directly without going through enumeration, and such programs can launch, open a device and complete a USB transfer all within a few tens of milliseconds.

@mcuee mcuee changed the title Slow listing of usb devices Slow listing of usb devices -- and potential libusb improvement to make netlink runtime selectable May 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests