#!/usr/bin/env python2 import fcntl import os import subprocess import sys import time if not sys.platform.startswith("linux"): print >>sys.stderr, "Sorry, this tool requires Linux" sys.exit(1) try: search_usb_id = sys.argv[1].lower() except IndexError: print >>sys.stderr, "Usage: %s vendorid:devid" % sys.argv[0] print >>sys.stderr, "\nThis tool will reset all USB devices with the given ID (eg 1f4d:a803)" sys.exit(1) USBDEVFS_RESET = 21780 os.umask(0007) p = subprocess.Popen(["lsusb"], stdout=subprocess.PIPE) for line in p.stdout: line = line.split() usb_id = line[5].lower() if usb_id != search_usb_id: continue bus = line[1] dev = line[3].replace(":", "") filename = "/dev/bus/usb/%s/%s" % (bus, dev) print "Resetting", filename, "...", sys.stdout.flush() fd = os.open(filename, os.O_WRONLY) ret = fcntl.ioctl(fd, USBDEVFS_RESET, 0) if ret < 0: print >>sys.stderr, "\nError in ioctl:", ret sys.exit(1) os.close(fd) time.sleep(1) print "done"