Пример #1
0
/*
 * 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);
}
Пример #2
0
/*
 * 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;
}