#include <stdlib.h>
#include <string.h>
#include <limits.h>
-#include "proxusb.h"
+#include "proxmark3.h"
#include "data.h"
#include "ui.h"
#include "graph.h"
int CmdBitsamples(const char *Cmd)
{
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) {
- UsbCommand c = {CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K, {i, 0, 0}};
- SendCommand(&c);
- WaitForResponse(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K);
-
- 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();
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);
- 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;
}
{
int cnt = 0;
int n;
+ uint8_t got[40000];
n = strtol(Cmd, NULL, 0);
- if (n == 0) n = 128;
- if (n > 16000) n = 16000;
-
+ if (n == 0) n = 512;
+ if (n > sizeof(got)) n = sizeof(got);
+
PrintAndLog("Reading %d samples\n", n);
- 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);
- for (int j = 0; j < 48; j++) {
- GraphBuffer[cnt++] = ((int)sample_buf[j]) - 128;
- }
+ GetFromBigBuf(got,n,0);
+ WaitForResponse(CMD_ACK,NULL);
+ for (int j = 0; j < n; j++) {
+ GraphBuffer[cnt++] = ((int)got[j]) - 128;
}
+
PrintAndLog("Done!\n");
- GraphTraceLen = n*4;
+ GraphTraceLen = n;
RepaintGraphWindow();
return 0;
}
{"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"},
{"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"},