]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
multiple proxmark device support [Mohamed Elsabagh]
authoradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 14 May 2010 11:04:28 +0000 (11:04 +0000)
committeradam@algroup.co.uk <adam@algroup.co.uk@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 14 May 2010 11:04:28 +0000 (11:04 +0000)
client/proxusb.c
client/proxusb.h
common/usb.c

index 55ce9d68d4b892e3fe4e1f2c366017ddb050e2a5..8eedd2e67e4556937d14040de97c3f8acf3729d8 100644 (file)
@@ -113,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();
@@ -129,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;
index 42e6c75d5f83d3ad677110eab917f200a480b6e4..5845888a539af7ea01b200f815ffe8b23cc809c5 100644 (file)
@@ -26,4 +26,9 @@ struct usb_dev_handle* FindProxmark(int verbose, unsigned int *iface);
 struct usb_dev_handle* OpenProxmark(int verbose);
 void CloseProxmark(void);
 
+struct prox_unit {
+  usb_dev_handle *handle;
+  char serial_number[256];
+};
+
 #endif
index 3de7d369f28087cfb3c026e40d405d9097e25af1..3f30d97f655379d2b84d52ab995c21e1df524d5f 100644 (file)
@@ -95,7 +95,7 @@ static const uint8_t DeviceDescriptor[] = {
        0x01,0x00,              // Device release number (0001)
        0x01,                   // Manufacturer string descriptor index
        0x02,                   // Product string descriptor index
-       0x00,                   // Serial Number string descriptor index (None)
+       0x03,                   // Serial Number string descriptor index
        0x01,                   // Number of possible configurations (1)
 };
 
@@ -201,10 +201,26 @@ static const uint8_t StringDescriptor2[] = {
        't', 0x00,
 };
 
+// Serial Number
+// TODO: Pick yours! Don't forget to modify the length, if needed.
+static const uint8_t StringDescriptor3[] = {
+       18,             // Length
+       0x03,           // Type is string
+       'C', 0x00,
+       'h', 0x00,
+       'a', 0x00,
+       'n', 0x00,
+       'g', 0x00,
+       'e', 0x00,
+       'M', 0x00,
+       'e', 0x00,
+};
+
 static const uint8_t * const StringDescriptors[] = {
        StringDescriptor0,
        StringDescriptor1,
        StringDescriptor2,
+       StringDescriptor3,
 };
 
 
Impressum, Datenschutz