#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
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
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
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
'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