Resetting the USB Bus under linux

Posted by Benjamin Close on September 15, 2008 under UniSA | 5 Comments to Read

Today Snappy, the little photo box we have taking photos of the new Bruce Lab, broke again. Hence I quickly came up with a way of resetting the USB device under linux based on libusb. Sadly whilst I can confirm this does reset the device gphoto2 still doesn’t like our little Canon Ixus 400 and we still get timeouts after about 12 hours of taking photos – 1 photo every 2 minutes. Below is the hack of a program I used.

To compile use: gcc -o outputname resetusb.c -lusb

#include <stdio.h>
#include <usb.h>

int main(void)
{
      struct usb_bus *busses;
      usb_init();
      usb_find_busses();
      usb_find_devices();
      busses = usb_get_busses();
      struct usb_bus *bus;
      int c, i, a;
      /* ... */
      for (bus = busses; bus; bus = bus->next) {
        struct usb_device *dev;
        int val;
        usb_dev_handle *junk;
        for (dev = bus->devices; dev; dev = dev->next) {
          char buf[1024];
          junk = usb_open ( dev );
          usb_get_string_simple(junk,2,buf,1023);
          if ( junk == NULL ){
            printf("Can't open %p (%s)\n", dev, buf );
          } else {
            val = usb_reset(junk);
            printf( "reset %p %d (%s)\n", dev, val, buf );
          }
          usb_close(junk);
        }
      }
}



Donations keep this site alive
  • Peter said,

    Echt toll…und was soll #include ohne Angabe der include Datei???

  • Ray said,

    The libraries referenced in the #include statements don’t show up on the web page (presumably because the lt / gt characters cause it to be interpreted as an HTML tag).

    Just guessing, but I think they need to be:

    #include <stdio.h>
    #include <usb.h>

  • Benjamin Close said,

    Oops, I believe the two includes are correct – article updated, thanks!

  • can't access USB disk now and then said,

    [...] USB stack. I've used the following in the past when doing some USB work on a development platform: http://www.clearchain.com/blog/posts…us-under-linux It works fairly well, but doesn't recover from all conditions of course. The main issue might be [...]

  • Charlotte said,

    Thanks for sharing this. It really works! Thanks again, keep it up!

Add A Comment