GraphBuffer[j] = ((int)data[j]) ;\r
}\r
GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
- \r
- uint8_t bits[1000] = {0x00};\r
- uint8_t * bitstream = bits;\r
- \r
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream);\r
- \r
- uint32_t bl0 = PackBits(5, 32, bitstream);\r
- PrintAndLog(" Block %d : 0x%08X %s", Block, bl0, sprint_bin(bitstream+5,32) );\r
- \r
+ CmdIceManchester(Cmd);\r
RepaintGraphWindow();\r
return 0;\r
}\r
}\r
GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
\r
- uint8_t bits[1000] = {0x00};\r
- uint8_t * bitstream = bits;\r
- \r
- manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream); \r
- \r
- uint32_t bl0 = PackBits(5, 32, bitstream);\r
- PrintAndLog(" Block %d : 0x%08X %s", Block, bl0, sprint_bin(bitstream+5,32) );\r
+ CmdIceManchester(Cmd);\r
\r
RepaintGraphWindow();\r
return 0;\r
\r
int CmdReadTrace(const char *Cmd)\r
{\r
- UsbCommand c = {CMD_T55XX_READ_TRACE, {0, 0, 0}};\r
- SendCommand(&c);\r
- WaitForResponse(CMD_ACK, NULL);\r
+ char cmdp = param_getchar(Cmd, 0);\r
\r
- uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00};\r
+ if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {\r
+ PrintAndLog("Usage: lf t55xx trace [use data from Graphbuffer]");\r
+ PrintAndLog(" [use data from Graphbuffer], if not set, try reading data from tag.");\r
+ PrintAndLog("");\r
+ PrintAndLog(" sample: lf t55xx trace");\r
+ PrintAndLog(" sample: lf t55xx trace 1");\r
+ return 0;\r
+ }\r
\r
- GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560); //3560 -- should be offset..\r
- WaitForResponseTimeout(CMD_ACK,NULL, 1500);\r
+ if ( strlen(Cmd)==0){\r
+ UsbCommand c = {CMD_T55XX_READ_TRACE, {0, 0, 0}};\r
+ SendCommand(&c);\r
+ WaitForResponse(CMD_ACK, NULL);\r
\r
- for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) {\r
- GraphBuffer[j] = ((int)data[j]);\r
- //GraphBuffer[j] = ((int)data[j]) - 128;\r
+ uint8_t data[LF_TRACE_BUFF_SIZE] = {0x00};\r
+\r
+ GetFromBigBuf(data,LF_TRACE_BUFF_SIZE,3560); //3560 -- should be offset..\r
+ WaitForResponseTimeout(CMD_ACK,NULL, 1500);\r
+\r
+ for (int j = 0; j < LF_TRACE_BUFF_SIZE; j++) {\r
+ GraphBuffer[j] = ((int)data[j]);\r
+ }\r
+ GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
}\r
- GraphTraceLen = LF_TRACE_BUFF_SIZE;\r
\r
uint8_t bits[1000] = {0x00};\r
uint8_t * bitstream = bits;\r
Normal mode\r
Extended mode\r
*/\r
- // läs block 0 - data finns i graphbuff\r
- CmdReadBlk("0");\r
+ char cmdp = param_getchar(Cmd, 0);\r
+\r
+ if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {\r
+ PrintAndLog("Usage: lf t55xx info [use data from Graphbuffer]");\r
+ PrintAndLog(" [use data from Graphbuffer], if not set, try reading data from tag.");\r
+ PrintAndLog("");\r
+ PrintAndLog(" sample: lf t55xx info");\r
+ PrintAndLog(" sample: lf t55xx info 1");\r
+ return 0;\r
+ }\r
+\r
+ if ( strlen(Cmd)==0){\r
+ CmdReadBlk("0");\r
+ }\r
\r
+\r
uint8_t bits[1000] = {0x00};\r
uint8_t * bitstream = bits;\r
\r
}\r
\r
int CmdIceFsk(const char *Cmd){\r
- //uint8_t bits[1000] = {0x00};\r
- //uint8_t * bitstream = bits;\r
iceFsk3(GraphBuffer, LF_TRACE_BUFF_SIZE);\r
- \r
RepaintGraphWindow();\r
return 0;\r
}\r
+int CmdIceManchester(const char *Cmd){\r
+\r
+ int blockNum = -1;\r
+ uint32_t blockData;\r
+ uint8_t bits[1000] = {0x00};\r
+ uint8_t * bitstream = bits;\r
+ \r
+ manchester_decode(GraphBuffer, LF_TRACE_BUFF_SIZE, bitstream); \r
+ blockData = PackBits(5, 32, bitstream);\r
+ sscanf(Cmd, "%d", &blockNum);\r
+ if ( blockNum > -1){\r
+ PrintAndLog(" Block %d : 0x%08X %s", blockNum, blockData, sprint_bin(bitstream+5,32) );\r
+ }else{\r
+ PrintAndLog(" Decoded : 0x%08X %s", blockData, sprint_bin(bitstream+5,32) );\r
+ }\r
+ return 0;\r
+} \r
\r
char * GetBitRateStr(uint32_t id){\r
static char buf[40];\r
{"rdPWD", CmdReadBlkPWD, 0, "<block> <password> -- Read T55xx block data with password mode"},\r
{"wr", CmdWriteBlk, 0, "<data> <block> -- Write T55xx block data (page 0)"},\r
{"wrPWD", CmdWriteBlkPWD, 0, "<data> <block> <password> -- Write T55xx block data with password"},\r
- {"trace", CmdReadTrace, 0, "Read T55xx traceability data (page 1 / blk 0-1)"},\r
- {"info", CmdInfo, 0, "Read T55xx configuration data (page0 /blk 0)"},\r
+ {"trace", CmdReadTrace, 0, "[1] Read T55xx traceability data (page 1 / blk 0-1) "},\r
+ {"info", CmdInfo, 0, "[1] Read T55xx configuration data (page0 /blk 0)"},\r
{"dump", CmdDump, 0, "[password] Dump T55xx card block 0-7. optional with password"},\r
{"fsk", CmdIceFsk, 0, "FSK demod"},\r
+ {"man", CmdIceManchester, 0, "Manchester demod"},\r
{NULL, NULL, 0, NULL}\r
};\r
\r
clock = GetT55x7Clock( data, len, high );
startindex = DetectFirstTransition(data, len, high);
- //PrintAndLog(" Clock : %d", clock);
- //PrintAndLog(" startindex : %d", startindex);
+ // PrintAndLog(" Clock : %d", clock);
+ // PrintAndLog(" startindex : %d", startindex);
if (high != 1)
bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
else
bitlength= ManchesterConvertFrom1(data, len, bitStream, clock, startindex);
- //if ( bitlength > 0 )
- // PrintPaddedManchester(bitStream, bitlength, clock);
-
memcpy(dataout, bitStream, bitlength);
return bitlength;
}
int stopOne = j-1;
int fieldlen = stopOne-startOne;
- printf("FIELD Length: %d \n", fieldlen);
+ fieldlen = (fieldlen == 39 || fieldlen == 41)? 40 : fieldlen;
+ fieldlen = (fieldlen == 59 || fieldlen == 51)? 50 : fieldlen;
+ if ( fieldlen != 40 && fieldlen != 50){
+ printf("Detected field Length: %d \n", fieldlen);
+ printf("Can only handle len 40 or 50. Aborting...");
+ return;
+ }
// FSK sequence start == 000111
int startPos = 0;