unify/refactor hw tune and data tune

- unified hw tune and Enio's great data tune
- don't use BigBuf (and hardcoded Offset)
- removed special handling of CMD_MEASURED_ANTENNA_TUNING
  in UsbCommandReceived()
This commit is contained in:
pwpiwi 2014-12-17 17:38:13 +01:00
commit 2bdd68c370
4 changed files with 83 additions and 61 deletions

View file

@ -196,15 +196,11 @@ int AvgAdc(int ch) // was static - merlok
void MeasureAntennaTuning(void) void MeasureAntennaTuning(void)
{ {
uint8_t *dest = (uint8_t *)BigBuf+FREE_BUFFER_OFFSET; uint8_t LF_Results[256];
int i, adcval = 0, peak = 0, peakv = 0, peakf = 0; //ptr = 0 int i, adcval = 0, peak = 0, peakv = 0, peakf = 0; //ptr = 0
int vLf125 = 0, vLf134 = 0, vHf = 0; // in mV int vLf125 = 0, vLf134 = 0, vHf = 0; // in mV
// UsbCommand c; LED_B_ON();
LED_B_ON();
DbpString("Measuring antenna characteristics, please wait...");
memset(dest,0,FREE_BUFFER_SIZE);
/* /*
* Sweeps the useful LF range of the proxmark from * Sweeps the useful LF range of the proxmark from
@ -217,7 +213,7 @@ void MeasureAntennaTuning(void)
FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD); FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
for (i=255; i>19; i--) { for (i=255; i>=19; i--) {
WDT_HIT(); WDT_HIT();
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i);
SpinDelay(20); SpinDelay(20);
@ -227,16 +223,18 @@ void MeasureAntennaTuning(void)
if (i==95) vLf125 = adcval; // voltage at 125Khz if (i==95) vLf125 = adcval; // voltage at 125Khz
if (i==89) vLf134 = adcval; // voltage at 134Khz if (i==89) vLf134 = adcval; // voltage at 134Khz
dest[i] = adcval>>8; // scale int to fit in byte for graphing purposes LF_Results[i] = adcval>>8; // scale int to fit in byte for graphing purposes
if(dest[i] > peak) { if(LF_Results[i] > peak) {
peakv = adcval; peakv = adcval;
peak = dest[i]; peak = LF_Results[i];
peakf = i; peakf = i;
//ptr = i; //ptr = i;
} }
} }
LED_A_ON(); for (i=18; i >= 0; i--) LF_Results[i] = 0;
LED_A_ON();
// Let the FPGA drive the high-frequency antenna around 13.56 MHz. // Let the FPGA drive the high-frequency antenna around 13.56 MHz.
FpgaDownloadAndGo(FPGA_BITSTREAM_HF); FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
@ -245,18 +243,11 @@ void MeasureAntennaTuning(void)
// can measure voltages up to 33000 mV // can measure voltages up to 33000 mV
vHf = (33000 * AvgAdc(ADC_CHAN_HF)) >> 10; vHf = (33000 * AvgAdc(ADC_CHAN_HF)) >> 10;
// c.cmd = CMD_MEASURED_ANTENNA_TUNING; cmd_send(CMD_MEASURED_ANTENNA_TUNING,vLf125|(vLf134<<16),vHf,peakf|(peakv<<16),LF_Results,256);
// c.arg[0] = (vLf125 << 0) | (vLf134 << 16);
// c.arg[1] = vHf;
// c.arg[2] = peakf | (peakv << 16);
DbpString("Measuring complete, sending report back to host");
cmd_send(CMD_MEASURED_ANTENNA_TUNING,vLf125|(vLf134<<16),vHf,peakf|(peakv<<16),0,0);
// UsbSendPacket((uint8_t *)&c, sizeof(c));
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
LED_A_OFF(); LED_A_OFF();
LED_B_OFF(); LED_B_OFF();
return; return;
} }
void MeasureAntennaTuningHf(void) void MeasureAntennaTuningHf(void)

View file

@ -481,24 +481,56 @@ int CmdSamples(const char *Cmd)
int CmdTuneSamples(const char *Cmd) int CmdTuneSamples(const char *Cmd)
{ {
int cnt = 0; int timeout = 0;
int n = 255; printf("\nMeasuring antenna characteristics, please wait...");
uint8_t got[255];
PrintAndLog("Reading %d samples\n", n); UsbCommand c = {CMD_MEASURE_ANTENNA_TUNING};
GetFromBigBuf(got,n,7256); // armsrc/apps.h: #define FREE_BUFFER_OFFSET 7256 SendCommand(&c);
WaitForResponse(CMD_ACK,NULL);
for (int j = 0; j < n; j++) { UsbCommand resp;
GraphBuffer[cnt++] = ((int)got[j]) - 128; 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("Done! Divisor 89 is 134khz, 95 is 125khz.\n");
PrintAndLog("\n"); PrintAndLog("\n");
GraphTraceLen = n; GraphTraceLen = 256;
RepaintGraphWindow(); ShowGraphWindow();
return 0;
return 0;
} }
int CmdLoad(const char *Cmd) int CmdLoad(const char *Cmd)
{ {
FILE *f = fopen(Cmd, "r"); FILE *f = fopen(Cmd, "r");

View file

@ -18,6 +18,7 @@
#include "cmdparser.h" #include "cmdparser.h"
#include "cmdhw.h" #include "cmdhw.h"
#include "cmdmain.h" #include "cmdmain.h"
#include "cmddata.h"
/* low-level hardware control */ /* low-level hardware control */
@ -391,9 +392,7 @@ int CmdSetMux(const char *Cmd)
int CmdTune(const char *Cmd) int CmdTune(const char *Cmd)
{ {
UsbCommand c = {CMD_MEASURE_ANTENNA_TUNING}; return CmdTuneSamples(Cmd);
SendCommand(&c);
return 0;
} }
int CmdVersion(const char *Cmd) int CmdVersion(const char *Cmd)

View file

@ -206,28 +206,28 @@ void UsbCommandReceived(UsbCommand *UC)
return; return;
} break; } break;
case CMD_MEASURED_ANTENNA_TUNING: { // case CMD_MEASURED_ANTENNA_TUNING: {
int peakv, peakf; // int peakv, peakf;
int vLf125, vLf134, vHf; // int vLf125, vLf134, vHf;
vLf125 = UC->arg[0] & 0xffff; // vLf125 = UC->arg[0] & 0xffff;
vLf134 = UC->arg[0] >> 16; // vLf134 = UC->arg[0] >> 16;
vHf = UC->arg[1] & 0xffff;; // vHf = UC->arg[1] & 0xffff;;
peakf = UC->arg[2] & 0xffff; // peakf = UC->arg[2] & 0xffff;
peakv = UC->arg[2] >> 16; // peakv = UC->arg[2] >> 16;
PrintAndLog(""); // PrintAndLog("");
PrintAndLog("# LF antenna: %5.2f V @ 125.00 kHz", vLf125/1000.0); // 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 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("# 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); // PrintAndLog("# HF antenna: %5.2f V @ 13.56 MHz", vHf/1000.0);
if (peakv<2000) // if (peakv<2000)
PrintAndLog("# Your LF antenna is unusable."); // PrintAndLog("# Your LF antenna is unusable.");
else if (peakv<10000) // else if (peakv<10000)
PrintAndLog("# Your LF antenna is marginal."); // PrintAndLog("# Your LF antenna is marginal.");
if (vHf<2000) // if (vHf<2000)
PrintAndLog("# Your HF antenna is unusable."); // PrintAndLog("# Your HF antenna is unusable.");
else if (vHf<5000) // else if (vHf<5000)
PrintAndLog("# Your HF antenna is marginal."); // PrintAndLog("# Your HF antenna is marginal.");
} break; // } break;
case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K: { case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K: {
// printf("received samples: "); // printf("received samples: ");