]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
next update from en4rab on data samples
authorroel@libnfc.org <roel@libnfc.org@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 26 Apr 2013 20:33:05 +0000 (20:33 +0000)
committerroel@libnfc.org <roel@libnfc.org@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Fri, 26 Apr 2013 20:33:05 +0000 (20:33 +0000)
client/cmddata.c

index 99be1e5213fad99962c1299fe852e09cbbb2239f..a333fe39b88468d7191aaa4f982e8567a86077a2 100644 (file)
@@ -12,7 +12,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
-//#include "proxusb.h"
 #include "proxmark3.h"
 #include "data.h"
 #include "ui.h"
@@ -154,22 +153,19 @@ int CmdAutoCorr(const char *Cmd)
 int CmdBitsamples(const char *Cmd)
 {
   int cnt = 0;
-  int n = 3072;
-
-  for (int i = 0; i < n; i += 12) {
-    UsbCommand c = {CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K, {i, 0, 0}};
-    SendCommand(&c);
-    WaitForResponse(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K, NULL);
+  uint8_t got[12288];
+  
+  GetFromBigBuf(got,sizeof(got),0);
+  WaitForResponse(CMD_ACK,NULL);
 
-    for (int j = 0; j < 48; j++) {
+    for (int j = 0; j < sizeof(got); j++) {
       for (int k = 0; k < 8; k++) {
-        if(sample_buf[j] & (1 << (7 - k))) {
+        if(got[j] & (1 << (7 - k))) {
           GraphBuffer[cnt++] = 1;
         } else {
           GraphBuffer[cnt++] = 0;
         }
       }
-    }
   }
   GraphTraceLen = cnt;
   RepaintGraphWindow();
@@ -401,41 +397,40 @@ int CmdHexsamples(const char *Cmd)
   int requested = 0;
   int offset = 0;
   sscanf(Cmd, "%i %i", &requested, &offset);
-  if (offset % 4 != 0) {
-    PrintAndLog("Offset must be a multiple of 4");
-    return 0;
-  }
-  offset = offset/4;                
 
   int delivered = 0;
-
-  if (requested == 0) {
-    n = 12;
-    requested = 12;
+  uint8_t got[40000];
+
+  /* round up to nearest 8 bytes so the printed data is all valid */
+  if (requested < 8) {
+    requested = 8;
+  }
+  if (requested % 8 != 0) {
+    int remainder = requested % 8;
+    requested = requested + 8 - remainder;
+  }  
+  if (offset + requested > sizeof(got)) {
+    PrintAndLog("Tried to read past end of buffer, <bytes> + <offset> > 40000");
+       return 0;
   } else {
-    n = requested/4;
-  }
-
-  for (int i = offset; i < n+offset; i += 12) {
-    UsbCommand c = {CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K, {i, 0, 0}};
-    SendCommand(&c);
-    WaitForResponse(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K, NULL);
-    for (int j = 0; j < 48; j += 8) {
-      PrintAndLog("%02x %02x %02x %02x %02x %02x %02x %02x",
-        sample_buf[j+0],
-        sample_buf[j+1],
-        sample_buf[j+2],
-        sample_buf[j+3],
-        sample_buf[j+4],
-        sample_buf[j+5],
-        sample_buf[j+6],
-        sample_buf[j+7],
-        sample_buf[j+8]
-      );
-      delivered += 8;
-      if (delivered >= requested)
-        break;
-    }
+    n = requested;
+  }
+
+  GetFromBigBuf(got,n,offset);
+  WaitForResponse(CMD_ACK,NULL);
+
+  for (int j = 0; j < n; j += 8) {
+    PrintAndLog("%02x %02x %02x %02x %02x %02x %02x %02x",
+      sample_buf[j+0],
+      sample_buf[j+1],
+      sample_buf[j+2],
+      sample_buf[j+3],
+      sample_buf[j+4],
+      sample_buf[j+5],
+      sample_buf[j+6],
+      sample_buf[j+7]
+    );
+    delivered += 8;
     if (delivered >= requested)
       break;
   }
@@ -463,26 +458,25 @@ int CmdHpf(const char *Cmd)
   return 0;
 }
 
-#define MAX_SAMPLE_COUNT 10000
 int CmdSamples(const char *Cmd)
 {
   int cnt = 0;
   int n;
-  
+  uint8_t got[40000];
+
   n = strtol(Cmd, NULL, 0);
-  if (n == 0) n = 128;
-  if (n > MAX_SAMPLE_COUNT) n = MAX_SAMPLE_COUNT;
+  if (n == 0) n = 512;
+  if (n > sizeof(got)) n = sizeof(got);
   
   PrintAndLog("Reading %d samples\n", n);
-  uint8_t got[MAX_SAMPLE_COUNT * 4];
-  GetFromBigBuf(got,sizeof(got),0);
+  GetFromBigBuf(got,n,0);
   WaitForResponse(CMD_ACK,NULL);
-  for (int j = 0; j < n*4; j++) {
+  for (int j = 0; j < n; j++) {
     GraphBuffer[cnt++] = ((int)got[j]) - 128;
   }
   
   PrintAndLog("Done!\n");
-  GraphTraceLen = n*4;
+  GraphTraceLen = n;
   RepaintGraphWindow();
   return 0;
 }
@@ -869,7 +863,7 @@ static command_t CommandTable[] =
   {"detectclock",   CmdDetectClockRate, 1, "Detect clock rate"},
   {"fskdemod",      CmdFSKdemod,        1, "Demodulate graph window as a HID FSK"},
   {"grid",          CmdGrid,            1, "<x> <y> -- overlay grid on graph window, use zero value to turn off either"},
-  {"hexsamples",    CmdHexsamples,      0, "<blocks> [<offset>] -- Dump big buffer as hex bytes"},  
+  {"hexsamples",    CmdHexsamples,      0, "<bytes> [<offset>] -- Dump big buffer as hex bytes"},  
   {"hide",          CmdHide,            1, "Hide graph window"},
   {"hpf",           CmdHpf,             1, "Remove DC offset from trace"},
   {"load",          CmdLoad,            1, "<filename> -- Load trace (to graph window"},
@@ -878,7 +872,7 @@ static command_t CommandTable[] =
   {"manmod",        CmdManchesterMod,   1, "[clock rate] -- Manchester modulate a binary stream"},
   {"norm",          CmdNorm,            1, "Normalize max/min to +/-500"},
   {"plot",          CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
-  {"samples",       CmdSamples,         0, "[128 - 16000] -- Get raw samples for graph window"},
+  {"samples",       CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window"},
   {"save",          CmdSave,            1, "<filename> -- Save trace (from graph window)"},
   {"scale",         CmdScale,           1, "<int> -- Set cursor display scale"},
   {"threshold",     CmdThreshold,       1, "<threshold> -- Maximize/minimize every value in the graph window depending on threshold"},
Impressum, Datenschutz