X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/a553f2674865fa544d04ca7b8194e30c008644ae..7e758047e4acf6f8db0178564691d20af38986ab:/client/proxusb.c diff --git a/client/proxusb.c b/client/proxusb.c index 0a50b991..f1d0458b 100644 --- a/client/proxusb.c +++ b/client/proxusb.c @@ -1,4 +1,5 @@ //----------------------------------------------------------------------------- +// Copyright (C) 2009 Michael Gernoth // Copyright (C) 2010 iZsh // // This code is licensed to you under the terms of the GNU GPL, version 2 or, @@ -10,6 +11,7 @@ #include #include +#include #include #include #include @@ -111,6 +113,8 @@ usb_dev_handle* findProxmark(int verbose, unsigned int *iface) { struct usb_bus *busses, *bus; usb_dev_handle *handle = NULL; + struct prox_unit units[50]; + int iUnit = 0; usb_find_busses(); usb_find_devices(); @@ -127,14 +131,46 @@ usb_dev_handle* findProxmark(int verbose, unsigned int *iface) handle = usb_open(dev); if (!handle) { if (verbose) - fprintf(stderr, "open failed: %s!\n", usb_strerror()); - return NULL; + fprintf(stderr, "open fabiled: %s!\n", usb_strerror()); + //return NULL; + continue; } *iface = dev->config[0].interface[0].altsetting[0].bInterfaceNumber; - return handle; + + struct prox_unit unit = {handle, {0}}; + usb_get_string_simple(handle, desc->iSerialNumber, unit.serial_number, sizeof(unit.serial_number)); + units[iUnit++] = unit; + + //return handle; } + } + } + + if (iUnit > 0) { + int iSelection = 0; + fprintf(stdout, "\nConnected units:\n"); + + for (int i = 0; i < iUnit; i++) + fprintf(stdout, "\t%d. SN: %s\n", i+1, units[i].serial_number); + + if (iUnit > 1) { + while (iSelection < 1 || iSelection > iUnit) { + fprintf(stdout, "Which unit do you want to connect to? "); + fscanf(stdin, "%d", &iSelection); + } + } + else + iSelection = 1; + iSelection --; + + for (int i = 0; i < iUnit; i++) { + if (iSelection == i) continue; + usb_close(units[i].handle); + units[i].handle = NULL; } + + return units[iSelection].handle; } return NULL; @@ -146,15 +182,6 @@ usb_dev_handle* OpenProxmark(int verbose) usb_dev_handle *handle = NULL; unsigned int iface; -#ifdef __linux__ - handle = findProxmark(verbose, &iface); - if (!handle) - return NULL; - - /* Whatever... */ - usb_reset(handle); -#endif - handle = findProxmark(verbose, &iface); if (!handle) return NULL;