From: iceman1001 <iceman@iuse.se>
Date: Wed, 7 Jan 2015 20:06:15 +0000 (+0100)
Subject: ADD: added a lot of ic ids to cmdhf15.c Thanks to Asper for the list.
X-Git-Tag: v2.0.0-rc1~44^2~25
X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/52ab55ab0da1a34f4ce62d2f730e39ac099d0555?ds=sidebyside;hp=79544b28adc44792888788eac3d58a03003860c5

ADD: added a lot of ic ids to cmdhf15.c Thanks to Asper for the list.
ADD: added a manufacturer list in "hf 14a reader",  only viable when UID is double or triple size.  Thanks to Asper for the list.
ADD: detect chinese magic backdoor commands in "hf 14a reader"
CHG: minor code clean up.
---

diff --git a/armsrc/appmain.c b/armsrc/appmain.c
index 3c92a7fd..d52ed94a 100644
--- a/armsrc/appmain.c
+++ b/armsrc/appmain.c
@@ -18,7 +18,6 @@
 #include "util.h"
 #include "printf.h"
 #include "string.h"
-
 #include <stdarg.h>
 
 #include "legicrf.h"
diff --git a/armsrc/crapto1.c b/armsrc/crapto1.c
index 9d491d12..df0834b8 100644
--- a/armsrc/crapto1.c
+++ b/armsrc/crapto1.c
@@ -44,12 +44,12 @@ static void quicksort(uint32_t* const start, uint32_t* const stop)
 		else if(*rit > *start)
 			--rit;
 		else
-			*it ^= (*it ^= *rit, *rit ^= *it);
+			*it ^= ( (*it ^= *rit ), *rit ^= *it);
 
 	if(*rit >= *start)
 		--rit;
 	if(rit != start)
-		*rit ^= (*rit ^= *start, *start ^= *rit);
+		*rit ^= ( (*rit ^= *start), *start ^= *rit);
 
 	quicksort(start, rit - 1);
 	quicksort(rit + 1, stop);
diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c
index c2f809fe..cf55e606 100644
--- a/armsrc/iso14443a.c
+++ b/armsrc/iso14443a.c
@@ -1812,7 +1812,7 @@ int iso14443a_select_card(byte_t *uid_ptr, iso14a_card_select_t *p_hi14a_card, u
 		if (!ReaderReceive(resp, resp_par)) return 0;
 		sak = resp[0];
 
-		// Test if more parts of the uid are comming
+    // Test if more parts of the uid are coming
 		if ((sak & 0x04) /* && uid_resp[0] == 0x88 */) {
 			// Remove first byte, 0x88 is not an UID byte, it CT, see page 3 of:
 			// http://www.nxp.com/documents/application_note/AN10927.pdf
diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c
index 8541553b..a52ee4c9 100644
--- a/armsrc/mifarecmd.c
+++ b/armsrc/mifarecmd.c
@@ -214,7 +214,6 @@ void MifareUReadCard(uint8_t arg0, uint8_t *datain)
 
         // clear trace
         iso14a_clear_trace();
-//      iso14a_set_tracing(false);
 
 		iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
 
diff --git a/armsrc/mifaresniff.c b/armsrc/mifaresniff.c
index fed12772..910ea74d 100644
--- a/armsrc/mifaresniff.c
+++ b/armsrc/mifaresniff.c
@@ -11,6 +11,7 @@
 #include "mifaresniff.h"
 #include "apps.h"
 
+
 static int sniffState = SNF_INIT;
 static uint8_t sniffUIDType;
 static uint8_t sniffUID[8];
diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c
index 7c856557..680af0fe 100644
--- a/armsrc/mifareutil.c
+++ b/armsrc/mifareutil.c
@@ -412,7 +412,8 @@ int mifare_ultra_special_writeblock(uint32_t uid, uint8_t blockNo, uint8_t *bloc
         if (MF_DBGLEVEL >= 1)   Dbprintf("Cmd Send Error: %02x %d", receivedAnswer[0],len);
         return 1;
     }
-
    return 0;
+

+    return 0;
 }
 
 int mifare_classic_halt(struct Crypto1State *pcs, uint32_t uid) 
diff --git a/armsrc/string.c b/armsrc/string.c
index cc71276c..945a4cf6 100644
--- a/armsrc/string.c
+++ b/armsrc/string.c
@@ -48,6 +48,11 @@ int memcmp(const void *av, const void *bv, int len)
 	return 0;
 }
 
