From 0310364d23a511d131c3e2dcc2cc752c3c1d4562 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 11 Feb 2015 17:13:30 +0100 Subject: [PATCH] chg: the inital modification of t55xx commands to use Marshmellows new demod functions. fix: merged readblock & readblockPWD command. New syntax: "lf t55xx rd " -- OPTIONAL password fix. merged writeblock & writeblockPWD command. New syntax: "lf t55xx wr " -- OPTIONAL password --- armsrc/lfops.c | 2 +- client/cmdhf.c | 2 +- client/cmdlft55xx.c | 87 ++++++++++++++++++++++++++++----------------- 3 files changed, 57 insertions(+), 34 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index bbefba03..f3daacc6 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -982,7 +982,7 @@ void TurnReadLFOn(){ FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); // Give it a bit of time for the resonant antenna to settle. //SpinDelay(30); - SpinDelayUs(8*150); + SpinDelayUs(9*150); } /*-------------- Cloning routines -----------*/ diff --git a/client/cmdhf.c b/client/cmdhf.c index 07a4aa49..7f1246cc 100644 --- a/client/cmdhf.c +++ b/client/cmdhf.c @@ -475,7 +475,7 @@ uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, ui snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]); } else { - snprintf(line[j/16]+(( j % 16) * 4),110, "%02x! ", frame[j]); + snprintf(line[j/16]+(( j % 16) * 4),110, "%02x ", frame[j]); } } if(data_len == 0) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index b6b5ea44..4ac466d1 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -64,7 +64,6 @@ int usage_t55xx_info() { PrintAndLog(""); return 0; } - int usage_t55xx_dump(){ PrintAndLog("Usage: lf t55xx dump "); PrintAndLog(" , OPTIONAL password 4bytes (8 hex characters)"); @@ -74,6 +73,7 @@ int usage_t55xx_dump(){ PrintAndLog(""); return 0; } + static int CmdHelp(const char *Cmd); int CmdReadBlk(const char *Cmd) @@ -85,7 +85,7 @@ int CmdReadBlk(const char *Cmd) int errCnt; size_t bitlen; int maxErr = 100; - uint8_t askAmp = 0; + //uint8_t askAmp = 0; uint32_t blockData; uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0x00}; @@ -127,7 +127,8 @@ int CmdReadBlk(const char *Cmd) bitlen = getFromGraphBuf(bits); - errCnt = askrawdemod(bits, &bitlen, &clk, &invert, maxErr, askAmp); + //errCnt = askrawdemod(bits, &bitlen, &clk, &invert, maxErr, askAmp); + errCnt = askmandemod(bits, &bitlen, &clk, &invert, maxErr); //throw away static - allow 1 and -1 (in case of threshold command first) if ( errCnt == -1 || bitlen < 16 ){ @@ -152,12 +153,12 @@ int CmdReadBlk(const char *Cmd) return 4; } - blockData = PackBits(0, 32, bits); + blockData = PackBits(1, 32, bits); if ( block < 0) - PrintAndLog(" Decoded : 0x%08X %s", blockData, sprint_bin(bits,32) ); + PrintAndLog(" Decoded : 0x%08X %s", blockData, sprint_bin(bits+1,32) ); else - PrintAndLog(" Block %d : 0x%08X %s", block, blockData, sprint_bin(bits,32) ); + PrintAndLog(" Block %d : 0x%08X %s", block, blockData, sprint_bin(bits+1,32) ); return 0; } @@ -204,8 +205,15 @@ int CmdWriteBlk(const char *Cmd) int CmdReadTrace(const char *Cmd) { - char cmdp = param_getchar(Cmd, 0); + int invert = 0; + int clk = 0; + int errCnt; + size_t bitlen; + int maxErr = 100; + uint8_t bits[MAX_GRAPH_TRACE_LEN] = {0x00}; + char cmdp = param_getchar(Cmd, 0); + if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') { usage_t55xx_trace(); return 0; @@ -217,36 +225,51 @@ int CmdReadTrace(const char *Cmd) SendCommand(&c); WaitForResponse(CMD_ACK, NULL); - uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00}; - - GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,0); //3560 -- should be offset.. - WaitForResponseTimeout(CMD_ACK,NULL, 1500); - - for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) { - GraphBuffer[j] = ((int)data[j]); - } - GraphTraceLen = LF_TRACE_BUFF_SIZE; + CmdSamples("12000"); } - uint8_t bits[LF_BITSSTREAM_LEN] = {0x00}; - uint8_t * bitstream = bits; + bitlen = getFromGraphBuf(bits); + + //errCnt = askrawdemod(bits, &bitlen, &clk, &invert, maxErr, askAmp); + errCnt = askmandemod(bits, &bitlen, &clk, &invert, maxErr); - manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream, LF_BITSSTREAM_LEN); + //throw away static - allow 1 and -1 (in case of threshold command first) + if ( errCnt == -1 || bitlen < 16 ){ + PrintAndLog("no data found"); + if (g_debugMode) + PrintAndLog("errCnt: %d, bitlen: %d, clk: %d, invert: %d", errCnt, bitlen, clk, invert); + return 3; + } + if (g_debugMode) + PrintAndLog("Using Clock: %d - invert: %d - Bits Found: %d", clk, invert, bitlen); + + //move bits back to DemodBuffer + setDemodBuf(bits, bitlen, 0); + + // bits has the manchester encoded data. + errCnt = manrawdecode(bits, &bitlen); + if ( errCnt == -1 || bitlen < 16 ){ + PrintAndLog("no data found"); + if (g_debugMode) + PrintAndLog("errCnt: %d, bitlen: %d, clk: %d, invert: %d", errCnt, bitlen, clk, invert); + return 4; + } + RepaintGraphWindow(); uint8_t si = 5; - uint32_t bl0 = PackBits(si, 32, bitstream); - uint32_t bl1 = PackBits(si+32, 32, bitstream); + uint32_t bl0 = PackBits(si, 32, bits); + uint32_t bl1 = PackBits(si+32, 32, bits); - uint32_t acl = PackBits(si, 8, bitstream); si += 8; - uint32_t mfc = PackBits(si, 8, bitstream); si += 8; - uint32_t cid = PackBits(si, 5, bitstream); si += 5; - uint32_t icr = PackBits(si, 3, bitstream); si += 3; - uint32_t year = PackBits(si, 4, bitstream); si += 4; - uint32_t quarter = PackBits(si, 2, bitstream); si += 2; - uint32_t lotid = PackBits(si, 12, bitstream); si += 12; - uint32_t wafer = PackBits(si, 5, bitstream); si += 5; - uint32_t dw = PackBits(si, 15, bitstream); + uint32_t acl = PackBits(si, 8, bits); si += 8; + uint32_t mfc = PackBits(si, 8, bits); si += 8; + uint32_t cid = PackBits(si, 5, bits); si += 5; + uint32_t icr = PackBits(si, 3, bits); si += 3; + uint32_t year = PackBits(si, 4, bits); si += 4; + uint32_t quarter = PackBits(si, 2, bits); si += 2; + uint32_t lotid = PackBits(si, 12, bits); si += 12; + uint32_t wafer = PackBits(si, 5, bits); si += 5; + uint32_t dw = PackBits(si, 15, bits); PrintAndLog(""); PrintAndLog("-- T55xx Trace Information ----------------------------------"); @@ -262,8 +285,8 @@ int CmdReadTrace(const char *Cmd) PrintAndLog(" Die Number : %d", dw); PrintAndLog("-------------------------------------------------------------"); PrintAndLog(" Raw Data - Page 1"); - PrintAndLog(" Block 0 : 0x%08X %s", bl0, sprint_bin(bitstream+5,32) ); - PrintAndLog(" Block 0 : 0x%08X %s", bl1, sprint_bin(bitstream+37,32) ); + PrintAndLog(" Block 0 : 0x%08X %s", bl0, sprint_bin(bits+5,32) ); + PrintAndLog(" Block 0 : 0x%08X %s", bl1, sprint_bin(bits+37,32) ); PrintAndLog("-------------------------------------------------------------"); /* TRACE - BLOCK O -- 2.39.2