mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-19 04:49:38 -07:00
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:
parent
471c514167
commit
2bdd68c370
4 changed files with 83 additions and 61 deletions
|
@ -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)
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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: ");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue