]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - common/usb_cdc.c
remove old Manufacturer description code. fix Product description length
[proxmark3-svn] / common / usb_cdc.c
index 56690ad87f69c42a095a2f515341dbf44304f858..d3f5cd0c50fd6a7f0f8c2534e3bc56b6be9fcf65 100644 (file)
 #define AT91C_EP_OUT_SIZE 0x40\r
 #define AT91C_EP_IN_SIZE  0x40\r
 \r
+// Language must always be 0.\r
+#define STR_LANGUAGE_CODES 0x00\r
+#define STR_MANUFACTURER   0x01\r
+#define STR_PRODUCT        0x02\r
+\r
 static const char devDescriptor[] = {\r
        /* Device descriptor */\r
        0x12,      // bLength\r
@@ -56,8 +61,8 @@ static const char devDescriptor[] = {
        0xc4,0x9a, // Vendor ID (0x9ac4 = J. Westhues)\r
        0x8f,0x4b, // Product ID (0x4b8f = Proxmark-3 RFID Instrument)\r
        0x01,0x00, // Device release number (0001)\r
-       0x01,      // iManufacturer\r
-       0x02,      // iProduct\r
+       STR_MANUFACTURER,  // iManufacturer\r
+       STR_PRODUCT,       // iProduct\r
        0x00,      // iSerialNumber\r
        0x01       // bNumConfigs\r
 };\r
@@ -72,8 +77,8 @@ static const char cfgDescriptor[] = {
        0x02,   // CbNumInterfaces\r
        0x01,   // CbConfigurationValue\r
        0x00,   // CiConfiguration\r
-       0xC0,   // CbmAttributes 0xA0\r
-       0xFA,   // CMaxPower\r
+       0x80,   // CbmAttributes (Bus Powered)\r
+       0x4B,   // CMaxPower (150mA max current drawn from bus)\r
 \r
        /* Interface 0 Descriptor: Communication Class Interface */\r
        0x09, // bLength\r
@@ -157,7 +162,9 @@ static const char StrDescLanguageCodes[] = {
   0x03,                        // Type is string\r
   0x09, 0x04   // supported language Code 0 = 0x0409 (English)\r
 };\r
-       \r
+\r
+// Note: ModemManager (Linux) ignores Proxmark3 devices by matching the\r
+// manufacturer string "proxmark.org". Don't change this.\r
 static const char StrDescManufacturer[] = {\r
   26,                  // Length\r
   0x03,                        // Type is string\r
@@ -176,26 +183,24 @@ static const char StrDescManufacturer[] = {
 };\r
 \r
 static const char StrDescProduct[] = {\r
-  8,                   // Length\r
+  4,                   // Length\r
   0x03,                        // Type is string\r
   'P', 0x00,\r
   'M', 0x00,\r
   '3', 0x00\r
 };\r
-       \r
-static const char* const pStrings[] =\r
-{\r
-    StrDescLanguageCodes,\r
-    StrDescManufacturer,\r
-       StrDescProduct\r
-};\r
 \r
 const char* getStringDescriptor(uint8_t idx)\r
 {\r
-    if(idx >= (sizeof(pStrings) / sizeof(pStrings[0]))) {\r
-        return(NULL);\r
-       } else {\r
-               return(pStrings[idx]);\r
+       switch (idx) {\r
+               case STR_LANGUAGE_CODES:\r
+                       return StrDescLanguageCodes;\r
+               case STR_MANUFACTURER:\r
+                       return StrDescManufacturer;\r
+               case STR_PRODUCT:\r
+                       return StrDescProduct;\r
+               default:\r
+                       return NULL;\r
        }\r
 }\r
 \r
@@ -550,9 +555,10 @@ void AT91F_CDC_Enumerate() {
                        if (strDescriptor != NULL) {\r
                                AT91F_USB_SendData(pUdp, strDescriptor, MIN(strDescriptor[0], wLength));\r
                        } else {\r
-                               AT91F_USB_SendStall(pUdp);\r
+                               AT91F_USB_SendData(pUdp, StrDescManufacturer, MIN(sizeof(StrDescManufacturer), wLength));\r
                        }\r
                }\r
+               \r
                else\r
                        AT91F_USB_SendStall(pUdp);\r
                break;\r
Impressum, Datenschutz