From: pwpiwi Date: Thu, 18 Dec 2014 18:39:16 +0000 (+0100) Subject: Format hf 14a list output for bigger frame sizes X-Git-Tag: v2.0.0-rc1~82 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/f10bf20c6cd0cdf6074acae03493955224ed17cf?ds=sidebyside;hp=--cc Format hf 14a list output for bigger frame sizes --- f10bf20c6cd0cdf6074acae03493955224ed17cf diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index 5d1c4853..e8dc8abc 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -56,8 +56,8 @@ int CmdHF14AList(const char *Cmd) PrintAndLog("Start = Start of Start Bit, End = End of last modulation. Src = Source of Transfer"); PrintAndLog("All times are in carrier periods (1/13.56Mhz)"); PrintAndLog(""); - PrintAndLog(" Start | End | Src | Data"); - PrintAndLog("-----------|-----------|-----|--------"); + PrintAndLog(" Start | End | Src | Data (! denotes parity error) | CRC "); + PrintAndLog("-----------|-----------|-----|-----------------------------------------------------------------------"); uint16_t tracepos = 0; uint16_t duration; @@ -105,30 +105,30 @@ int CmdHF14AList(const char *Cmd) // Break and stick with current result if buffer was not completely full if (timestamp == 0x44444444) break; - char line[1000] = ""; - int j; - for (j = 0; j < data_len; j++) { + char line[16][110]; + for (int j = 0; j < data_len; j++) { int oddparity = 0x01; int k; - + for (k=0;k<8;k++) { oddparity ^= (((frame[j] & 0xFF) >> k) & 0x01); } uint8_t parityBits = parityBytes[j>>3]; if (isResponse && (oddparity != ((parityBits >> (7-(j&0x0007))) & 0x01))) { - sprintf(line+(j*4), "%02x! ", frame[j]); + sprintf(line[j/16]+((j%16)*4), "%02x! ", frame[j]); } else { - sprintf(line+(j*4), "%02x ", frame[j]); + sprintf(line[j/16]+((j%16)*4), "%02x ", frame[j]); } + } - char crc[6] = ""; + char crc[5] = ""; if (data_len > 2) { uint8_t b1, b2; ComputeCrc14443(CRC_14443_A, frame, data_len-2, &b1, &b2); if (b1 != frame[data_len-2] || b2 != frame[data_len-1]) { - sprintf(crc, (isResponse & (data_len < 6)) ? "" : " !crc"); + sprintf(crc, (isResponse & (data_len < 6)) ? "" : "!crc"); } else { sprintf(crc, ""); } @@ -136,12 +136,21 @@ int CmdHF14AList(const char *Cmd) EndOfTransmissionTimestamp = timestamp + duration; - PrintAndLog(" %9d | %9d | %s | %s %s", - (timestamp - first_timestamp), - (EndOfTransmissionTimestamp - first_timestamp), - (isResponse ? "Tag" : "Rdr"), - line, - crc); + int num_lines = (data_len - 1)/16 + 1; + for (int j = 0; j < num_lines; j++) { + if (j == 0) { + PrintAndLog(" %9d | %9d | %s | %-64s| %s", + (timestamp - first_timestamp), + (EndOfTransmissionTimestamp - first_timestamp), + (isResponse ? "Tag" : "Rdr"), + line[j], + (j == num_lines-1)?crc:""); + } else { + PrintAndLog(" | | | %-64s| %s", + line[j], + (j == num_lines-1)?crc:""); + } + } bool next_isResponse = *((uint16_t *)(trace + tracepos + 6)) & 0x8000;