/* * Open USB adapter, detected by vendor/product ID. * Return a pointer to adapter structure, or 0 when not found. */ static adapter_t *open_usb_adapter(const char *port_name) { char *delimiter; const char *serial = 0; int prefix_len, i, vid, pid; if (!port_name) { /* Autodetect the device from a list of known adapters. */ adapter_t *a = adapter_open_pickit2(0, 0, 0); if (! a) a = adapter_open_pickit3(0, 0, 0); #ifdef USE_MPSSE if (! a) a = adapter_open_mpsse(0, 0, 0); #endif if (! a) a = adapter_open_hidboot(0, 0, 0); if (! a) a = adapter_open_an1388(0, 0, 0); if (! a) a = adapter_open_uhb(0, 0, 0); return a; } /* Get protocol prefix. */ delimiter = strchr(port_name, ':'); if (! delimiter) return 0; prefix_len = delimiter - port_name; /* Find prefix in the protocol table. */ for (i=0; usb_tab[i].prefix; i++) { int len = strlen(usb_tab[i].prefix); if (prefix_len == len && strncasecmp(port_name, usb_tab[i].prefix, len) == 0) { goto found; } } fprintf(stderr, "%s: Unknown USB protocol\n", port_name); return 0; found: vid = strtoul(delimiter+1, &delimiter, 16); if (*delimiter != ':') { fprintf(stderr, "%s: Incorrect VID:PID value\n", port_name); return 0; } pid = strtoul(delimiter+1, &delimiter, 16); if (*delimiter == ':') serial = delimiter+1; return usb_tab[i].func(vid, pid, serial); }
/* * Open USB adapter, detected by vendor/product ID. * Return a pointer to adapter structure, or 0 when not found. */ static adapter_t *open_usb_adapter() { adapter_t *a; a = adapter_open_pickit(); #ifdef USE_MPSSE if (! a) a = adapter_open_mpsse(); #endif if (! a) a = adapter_open_hidboot(); if (! a) a = adapter_open_an1388(); if (! a) a = adapter_open_uhb(); return a; }