]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
FIX: lf t55xx config now handles offsets.
[proxmark3-svn] / client / cmddata.c
index e6e4dc0a0f8c4f2cb485433962f35dfe8144baa3..9b88d83230c03a54ab728ca51df339cdf6a14b5d 100644 (file)
@@ -32,6 +32,12 @@ static int CmdHelp(const char *Cmd);
 //by marshmellow
 void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx)
 {
+       if (buff == NULL) 
+               return;
+       
+       if ( size >= MAX_DEMOD_BUF_LEN)
+               size = MAX_DEMOD_BUF_LEN;
+       
        size_t i = 0;
        for (; i < size; i++){
                DemodBuffer[i]=buff[startIdx++];
@@ -86,7 +92,24 @@ void printDemodBuff(void)
 
 int CmdPrintDemodBuff(const char *Cmd)
 {
-  printDemodBuff();
+  char hex;
+  char printBuff[512]={0x00};
+  uint8_t numBits = DemodBufferLen & 0xFFF0;
+  sscanf(Cmd, "%c", &hex);
+  if (hex == 'h'){
+    PrintAndLog("Usage: data printdemodbuffer [x]");
+    PrintAndLog("Options:        ");
+    PrintAndLog("       h       This help");
+    PrintAndLog("       x       output in hex (omit for binary output)");
+    return 0;
+  }
+  if (hex == 'x'){
+    numBits = binarraytohex(printBuff, (char *)DemodBuffer, numBits);
+    if (numBits==0) return 0;
+    PrintAndLog("DemodBuffer: %s",printBuff);
+  } else {
+    printDemodBuff();
+  }
   return 1;
 }
 int CmdAmp(const char *Cmd)
@@ -1016,7 +1039,7 @@ int FSKrawDemod(const char *Cmd, bool verbose)
     if(size > (8*32)+2) size = (8*32)+2; //only output a max of 8 blocks of 32 bits  most tags will have full bit stream inside that sample size
     if (verbose) {
       PrintAndLog("FSK decoded bitstream:");
-      printBitStream(BitStream,size);
+    printBitStream(BitStream,size);
     }
 
     return 1;
@@ -1624,7 +1647,7 @@ int PSKDemod(const char *Cmd, bool verbose)
   }
   if (invert != 0 && invert != 1) {
     if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
-    return -1;
+    return 0;
   }
   uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
   size_t BitLen = getFromGraphBuf(BitStream);
@@ -1632,22 +1655,27 @@ int PSKDemod(const char *Cmd, bool verbose)
   uint8_t carrier=countPSK_FC(BitStream, BitLen);
   if (carrier!=2 && carrier!=4 && carrier!=8){
     //invalid carrier
-    return -1;
+    return 0;
   }
   int errCnt=0;
   errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
   if (errCnt > maxErr){
     if (g_debugMode==1 && verbose) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return -1;
+    return 0;
   } 
   if (errCnt<0|| BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
     if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return -1;
+    return 0;
+  }
+  if (verbose) {
+         PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
+         if (errCnt>0){
+                       PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
+         }
   }
-  if (verbose) PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
   //prime demod buffer for output
   setDemodBuf(BitStream,BitLen,0);
-  return errCnt;
+  return 1;
 }
 
 // Indala 26 bit decode
@@ -1662,7 +1690,7 @@ int CmdIndalaDecode(const char *Cmd)
                ans = PSKDemod("32", 0);
        }
 
