hf tune: group commands

This commit is contained in:
Philippe Teuwen 2019-05-14 08:25:26 +02:00
commit c281f71f59
4 changed files with 41 additions and 31 deletions

View file

@ -1229,23 +1229,30 @@ static void PacketReceived(PacketCommandNG *packet) {
MeasureAntennaTuning(); MeasureAntennaTuning();
break; break;
case CMD_MEASURE_ANTENNA_TUNING_HF_START: case CMD_MEASURE_ANTENNA_TUNING_HF:
// Let the FPGA drive the high-frequency antenna around 13.56 MHz. if (packet->length != 1)
FpgaDownloadAndGo(FPGA_BITSTREAM_HF); reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_EINVARG, NULL, 0);
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); switch (packet->data.asBytes[0]) {
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF_START, PM3_SUCCESS, NULL, 0); case 1: // MEASURE_ANTENNA_TUNING_HF_START
break; // Let the FPGA drive the high-frequency antenna around 13.56 MHz.
FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
case CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE: FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
if (button_status == BUTTON_SINGLE_CLICK) reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_SUCCESS, NULL, 0);
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE, PM3_EOPABORTED, NULL, 0); break;
uint16_t volt = MeasureAntennaTuningHfData(); case 2:
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE, PM3_SUCCESS, (uint8_t *)&volt, sizeof(volt)); if (button_status == BUTTON_SINGLE_CLICK)
break; reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_EOPABORTED, NULL, 0);
uint16_t volt = MeasureAntennaTuningHfData();
case CMD_MEASURE_ANTENNA_TUNING_HF_STOP: reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_SUCCESS, (uint8_t *)&volt, sizeof(volt));
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); break;
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF_STOP, PM3_SUCCESS, NULL, 0); case 3:
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_SUCCESS, NULL, 0);
break;
default:
reply_ng(CMD_MEASURE_ANTENNA_TUNING_HF, PM3_EINVARG, NULL, 0);
break;
}
break; break;
case CMD_LISTEN_READER_FIELD: case CMD_LISTEN_READER_FIELD:

View file

@ -100,27 +100,32 @@ int CmdHFTune(const char *Cmd) {
PacketResponseNG resp; PacketResponseNG resp;
PrintAndLogEx(SUCCESS, "Measuring HF antenna, click button to exit"); PrintAndLogEx(SUCCESS, "Measuring HF antenna, click button to exit");
clearCommandBuffer(); clearCommandBuffer();
SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF_START, NULL, 0); uint8_t mode[] = {1};
if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF_START, &resp, 1000)) { SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF, mode, sizeof(mode));
PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF measure, aborting"); if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF, &resp, 1000)) {
PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF initialization, aborting");
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }
for (uint8_t i=0; iter == 0 || i< iter; i++) { // loop forever (till button pressed) if iter = 0 (default) mode[0] = 2;
SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE, NULL, 0); // loop forever (till button pressed) if iter = 0 (default)
if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE, &resp, 1000)) { for (uint8_t i=0; iter == 0 || i< iter; i++) {
SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF, mode, sizeof(mode));
if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF, &resp, 1000)) {
PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF measure, aborting"); PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF measure, aborting");
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }
if (resp.status == PM3_EOPABORTED) if ((resp.status == PM3_EOPABORTED) || (resp.length != sizeof(uint16_t)))
break; break;
uint16_t volt = resp.data.asDwords[0]; uint16_t volt = resp.data.asDwords[0];
PrintAndLogEx(INPLACE, "%u mV / %5u V", volt, (uint16_t)(volt / 1000)); PrintAndLogEx(INPLACE, "%u mV / %5u V", volt, (uint16_t)(volt / 1000));
} }
SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF_STOP, NULL, 0); mode[0] = 3;
if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF_STOP, &resp, 1000)) { SendCommandNG(CMD_MEASURE_ANTENNA_TUNING_HF, mode, sizeof(mode));
PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF measure, aborting"); if (!WaitForResponseTimeout(CMD_MEASURE_ANTENNA_TUNING_HF, &resp, 1000)) {
PrintAndLogEx(WARNING, "Timeout while waiting for Proxmark HF shutdown, aborting");
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }
PrintAndLogEx(NORMAL, "");
PrintAndLogEx(SUCCESS, "Done."); PrintAndLogEx(SUCCESS, "Done.");
return PM3_SUCCESS; return PM3_SUCCESS;
} }

View file

@ -102,7 +102,7 @@ void PrintAndLogEx(logLevel_t level, const char *fmt, ...) {
return; return;
} }
if (level == INPLACE) { if (level == INPLACE) {
printf("%s\r", buffer); printf("\r%s", buffer);
fflush(stdout); fflush(stdout);
return; return;
} }

View file

@ -335,9 +335,7 @@ typedef struct {
// For measurements of the antenna tuning // For measurements of the antenna tuning
#define CMD_MEASURE_ANTENNA_TUNING 0x0400 #define CMD_MEASURE_ANTENNA_TUNING 0x0400
#define CMD_MEASURE_ANTENNA_TUNING_HF_START 0x0401 #define CMD_MEASURE_ANTENNA_TUNING_HF 0x0401
#define CMD_MEASURE_ANTENNA_TUNING_HF_SAMPLE 0x0402
#define CMD_MEASURE_ANTENNA_TUNING_HF_STOP 0x0403
#define CMD_MEASURED_ANTENNA_TUNING 0x0410 #define CMD_MEASURED_ANTENNA_TUNING 0x0410
#define CMD_LISTEN_READER_FIELD 0x0420 #define CMD_LISTEN_READER_FIELD 0x0420