From 90d74dc206d876ed38632f3e9b3771dbe0c929fc Mon Sep 17 00:00:00 2001 From: "roel@libnfc.org" Date: Fri, 26 Apr 2013 20:33:05 +0000 Subject: [PATCH] next update from en4rab on data samples --- client/cmddata.c | 98 +++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/client/cmddata.c b/client/cmddata.c index 99be1e52..a333fe39 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -12,7 +12,6 @@ #include #include #include -//#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, + > 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, " -- overlay grid on graph window, use zero value to turn off either"}, - {"hexsamples", CmdHexsamples, 0, " [] -- Dump big buffer as hex bytes"}, + {"hexsamples", CmdHexsamples, 0, " [] -- Dump big buffer as hex bytes"}, {"hide", CmdHide, 1, "Hide graph window"}, {"hpf", CmdHpf, 1, "Remove DC offset from trace"}, {"load", CmdLoad, 1, " -- 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, " -- Save trace (from graph window)"}, {"scale", CmdScale, 1, " -- Set cursor display scale"}, {"threshold", CmdThreshold, 1, " -- Maximize/minimize every value in the graph window depending on threshold"}, -- 2.39.2