+void memxor(uint8_t * dest, uint8_t * src, size_t len) {
+   for( ; len > 0; len--,dest++,src++)
+       *dest ^= *src;
+}
+
 int strlen(const char *str)
 {
 	int l = 0;
diff --git a/armsrc/string.h b/armsrc/string.h
index 421c2bf0..a9dbd826 100644
--- a/armsrc/string.h
+++ b/armsrc/string.h
@@ -19,6 +19,7 @@ int strlen(const char *str);
 RAMFUNC void *memcpy(void *dest, const void *src, int len);
 void *memset(void *dest, int c, int len);
 RAMFUNC int memcmp(const void *av, const void *bv, int len);
+void memxor(uint8_t * dest, uint8_t * src, size_t len);
 char *strncat(char *dest, const char *src, unsigned int n);
 char *strcat(char *dest, const char *src);
 void strreverse(char s[]);
diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c
index 673737e2..40173d83 100644
--- a/client/cmdhf14a.c
+++ b/client/cmdhf14a.c
@@ -27,6 +27,108 @@
 static int CmdHelp(const char *Cmd);
 static void waitCmd(uint8_t iLen);
 
+
+// structure and database for uid -> tagtype lookups 
+typedef struct { 
+	uint8_t uid;
+	char* desc;
+} manufactureName; 
+
+const manufactureName manufactureMapping[] = {
+	// ID,  "Vendor Country"
+	{ 0x01, "Motorola UK" },
+	{ 0x02, "ST Microelectronics SA France" },
+	{ 0x03, "Hitachi, Ltd Japan" }, 
+	{ 0x04, "NXP Semiconductors Germany" }, 
+	{ 0x05, "Infineon Technologies AG Germany" }, 
+	{ 0x06, "Cylink USA" }, 
+	{ 0x07, "Texas Instrument France" },
+	{ 0x08, "Fujitsu Limited Japan" }, 
+	{ 0x09, "Matsushita Electronics Corporation, Semiconductor Company Japan" }, 
+	{ 0x0A, "NEC Japan" }, 
+	{ 0x0B, "Oki Electric Industry Co. Ltd Japan" },
+	{ 0x0C, "Toshiba Corp. Japan" },
+	{ 0x0D, "Mitsubishi Electric Corp. Japan" },
+	{ 0x0E, "Samsung Electronics Co. Ltd Korea" },
+	{ 0x0F, "Hynix / Hyundai, Korea" },
+	{ 0x10, "LG-Semiconductors Co. Ltd Korea" },
+	{ 0x11, "Emosyn-EM Microelectronics USA" },
+	{ 0x12, "INSIDE Technology France" },
+	{ 0x13, "ORGA Kartensysteme GmbH Germany" },
+	{ 0x14, "SHARP Corporation Japan" },
+	{ 0x15, "ATMEL France" },
+	{ 0x16, "EM Microelectronic-Marin SA Switzerland" },
+	{ 0x17, "KSW Microtec GmbH Germany" },
+	{ 0x18, "ZMD AG Germany" },
+	{ 0x19, "XICOR, Inc. USA" },
+	{ 0x1A, "Sony Corporation Japan Identifier Company Country" },
+	{ 0x1B, "Malaysia Microelectronic Solutions Sdn. Bhd Malaysia" },
+	{ 0x1C, "Emosyn USA" },
+	{ 0x1D, "Shanghai Fudan Microelectronics Co. Ltd. P.R. China" },
+	{ 0x1E, "Magellan Technology Pty Limited Australia" },
+	{ 0x1F, "Melexis NV BO Switzerland" },
+	{ 0x20, "Renesas Technology Corp. Japan" },
+	{ 0x21, "TAGSYS France" },
+	{ 0x22, "Transcore USA" },
+	{ 0x23, "Shanghai belling corp., ltd. China" },
+	{ 0x24, "Masktech Germany Gmbh Germany" },
+	{ 0x25, "Innovision Research and Technology Plc UK" },
+	{ 0x26, "Hitachi ULSI Systems Co., Ltd. Japan" },
+	{ 0x27, "Cypak AB Sweden" },
+	{ 0x28, "Ricoh Japan" },
+	{ 0x29, "ASK France" },
+	{ 0x2A, "Unicore Microsystems, LLC Russian Federation" },
+	{ 0x2B, "Dallas Semiconductor/Maxim USA" },
+	{ 0x2C, "Impinj, Inc. USA" },
+	{ 0x2D, "RightPlug Alliance USA" },
+	{ 0x2E, "Broadcom Corporation USA" },
+	{ 0x2F, "MStar Semiconductor, Inc Taiwan, ROC" },
+	{ 0x30, "BeeDar Technology Inc. USA" },
+	{ 0x31, "RFIDsec Denmark" },
+	{ 0x32, "Schweizer Electronic AG Germany" },
+	{ 0x33, "AMIC Technology Corp Taiwan" }, 
+	{ 0x34, "Mikron JSC Russia" },
+	{ 0x35, "Fraunhofer Institute for Photonic Microsystems Germany" },
+	{ 0x36, "IDS Microchip AG Switzerland" },
+	{ 0x37, "Kovio USA" },
+	{ 0x38, "HMT Microelectronic Ltd Switzerland Identifier Company Country" },
+	{ 0x39, "Silicon Craft Technology Thailand" },
+	{ 0x3A, "Advanced Film Device Inc. Japan" },
+	{ 0x3B, "Nitecrest Ltd UK" },
+	{ 0x3C, "Verayo Inc. USA" },
+	{ 0x3D, "HID Global USA" },
+	{ 0x3E, "Productivity Engineering Gmbh Germany" },
+	{ 0x3F, "Austriamicrosystems AG (reserved) Austria" }, 
+	{ 0x40, "Gemalto SA France" },
+	{ 0x41, "Renesas Electronics Corporation Japan" },
+	{ 0x42, "3Alogics Inc Korea" },
+	{ 0x43, "Top TroniQ Asia Limited Hong Kong" },
+	{ 0x44, "Gentag Inc (USA) USA" },
+	{ 0x00, "no tag-info available" } // must be the last entry
+};
+
+
+// get a product description based on the UID
+//		uid[8] 	tag uid
+// returns description of the best match	
+static char* getTagInfo(uint8_t uid) {
+
+	int i, best = -1;	
+	int len = sizeof(manufactureMapping) / sizeof(manufactureName);
+	
+	for ( i = 0; i < len; ++i ) {
+		if ( uid == manufactureMapping[i].uid) {
+			if (best == -1) { 
+				best = i;
+			} 
+		} 
+	} 
+
+	if (best>=0) return manufactureMapping[best].desc;
+	
+	return manufactureMapping[i].desc; 
+}
+
 int CmdHF14AList(const char *Cmd)
 {
 	PrintAndLog("Deprecated command, use 'hf list 14a' instead");
@@ -65,6 +167,11 @@ int CmdHF14AReader(const char *Cmd)
 	PrintAndLog(" UID : %s", sprint_hex(card.uid, card.uidlen));
 	PrintAndLog(" SAK : %02x [%d]", card.sak, resp.arg[0]);
 
+	// Double & triple sized UID, can be mapped to a manufacturer.
+	if ( card.uidlen > 4 ) {
+		PrintAndLog("MANUFACTURER : %s", getTagInfo(card.uid[0]));
+	}
+
 	switch (card.sak) {
 		case 0x00: PrintAndLog("TYPE : NXP MIFARE Ultralight | Ultralight C"); break;
 		case 0x01: PrintAndLog("TYPE : NXP TNP3xxx Activision Game Appliance"); break;
@@ -83,7 +190,6 @@ int CmdHF14AReader(const char *Cmd)
 		default: ;
 	}
 
-	
 	// try to request ATS even if tag claims not to support it
 	if (select_status == 2) {
 		uint8_t rats[] = { 0xE0, 0x80 }; // FSDI=8 (FSD=256), CID=0
@@ -98,13 +204,6 @@ int CmdHF14AReader(const char *Cmd)
 		card.ats_len = resp.arg[0];				// note: ats_len includes CRC Bytes
 	} 
 
-	// disconnect
-	c.arg[0] = 0;
-	c.arg[1] = 0;
-	c.arg[2] = 0;
-	SendCommand(&c);
-
-	
 	if(card.ats_len >= 3) {			// a valid ATS consists of at least the length byte (TL) and 2 CRC bytes
 		bool ta1 = 0, tb1 = 0, tc1 = 0;
 		int pos;
@@ -243,6 +342,24 @@ int CmdHF14AReader(const char *Cmd)
 		PrintAndLog("proprietary non iso14443-4 card found, RATS not supported");
 	}
 
+	
+	// try to see if card responses to "chinese magic backdoor" commands.
+	c.cmd = CMD_MIFARE_CIDENT;
+	c.arg[0] = 0;
+	c.arg[1] = 0;
+	c.arg[2] = 0;	
+	SendCommand(&c);
+	WaitForResponse(CMD_ACK,&resp);
+	uint8_t isOK  = resp.arg[0] & 0xff;
+	PrintAndLog(" Answers to chinese magic backdoor commands: %s", (isOK ? "YES" : "NO") );
+	
+	// disconnect
+	c.cmd = CMD_READER_ISO_14443a;
+	c.arg[0] = 0;
+	c.arg[1] = 0;
+	c.arg[2] = 0;
+	SendCommand(&c);
+
 	return select_status;
 }
 
diff --git a/client/cmdhf14a.h b/client/cmdhf14a.h
index 56329bed..d2e203a1 100644
--- a/client/cmdhf14a.h
+++ b/client/cmdhf14a.h
@@ -20,4 +20,5 @@ int CmdHF14AReader(const char *Cmd);
 int CmdHF14ASim(const char *Cmd);
 int CmdHF14ASnoop(const char *Cmd);
 
+
 #endif
diff --git a/client/cmdhf15.c b/client/cmdhf15.c
index b1e04e9a..d6ab2000 100644
--- a/client/cmdhf15.c
+++ b/client/cmdhf15.c
@@ -55,38 +55,135 @@ typedef struct {
 
 
 const productName uidmapping[] = {
+
 	// UID, #significant Bits, "Vendor(+Product)"
-	{ 0xE001000000000000LL, 16, "Motorola" },
-	{ 0xE002000000000000LL, 16, "ST Microelectronics" },
-	{ 0xE003000000000000LL, 16, "Hitachi" },
-	{ 0xE004000000000000LL, 16, "NXP(Philips)" },
+	{ 0xE001000000000000LL, 16, "Motorola UK" },
+	
+	// E0 02 xx
+	//   02 = ST Microelectronics
+	//   XX = IC id (Chip ID Family)
+	{ 0xE002000000000000LL, 16, "ST Microelectronics SA France" },
+	{ 0xE002050000000000LL, 24, "ST Microelectronics; LRI64   [IC id = 05]"},
+	{ 0xE002080000000000LL, 24, "ST Microelectronics; LRI2K   [IC id = 08]"},
+	{ 0xE0020A0000000000LL, 24, "ST Microelectronics; LRIS2K  [IC id = 10]"},
+	{ 0xE002440000000000LL, 24, "ST Microelectronics; LRIS64K [IC id = 68]"},
+
+	{ 0xE003000000000000LL, 16, "Hitachi, Ltd Japan" }, 
+	
+	// E0 04 xx
+	//   04 = Manufacturer code (Philips/NXP)
+	//   XX = IC id (Chip ID Family)
+	//I-Code SLI SL2 ICS20 [IC id = 01]
+	//I-Code SLI-S         [IC id = 02]
+	//I-Code SLI-L         [IC id = 03]
+	//I-Code SLIX          [IC id = 01 + bit36 set to 1 (starting from bit0 - different from normal SLI)]
+	//I-Code SLIX-S        [IC id = 02 + bit36 set to 1]
+	//I-Code SLIX-L        [IC id = 03 + bit36 set to 1]
+	{ 0xE004000000000000LL, 16, "NXP Semiconductors Germany (Philips)" }, 
 	{ 0xE004010000000000LL, 24, "NXP(Philips); IC SL2 ICS20/ICS21(SLI) ICS2002/ICS2102(SLIX)" },
 	{ 0xE004020000000000LL, 24, "NXP(Philips); IC SL2 ICS53/ICS54(SLI-S) ICS5302/ICS5402(SLIX-S)" },
 	{ 0xE004030000000000LL, 24, "NXP(Philips); IC SL2 ICS50/ICS51(SLI-L) ICS5002/ICS5102(SLIX-L)" },
-	{ 0xE005000000000000LL, 16, "Infineon" },
-	{ 0xE005400000000000LL, 24, "Infineon; 56x32bit" },
-	{ 0xE006000000000000LL, 16, "Cylinc" },
-	{ 0xE007000000000000LL, 16, "Texas Instrument; " },
+
+	// E0 05 XX .. .. ..
+	//   05 = Manufacturer code (Infineon)
+	//   XX = IC id (Chip ID Family)
+	{ 0xE005000000000000LL, 16, "Infineon Technologies AG Germany" }, 
+	{ 0xE005A10000000000LL, 24, "Infineon; SRF55V01P [IC id = 161] plain mode 1kBit"},
+	{ 0xE005A80000000000LL, 24, "Infineon; SRF55V01P [IC id = 168] pilot series 1kBit"},
+	{ 0xE005400000000000LL, 24, "Infineon; SRF55V02P [IC id = 64]  plain mode 2kBit"},
+	{ 0xE005000000000000LL, 24, "Infineon; SRF55V10P [IC id = 00]  plain mode 10KBit"},
+	{ 0xE005500000000000LL, 24, "Infineon; SRF55V02S [IC id = 80]  secure mode 2kBit"},
+	{ 0xE005100000000000LL, 24, "Infineon; SRF55V10S [IC id = 16]  secure mode 10KBit"},
+	{ 0xE0051E0000000000LL, 23, "Infineon; SLE66r01P [IC id = 3x = My-d Move or My-d move NFC]"},
+	{ 0xE005200000000000LL, 21, "Infineon; SLE66r01P [IC id = 3x = My-d Move or My-d move NFC]"},
+	
+	{ 0xE006000000000000LL, 16, "Cylink USA" }, 
+	
+	
+	// E0 07 xx
+	//   07 = Texas Instruments
+	//   XX = from bit 41 to bit 43 = product configuration - from bit 44 to bit 47 IC id (Chip ID Family)
+	//Tag IT RFIDType-I Plus, 2kBit, TI Inlay
+	//Tag-it HF-I Plus Inlay             [IC id = 00] -> b'0000 000 2kBit
+	//Tag-it HF-I Plus Chip              [IC id = 64] -> b'1000 000 2kBit
+	//Tag-it HF-I Standard Chip / Inlays [IC id = 96] -> b'1100 000 256Bit
+	//Tag-it HF-I Pro Chip / Inlays      [IC id = 98] -> b'1100 010 256Bit, Password protection
+	{ 0xE007000000000000LL, 16, "Texas Instrument France" },
 	{ 0xE007000000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Inlay; 64x32bit" },
 	{ 0xE007100000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Chip; 64x32bit" },
 	{ 0xE007800000000000LL, 23, "Texas Instrument; Tag-it HF-I Plus (RF-HDT-DVBB tag or Third Party Products)" },
 	{ 0xE007C00000000000LL, 23, "Texas Instrument; Tag-it HF-I Standard; 8x32bit" },
 	{ 0xE007C40000000000LL, 23, "Texas Instrument; Tag-it HF-I Pro; 8x23bit; password" },	
-	{ 0xE008000000000000LL, 16, "Fujitsu" },
-	{ 0xE009000000000000LL, 16, "Matsushita" },
-	{ 0xE00A000000000000LL, 16, "NEC" },
-	{ 0xE00B000000000000LL, 16, "Oki Electric" },
-	{ 0xE00C000000000000LL, 16, "Toshiba" },
-	{ 0xE00D000000000000LL, 16, "Mitsubishi" },
-	{ 0xE00E000000000000LL, 16, "Samsung" },
-	{ 0xE00F000000000000LL, 16, "Hyundai" },
-	{ 0xE010000000000000LL, 16, "LG-Semiconductors" },
+
+	{ 0xE008000000000000LL, 16, "Fujitsu Limited Japan" }, 
+	{ 0xE009000000000000LL, 16, "Matsushita Electronics Corporation, Semiconductor Company Japan" }, 
+	{ 0xE00A000000000000LL, 16, "NEC Japan" }, 
+	{ 0xE00B000000000000LL, 16, "Oki Electric Industry Co. Ltd Japan" },
+	{ 0xE00C000000000000LL, 16, "Toshiba Corp. Japan" },
+	{ 0xE00D000000000000LL, 16, "Mitsubishi Electric Corp. Japan" },
+	{ 0xE00E000000000000LL, 16, "Samsung Electronics Co. Ltd Korea" },
+	{ 0xE00F000000000000LL, 16, "Hynix / Hyundai, Korea" },
+	{ 0xE010000000000000LL, 16, "LG-Semiconductors Co. Ltd Korea" },
+	{ 0xE011000000000000LL, 16, "Emosyn-EM Microelectronics USA" },
+
 	{ 0xE012000000000000LL, 16, "HID Corporation" },
-	{ 0xE016000000000000LL, 16, "EM-Marin SA (Skidata)" },
+	{ 0xE012000000000000LL, 16, "INSIDE Technology France" },
+	{ 0xE013000000000000LL, 16, "ORGA Kartensysteme GmbH Germany" },
+	{ 0xE014000000000000LL, 16, "SHARP Corporation Japan" },
+	{ 0xE015000000000000LL, 16, "ATMEL France" },
+	
+	{ 0xE016000000000000LL, 16, "EM Microelectronic-Marin SA Switzerland (Skidata)" },
 	{ 0xE016040000000000LL, 24, "EM-Marin SA (Skidata Keycard-eco); EM4034? no 'read', just 'readmulti'" },
 	{ 0xE0160c0000000000LL, 24, "EM-Marin SA; EM4035?" },
 	{ 0xE016100000000000LL, 24, "EM-Marin SA (Skidata); EM4135; 36x64bit start page 13" },
 	{ 0xE016940000000000LL, 24, "EM-Marin SA (Skidata); 51x64bit" },
+	
+	{ 0xE017000000000000LL, 16, "KSW Microtec GmbH Germany" },
+	{ 0xE018000000000000LL, 16, "ZMD AG Germany" },
+	{ 0xE019000000000000LL, 16, "XICOR, Inc. USA" },
+	{ 0xE01A000000000000LL, 16, "Sony Corporation Japan Identifier Company Country" },
+	{ 0xE01B000000000000LL, 16, "Malaysia Microelectronic Solutions Sdn. Bhd Malaysia" },
+	{ 0xE01C000000000000LL, 16, "Emosyn USA" },
+	{ 0xE01D000000000000LL, 16, "Shanghai Fudan Microelectronics Co. Ltd. P.R. China" },
+	{ 0xE01E000000000000LL, 16, "Magellan Technology Pty Limited Australia" },
+	{ 0xE01F000000000000LL, 16, "Melexis NV BO Switzerland" },
+	{ 0xE020000000000000LL, 16, "Renesas Technology Corp. Japan" },
+	{ 0xE021000000000000LL, 16, "TAGSYS France" },
+	{ 0xE022000000000000LL, 16, "Transcore USA" },
+	{ 0xE023000000000000LL, 16, "Shanghai belling corp., ltd. China" },
+	{ 0xE024000000000000LL, 16, "Masktech Germany Gmbh Germany" },
+	{ 0xE025000000000000LL, 16, "Innovision Research and Technology Plc UK" },
+	{ 0xE026000000000000LL, 16, "Hitachi ULSI Systems Co., Ltd. Japan" },
+	{ 0xE027000000000000LL, 16, "Cypak AB Sweden" },
+	{ 0xE028000000000000LL, 16, "Ricoh Japan" },
+	{ 0xE029000000000000LL, 16, "ASK France" },
+	{ 0xE02A000000000000LL, 16, "Unicore Microsystems, LLC Russian Federation" },
+	{ 0xE02B000000000000LL, 16, "Dallas Semiconductor/Maxim USA" },
+	{ 0xE02C000000000000LL, 16, "Impinj, Inc. USA" },
+	{ 0xE02D000000000000LL, 16, "RightPlug Alliance USA" },
+	{ 0xE02E000000000000LL, 16, "Broadcom Corporation USA" },
+	{ 0xE02F000000000000LL, 16, "MStar Semiconductor, Inc Taiwan, ROC" },
+	{ 0xE030000000000000LL, 16, "BeeDar Technology Inc. USA" },
+	{ 0xE031000000000000LL, 16, " RFIDsec Denmark" },
+	{ 0xE032000000000000LL, 16, " Schweizer Electronic AG Germany" },
+	{ 0xE033000000000000LL, 16, " AMIC Technology Corp Taiwan" }, 
+	{ 0xE034000000000000LL, 16, "Mikron JSC Russia" },
+	{ 0xE035000000000000LL, 16, "Fraunhofer Institute for Photonic Microsystems Germany" },
+	{ 0xE036000000000000LL, 16, "IDS Microchip AG Switzerland" },
+	{ 0xE037000000000000LL, 16, "Kovio USA" },
+	{ 0xE038000000000000LL, 16, "HMT Microelectronic Ltd Switzerland Identifier Company Country" },
+	{ 0xE039000000000000LL, 16, "Silicon Craft Technology Thailand" },
+	{ 0xE03A000000000000LL, 16, "Advanced Film Device Inc. Japan" },
+	{ 0xE03B000000000000LL, 16, "Nitecrest Ltd UK" },
+	{ 0xE03C000000000000LL, 16, "Verayo Inc. USA" },
+	{ 0xE03D000000000000LL, 16, "HID Global USA" },
+	{ 0xE03E000000000000LL, 16, "Productivity Engineering Gmbh Germany" },
+	{ 0xE03F000000000000LL, 16, "Austriamicrosystems AG (reserved) Austria" }, 
+	{ 0xE040000000000000LL, 16, "Gemalto SA France" },
+	{ 0xE041000000000000LL, 16, "Renesas Electronics Corporation Japan" },
+	{ 0xE042000000000000LL, 16, "3Alogics Inc Korea" },
+	{ 0xE043000000000000LL, 16, "Top TroniQ Asia Limited Hong Kong" },
+	{ 0xE044000000000000LL, 16, "Gentag Inc (USA) USA" },
 	{ 0,0,"no tag-info available" } // must be the last entry
 };
 
diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c
index 121736e9..46a11b56 100644
--- a/client/cmdhfmf.c
+++ b/client/cmdhfmf.c
@@ -988,6 +988,7 @@ int CmdHF14AMfChk(const char *Cmd)
 	int transferToEml = 0;
 	int createDumpFile = 0;
 
+
 	keyBlock = calloc(stKeyBlock, 6);
 	if (keyBlock == NULL) return 1;
 
diff --git a/client/cmdhw.c b/client/cmdhw.c
index 443973b8..4f65fb8c 100644
--- a/client/cmdhw.c
+++ b/client/cmdhw.c
@@ -13,9 +13,9 @@
 #include <string.h>
 #include <limits.h>
 #include "ui.h"
-//#include "proxusb.h"
 #include "proxmark3.h"
 #include "cmdparser.h"
+#include "cmddata.h"
 #include "cmdhw.h"
 #include "cmdmain.h"
 #include "cmddata.h"
@@ -418,7 +418,7 @@ static command_t CommandTable[] =
   {"setlfdivisor",  CmdSetDivisor,  0, "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},
   {"setmux",        CmdSetMux,      0, "<loraw|hiraw|lopkd|hipkd> -- Set the ADC mux to a specific value"},
   {"tune",          CmdTune,        0, "Measure antenna tuning"},
-  {"version",       CmdVersion,     0, "Show version inforation about the connected Proxmark"},
+  {"version",       CmdVersion,     0, "Show version information about the connected Proxmark"},
   {NULL, NULL, 0, NULL}
 };
 
diff --git a/client/cmdlf.c b/client/cmdlf.c
index 18bcf747..41dcca57 100644
--- a/client/cmdlf.c
+++ b/client/cmdlf.c
@@ -392,7 +392,7 @@ static void ChkBitstream(const char *str)
 
 int CmdLFSim(const char *Cmd)
 {
-  int i;
+	int i,j;
   static int gap;
 
   sscanf(Cmd, "%i", &gap);
@@ -400,18 +400,20 @@ int CmdLFSim(const char *Cmd)
   /* convert to bitstream if necessary */
   ChkBitstream(Cmd);
 
-  PrintAndLog("Sending data, please wait...");
-  for (i = 0; i < GraphTraceLen; i += 48) {
+	printf("Sending [%d bytes]", GraphTraceLen);
+	for (i = 0; i < GraphTraceLen; i += USB_CMD_DATA_SIZE) {
     UsbCommand c={CMD_DOWNLOADED_SIM_SAMPLES_125K, {i, 0, 0}};
-    int j;
-    for (j = 0; j < 48; j++) {
+
+		for (j = 0; j < USB_CMD_DATA_SIZE; j++) {
       c.d.asBytes[j] = GraphBuffer[i+j];
     }
     SendCommand(&c);
     WaitForResponse(CMD_ACK,NULL);
+		printf(".");
   }
 
-  PrintAndLog("Starting simulator...");
+	printf("\n");
+	PrintAndLog("Starting to simulate");
   UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}};
   SendCommand(&c);
   return 0;
diff --git a/client/cmdmain.c b/client/cmdmain.c
index 8d590e9e..b6517caa 100644
--- a/client/cmdmain.c
+++ b/client/cmdmain.c
@@ -132,11 +132,9 @@ int getCommand(UsbCommand* response)
 bool WaitForResponseTimeout(uint32_t cmd, UsbCommand* response, size_t ms_timeout) {
   
   UsbCommand resp;
-
 	if (response == NULL)
     response = &resp;
 
-
   // Wait until the command is received
   for(size_t dm_seconds=0; dm_seconds < ms_timeout/10; dm_seconds++) {
 
diff --git a/client/data.h b/client/data.h
index 33ee9d04..41bd9a41 100644
--- a/client/data.h
+++ b/client/data.h
@@ -13,6 +13,9 @@
 
 #include <stdint.h>
 
+//trace buffer size as defined in armsrc/apps.h TRACE_SIZE
+#define TRACE_BUFFER_SIZE 4096
+#define FILE_PATH_SIZE 1000
 #define SAMPLE_BUFFER_SIZE 64
 
 extern uint8_t* sample_buf;
diff --git a/client/graph.c b/client/graph.c
index a0e85ffd..a2753af7 100644
--- a/client/graph.c
+++ b/client/graph.c
@@ -36,6 +36,8 @@ void AppendGraph(int redraw, int clock, int bit)
 int ClearGraph(int redraw)
 {
   int gtl = GraphTraceLen;
+  memset(GraphBuffer, 0x00, GraphTraceLen);
+
   GraphTraceLen = 0;
 
   if (redraw)
diff --git a/client/proxmark3.c b/client/proxmark3.c
index 0e2a698c..8a967c7f 100644
--- a/client/proxmark3.c
+++ b/client/proxmark3.c
@@ -16,7 +16,7 @@
 #include <unistd.h>
 #include <readline/readline.h>
 #include <readline/history.h>
-
+//#include "proxusb.h"
 #include "proxmark3.h"
 #include "proxgui.h"
 #include "cmdmain.h"