]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Format hf 14a list output for bigger frame sizes
authorpwpiwi <pwpiwi@users.noreply.github.com>
Thu, 18 Dec 2014 18:39:16 +0000 (19:39 +0100)
committerpwpiwi <pwpiwi@users.noreply.github.com>
Thu, 18 Dec 2014 18:39:16 +0000 (19:39 +0100)
client/cmdhf14a.c

index 5d1c48535601e50fd98bf3d7125fdc0e0d1220d4..e8dc8abca6723b08acf48af32d1d5838889e1b23 100644 (file)
@@ -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 = 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;
 
        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; 
 
                // 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;
                        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))) {
                        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 {
                        } 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]) {
                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, "");
                        }
                        } else {
                                sprintf(crc, "");
                        }
@@ -136,12 +136,21 @@ int CmdHF14AList(const char *Cmd)
 
                EndOfTransmissionTimestamp = timestamp + duration;
                
 
                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;
                
 
                bool next_isResponse = *((uint16_t *)(trace + tracepos + 6)) & 0x8000;
                
Impressum, Datenschutz