-       if (ans < 0){
+       if ( !ans ){
                if (g_debugMode==1) 
                        PrintAndLog("Error1: %d",ans);
                return 0;
@@ -1763,7 +1791,8 @@ int NRZrawDemod(const char *Cmd, bool verbose)
     if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
     return 0;
   }
-  PrintAndLog("Tried NRZ Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
+  if (verbose) 
+       PrintAndLog("Tried NRZ Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
   //prime demod buffer for output
   setDemodBuf(BitStream,BitLen,0);
 
@@ -1771,9 +1800,9 @@ int NRZrawDemod(const char *Cmd, bool verbose)
     PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
   }
   if (verbose) {
-    PrintAndLog("NRZ demoded bitstream:");
-    // Now output the bitstream to the scrollback by line of 16 bits
-    printDemodBuff();
+  PrintAndLog("NRZ demoded bitstream:");
+  // Now output the bitstream to the scrollback by line of 16 bits
+  printDemodBuff();
   }
   return 1; 
 }
@@ -1803,7 +1832,7 @@ int CmdNRZrawDemod(const char *Cmd)
 // prints binary found and saves in demodbuffer for further commands
 int CmdPSK1rawDemod(const char *Cmd)
 {
-  int errCnt;
+  int ans;
   char cmdp = param_getchar(Cmd, 0);
   if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
     PrintAndLog("Usage:  data rawdemod p1 [clock] <0|1> [maxError]");
@@ -1818,15 +1847,12 @@ int CmdPSK1rawDemod(const char *Cmd)
     PrintAndLog("          : data rawdemod p1 64 1 0 = demod a psk1 tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
     return 0;
   }
-  errCnt = PSKDemod(Cmd, TRUE);
+  ans = PSKDemod(Cmd, TRUE);
   //output
-  if (errCnt<0){
-    if (g_debugMode) PrintAndLog("Error demoding: %d",errCnt); 
+  if ( !ans){
+    if (g_debugMode) PrintAndLog("Error demoding: %d",ans); 
     return 0;
   }
-  if (errCnt>0){
-    PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
-  }
   PrintAndLog("PSK demoded bitstream:");
   // Now output the bitstream to the scrollback by line of 16 bits
   printDemodBuff();
@@ -1837,7 +1863,7 @@ int CmdPSK1rawDemod(const char *Cmd)
 // takes same args as cmdpsk1rawdemod
 int CmdPSK2rawDemod(const char *Cmd)
 {
-  int errCnt=0;
+  int ans=0;
   char cmdp = param_getchar(Cmd, 0);
   if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
     PrintAndLog("Usage:  data rawdemod p2 [clock] <0|1> [maxError]");
@@ -1852,24 +1878,15 @@ int CmdPSK2rawDemod(const char *Cmd)
     PrintAndLog("          : data rawdemod p2 64 1 0  = demod a psk2 tag from GraphBuffer using a clock of RF/64, inverting output and allowing 0 demod errors");
     return 0;
   }
-  errCnt=PSKDemod(Cmd, TRUE);
-  if (errCnt<0){
-    if (g_debugMode) PrintAndLog("Error demoding: %d",errCnt);  
+  ans=PSKDemod(Cmd, TRUE);
+  if (!ans){
+    if (g_debugMode) PrintAndLog("Error demoding: %d",ans);  
     return 0;
   } 
   psk1TOpsk2(DemodBuffer, DemodBufferLen);
-  if (errCnt>0){
-    if (g_debugMode){
-      PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
-      PrintAndLog("PSK2 demoded bitstream:");
-      // Now output the bitstream to the scrollback by line of 16 bits
-      printDemodBuff();
-    }
-  }else{
-    PrintAndLog("PSK2 demoded bitstream:");
-    // Now output the bitstream to the scrollback by line of 16 bits
-    printDemodBuff();  
-  }
+  PrintAndLog("PSK2 demoded bitstream:");
+  // Now output the bitstream to the scrollback by line of 16 bits
+  printDemodBuff();  
   return 1;
 }
 
@@ -2595,7 +2612,7 @@ static command_t CommandTable[] =
   //{"nrzrawdemod",   CmdNRZrawDemod,     1, "[clock] [invert<0|1>] [maxErr] -- Attempt to demodulate nrz tags and output binary (args optional)"},
   {"plot",          CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
   //{"pskdetectclock",CmdDetectPSKClockRate, 1, "Detect ASK, PSK, or NRZ clock rate"},
-  {"printdemodbuffer",CmdPrintDemodBuff,1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
+  {"printdemodbuffer",CmdPrintDemodBuff,1, "[x] -- print the data in the DemodBuffer - 'x' for hex output"},
   {"pskindalademod",CmdIndalaDecode,    1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
   //{"psk1rawdemod",  CmdPSK1rawDemod,    1, "[clock] [invert<0|1>] [maxErr] -- Attempt to demodulate psk1 tags and output binary (args optional)"},
   //{"psk2rawdemod",  CmdPSK2rawDemod,    1, "[clock] [invert<0|1>] [maxErr] -- Attempt to demodulate psk2 tags and output binary (args optional)"},
Impressum, Datenschutz