]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
Merge pull request #1 from Proxmark/master
[proxmark3-svn] / client / cmddata.c
index 674a1bb5e05e4be5a490b56bed91b0b7383d4717..9025e8f1b319ca670f07ed63af2bcabf92338fa5 100644 (file)
@@ -132,7 +132,7 @@ void printBitStream(uint8_t BitStream[], uint32_t bitLen){
     return;
   }
   if (bitLen>512) bitLen=512;
-   for (i = 0; i < (bitLen-16); i+=16) {
+   for (i = 0; i <= (bitLen-16); i+=16) {
     PrintAndLog("%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i",
       BitStream[i],
       BitStream[i+1],
@@ -272,6 +272,10 @@ int Cmdmandecoderaw(const char *Cmd)
   }
   bitnum=i;
   errCnt=manrawdemod(BitStream,&bitnum);
+  if (errCnt>=20){
+    PrintAndLog("Too many errors: %d",errCnt);
+    return 0;
+  }
   PrintAndLog("Manchester Decoded - # errors:%d - data:",errCnt);
   printBitStream(BitStream,bitnum);
   if (errCnt==0){
@@ -442,10 +446,10 @@ int CmdBitstream(const char *Cmd)
       bit ^= 1;
 
     AppendGraph(0, clock, bit);
-//    for (j = 0; j < (int)(clock/2); j++)
-//      GraphBuffer[(i * clock) + j] = bit ^ 1;
-//    for (j = (int)(clock/2); j < clock; j++)
-//      GraphBuffer[(i * clock) + j] = bit;
+  //    for (j = 0; j < (int)(clock/2); j++)
+  //      GraphBuffer[(i * clock) + j] = bit ^ 1;
+  //    for (j = (int)(clock/2); j < clock; j++)
+  //      GraphBuffer[(i * clock) + j] = bit;
   }
 
   RepaintGraphWindow();
@@ -477,18 +481,7 @@ int CmdDetectClockRate(const char *Cmd)
   PrintAndLog("Auto-detected clock rate: %d", clock);
   return 0;
 }
-/*
-uint32_t bytebits_to_byte(uint8_t *src, int numbits)
-{
-  uint32_t num = 0;
-  for(int i = 0 ; i < numbits ; i++)
-  {
-    num = (num << 1) | (*src);
-    src++;
-  }
-  return num;
-}
-*/
+
 //by marshmellow
 //fsk raw demod and print binary
 //takes 2 arguments - Clock and invert
@@ -526,7 +519,7 @@ int CmdFSKrawdemod(const char *Cmd)
   RepaintGraphWindow();
   
   // Now output the bitstream to the scrollback by line of 16 bits
-  if(size > (7*32)+2) size = (7*32)+2; //only output a max of 7 blocks of 32 bits  most tags will have full bit stream inside that sample size
+  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
   printBitStream(BitStream,size);
   return 0;
 }
@@ -867,24 +860,56 @@ int CmdSamples(const char *Cmd)
 
 int CmdTuneSamples(const char *Cmd)
 {
-  int cnt = 0;
-  int n = 255;
-  uint8_t got[255];
-
-  PrintAndLog("Reading %d samples\n", n);
-  GetFromBigBuf(got,n,7256); // armsrc/apps.h: #define FREE_BUFFER_OFFSET 7256
-  WaitForResponse(CMD_ACK,NULL);
-  for (int j = 0; j < n; j++) {
-    GraphBuffer[cnt++] = ((int)got[j]) - 128;
-  }
+       int timeout = 0;
+       printf("\nMeasuring antenna characteristics, please wait...");
+
+       UsbCommand c = {CMD_MEASURE_ANTENNA_TUNING};
+       SendCommand(&c);
+
+       UsbCommand resp;
+       while(!WaitForResponseTimeout(CMD_MEASURED_ANTENNA_TUNING,&resp,1000)) {
+               timeout++;
+               printf(".");
+               if (timeout > 7) {
+                       PrintAndLog("\nNo response from Proxmark. Aborting...");
+                       return 1;
+               }
+       }
+
+       int peakv, peakf;
+       int vLf125, vLf134, vHf;
+       vLf125 = resp.arg[0] & 0xffff;
+       vLf134 = resp.arg[0] >> 16;
+       vHf = resp.arg[1] & 0xffff;;
+       peakf = resp.arg[2] & 0xffff;
+       peakv = resp.arg[2] >> 16;
+       PrintAndLog("");
+       PrintAndLog("# LF antenna: %5.2f V @   125.00 kHz", vLf125/1000.0);
+       PrintAndLog("# LF antenna: %5.2f V @   134.00 kHz", vLf134/1000.0);
+       PrintAndLog("# LF optimal: %5.2f V @%9.2f kHz", peakv/1000.0, 12000.0/(peakf+1));
+       PrintAndLog("# HF antenna: %5.2f V @    13.56 MHz", vHf/1000.0);
+       if (peakv<2000)
+               PrintAndLog("# Your LF antenna is unusable.");
+       else if (peakv<10000)
+               PrintAndLog("# Your LF antenna is marginal.");
+       if (vHf<2000)
+               PrintAndLog("# Your HF antenna is unusable.");
+       else if (vHf<5000)
+               PrintAndLog("# Your HF antenna is marginal.");
+
+       for (int i = 0; i < 256; i++) {
+               GraphBuffer[i] = resp.d.asBytes[i] - 128;
+       }
   
-  PrintAndLog("Done! Divisor 89 is 134khz, 95 is 125khz.\n");
-  PrintAndLog("\n");
-  GraphTraceLen = n;
-  RepaintGraphWindow();
-  return 0;
+       PrintAndLog("Done! Divisor 89 is 134khz, 95 is 125khz.\n");
+       PrintAndLog("\n");
+       GraphTraceLen = 256;
+       ShowGraphWindow();
+
+       return 0;
 }
 
+
 int CmdLoad(const char *Cmd)
 {
   FILE *f = fopen(Cmd, "r");
Impressum, Datenschutz