/********************************************* * (2013) Benjamin Krill *********************************************/ #include #include #include #include #include #include #define DEBUG 0 #if defined(DEBUG) && DEBUG == 1 #define printf_dbg(fmt, args...) printf(fmt, ## args) #else #define printf_dbg(args...) #endif static usb_dev_handle *hd = NULL; /* TODO: extend to support multiple USB device on one host! */ static struct usb_device * find_device(struct usb_bus* busses, int vendor, int product) { struct usb_bus *bus; struct usb_device *dev; for (bus = busses; bus; bus = bus->next) { printf_dbg("scanning bus %s\n", bus->dirname); for (dev = bus->devices; dev; dev=dev->next) { /* compare device vendor and product */ if ((dev->descriptor.idVendor == vendor) && (dev->descriptor.idProduct == product)) { /* print device information */ printf_dbg("\tfound device %s bus %s (idVendor 0x%04x idProduct 0x%04x)\n", dev->filename, dev->bus->dirname, dev->descriptor.idVendor, dev->descriptor.idProduct); return dev; } else { printf_dbg("\tdevice %s does not match\n", dev->filename); } } } return NULL; } usb_dev_handle * strm_init(int vendor, int product) { struct usb_device *dev; usb_init(); usb_find_busses(); usb_find_devices(); if ((dev = find_device(usb_get_busses(), vendor, product)) == NULL) return NULL; if (!(hd = usb_open(dev))) { printf("FAILED: cannot open device.\n"); return NULL; } /* reset usb device */ usb_reset(hd); printf_dbg("Lets do the magic (%p) ...\n", hd); return hd; } int strm_fini(void) { if (hd) usb_close(hd); hd = NULL; return 0; }