next update from en4rab on data samples

This commit is contained in:
roel@libnfc.org 2013-04-26 20:33:05 +00:00
parent 0beed8fc67
commit 90d74dc206

View file

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