X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/3e4811c8b77f4e3d84ed681f6b49704a18c2b3c4..61dda55df6b4246dcaca5d67c557c74ba9f3838e:/client/cmdlft55xx.h

diff --git a/client/cmdlft55xx.h b/client/cmdlft55xx.h
index 31ffa499..1771742a 100644
--- a/client/cmdlft55xx.h
+++ b/client/cmdlft55xx.h
@@ -10,17 +10,131 @@
 #ifndef CMDLFT55XX_H__
 #define CMDLFT55XX_H__
 
+// config blocks
+#define T55X7_DEFAULT_CONFIG_BLOCK      0x000880E8      // compat mode, data rate 32, manchester, ST, 7 data blocks
+#define T55X7_RAW_CONFIG_BLOCK          0x000880E0      // compat mode, data rate 32, manchester, 7 data blocks
+
+#define T55X7_EM_UNIQUE_CONFIG_BLOCK    0x00148040      // emulate em4x02/unique - compat mode, manchester, data rate 64, 2 data blocks
+
+
+// FDXB requires data inversion and BiPhase 57 is simply BipHase 50 inverted, so we can either do it using the modulation scheme or the inversion flag
+// we've done both below to prove that it works either way, and the modulation value for BiPhase 50 in the Atmel data sheet of binary "10001" (17) is a typo,
+// and it should actually be "10000" (16)
+// #define T55X7_FDXB_CONFIG_BLOCK         903F8080  // emulate fdx-b - xtended mode, BiPhase ('57), data rate 32, 4 data blocks
+#define T55X7_FDXB_CONFIG_BLOCK         0x903F0082  // emulate fdx-b - xtended mode, BiPhase ('50), invert data, data rate 32, 4 data blocks
+#define T55X7_HID_26_CONFIG_BLOCK       0x00107060  // hid 26 bit - compat mode, FSK2a, data rate 50, 3 data blocks
+#define T55X7_INDALA_64_CONFIG_BLOCK    0x00081040  // emulate indala 64 bit - compat mode, PSK1, psk carrier FC * 2, data rate 32, maxblock 2
+#define T55X7_INDALA_224_CONFIG_BLOCK   0x000810E0  // emulate indala 224 bit - compat mode, PSK1, psk carrier FC * 2, data rate 32, maxblock 7
+#define T55X7_GUARDPROXII_CONFIG_BLOCK	0x00150060	// bitrate 64pcb, Direct modulation, Biphase, 3 data blocks
+#define T55X7_VIKING_CONFIG_BLOCK		0x00088040	// compat mode, data rate 32, Manchester, 2 data blocks
+#define T55X7_NORALYS_CONFIG_BLOCK		0x00088C6A	// compat mode,   (NORALYS - KCP3000)
+#define T55X7_IOPROX_CONFIG_BLOCK		0x00147040  // maxblock 2
+#define T55X7_bin 0b0010
+
+#define T5555_DEFAULT_CONFIG_BLOCK		0x6001F004  // data rate 64 , ask, manchester, 2 data blocks?
+enum {
+	T55x7_RAW = 0x00,
+	T55x7_DEFAULT = 0x00,
+	T5555_DEFAULT = 0x01,
+	EM_UNIQUE  = 0x0,
+	FDBX = 0x02,
+	HID_26 = 0x03,
+	INDALA_64 = 0x04,
+	INDALA_224 = 0x05,
+	GUARDPROXXII = 0x06,
+	VIKING = 0x07,
+	NORALSYS = 0x08,
+	IOPROX = 0x09,
+} t55xx_tag;
+
+typedef struct {
+	uint32_t bl1;
+	uint32_t bl2; 
+	uint32_t acl; 
+	uint32_t mfc; 
+	uint32_t cid; 
+	uint32_t year; 
+	uint32_t quarter; 
+	uint32_t icr;
+	uint32_t lotid; 
+	uint32_t wafer; 
+	uint32_t dw;
+} t55xx_tracedata_t;
+
+typedef struct {
+	uint32_t bl1;
+	uint32_t bl2;
+	uint32_t icr;
+	char lotidc;
+	uint32_t lotid;
+	uint32_t wafer;
+	uint32_t dw;
+} t5555_tracedata_t;
+
+typedef struct {
+	enum {
+		DEMOD_NRZ  = 0x00,    
+		DEMOD_PSK1 = 0x01,
+		DEMOD_PSK2 = 0x02,
+		DEMOD_PSK3 = 0x03,
+		DEMOD_FSK1  = 0x04,     
+		DEMOD_FSK1a = 0x05,     
+		DEMOD_FSK2  = 0x06,     
+		DEMOD_FSK2a = 0x07, 
+		DEMOD_FSK   = 0xF0, //generic FSK (auto detect FCs)    
+		DEMOD_ASK  = 0x08,
+		DEMOD_BI   = 0x10,
+		DEMOD_BIa  = 0x18,		
+	}  modulation;
+	bool inverted;
+	uint8_t offset;
+	uint32_t block0;
+	enum {
+		RF_8 = 0x00,
+		RF_16 = 0x01,
+		RF_32 = 0x02,
+		RF_40 = 0x03,
+		RF_50 = 0x04,
+		RF_64 = 0x05,
+		RF_100 = 0x06,
+		RF_128 = 0x07,
+	} bitrate;
+	bool Q5;
+} t55xx_conf_block_t;
+t55xx_conf_block_t Get_t55xx_Config();
+void Set_t55xx_Config(t55xx_conf_block_t conf);
+
+
 int CmdLFT55XX(const char *Cmd);
 int CmdT55xxSetConfig(const char *Cmd);
-int CmdReadBlk(const char *Cmd);
-int CmdWriteBlk(const char *Cmd);
-int CmdReadTrace(const char *Cmd);
-int CmdInfo(const char *Cmd);
+int CmdT55xxReadBlock(const char *Cmd);
+int CmdT55xxWriteBlock(const char *Cmd);
+int CmdT55xxReadTrace(const char *Cmd);
+int CmdT55xxInfo(const char *Cmd);
+int CmdT55xxDetect(const char *Cmd);
+int CmdResetRead(const char *Cmd);
+int CmdT55xxWipe(const char *Cmd);
+int CmdT55xxBruteForce(const char *Cmd);
 
 char * GetBitRateStr(uint32_t id);
 char * GetSaferStr(uint32_t id);
 char * GetModulationStr( uint32_t id);
-uint32_t PackBits(uint8_t start, uint8_t len, uint8_t* bitstream);
-void printT55xx(const char *demodStr);
-bool test();
+char * GetModelStrFromCID(uint32_t cid);
+char * GetSelectedModulationStr( uint8_t id);
+uint32_t PackBits(uint8_t start, uint8_t len, uint8_t *bitstream);
+void printT5xxHeader(uint8_t page);
+void printT55xxBlock(const char *demodStr);
+int printConfiguration( t55xx_conf_block_t b);
+
+bool DecodeT55xxBlock();
+bool tryDetectModulation();
+bool test(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk, bool *Q5);
+int special(const char *Cmd);
+int AquireData( uint8_t page, uint8_t block, bool pwdmode, uint32_t password );
+
+bool detectPassword(int password);
+
+void printT55xxTrace( t55xx_tracedata_t data, uint8_t repeat );
+void printT5555Trace( t5555_tracedata_t data, uint8_t repeat );
+
 #endif