mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-13 02:34:48 +08:00
add 'detectreader' command - listen for external reader fields
This commit is contained in:
parent
955aa93faa
commit
7f3480429b
4 changed files with 106 additions and 0 deletions
|
@ -7,6 +7,7 @@
|
|||
|
||||
|
||||
#include <proxmark3.h>
|
||||
#include <stdlib.h>
|
||||
#include "apps.h"
|
||||
#ifdef WITH_LCD
|
||||
#include "fonts.h"
|
||||
|
@ -727,6 +728,10 @@ void UsbPacketReceived(BYTE *packet, int len)
|
|||
MeasureAntennaTuning();
|
||||
break;
|
||||
|
||||
case CMD_LISTEN_READER_FIELD:
|
||||
ListenReaderField(c->ext1);
|
||||
break;
|
||||
|
||||
case CMD_HID_DEMOD_FSK:
|
||||
CmdHIDdemodFSK(); // Demodulate HID tag
|
||||
break;
|
||||
|
@ -904,3 +909,85 @@ void SpinDelay(int ms)
|
|||
WDT_HIT();
|
||||
}
|
||||
}
|
||||
|
||||
// listen for external reader
|
||||
void ListenReaderField(int limit)
|
||||
{
|
||||
int lf_av, lf_av_new, lf_baseline= -1, lf_count= 0;
|
||||
int hf_av, hf_av_new, hf_baseline= -1, hf_count= 0;
|
||||
|
||||
#define LF_ONLY 1
|
||||
#define HF_ONLY 2
|
||||
|
||||
LED_A_OFF();
|
||||
LED_B_OFF();
|
||||
LED_C_OFF();
|
||||
LED_D_OFF();
|
||||
|
||||
lf_av= ReadAdc(ADC_CHAN_LF);
|
||||
|
||||
if(limit != HF_ONLY && lf_baseline == -1)
|
||||
{
|
||||
DbpString("LF 125/134 Baseline:");
|
||||
DbpIntegers(lf_av,0,0);
|
||||
lf_baseline= lf_av;
|
||||
}
|
||||
|
||||
hf_av= ReadAdc(ADC_CHAN_HF);
|
||||
|
||||
|
||||
if (limit != LF_ONLY && hf_baseline == -1)
|
||||
{
|
||||
DbpString("HF 13.56 Baseline:");
|
||||
DbpIntegers(hf_av,0,0);
|
||||
hf_baseline= hf_av;
|
||||
}
|
||||
|
||||
for(;;)
|
||||
{
|
||||
if(BUTTON_PRESS())
|
||||
{
|
||||
LED_B_OFF();
|
||||
LED_D_OFF();
|
||||
return;
|
||||
}
|
||||
WDT_HIT();
|
||||
|
||||
|
||||
if (limit != HF_ONLY)
|
||||
{
|
||||
if (abs(lf_av - lf_baseline) > 10)
|
||||
LED_D_ON();
|
||||
else
|
||||
LED_D_OFF();
|
||||
++lf_count;
|
||||
lf_av_new= ReadAdc(ADC_CHAN_LF);
|
||||
// see if there's a significant change
|
||||
if(abs(lf_av - lf_av_new) > 10)
|
||||
{
|
||||
DbpString("LF 125/134 Field Change:");
|
||||
DbpIntegers(lf_av,lf_av_new,lf_count);
|
||||
lf_av= lf_av_new;
|
||||
lf_count= 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (limit != LF_ONLY)
|
||||
{
|
||||
if (abs(hf_av - hf_baseline) > 10)
|
||||
LED_B_ON();
|
||||
else
|
||||
LED_B_OFF();
|
||||
++hf_count;
|
||||
hf_av_new= ReadAdc(ADC_CHAN_HF);
|
||||
// see if there's a significant change
|
||||
if(abs(hf_av - hf_av_new) > 10)
|
||||
{
|
||||
DbpString("HF 13.56 Field Change:");
|
||||
DbpIntegers(hf_av,hf_av_new,hf_count);
|
||||
hf_av= hf_av_new;
|
||||
hf_count= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ void SpinDelay(int ms);
|
|||
void SpinDelayUs(int us);
|
||||
void ToSendStuffBit(int b);
|
||||
void ToSendReset(void);
|
||||
void ListenReaderField(int limit);
|
||||
void AcquireRawAdcSamples125k(BOOL at134khz);
|
||||
void DoAcquisition125k(BOOL at134khz);
|
||||
extern int ToSendMax;
|
||||
|
|
|
@ -69,6 +69,7 @@ typedef struct {
|
|||
// For measurements of the antenna tuning
|
||||
#define CMD_MEASURE_ANTENNA_TUNING 0x0400
|
||||
#define CMD_MEASURED_ANTENNA_TUNING 0x0401
|
||||
#define CMD_LISTEN_READER_FIELD 0x0402
|
||||
|
||||
// For direct FPGA control
|
||||
#define CMD_FPGA_MAJOR_MODE_OFF 0x0500 // ## FPGA Control
|
||||
|
|
|
@ -677,6 +677,22 @@ static void CmdLoread(char *str)
|
|||
SendCommand(&c, FALSE);
|
||||
}
|
||||
|
||||
static void CmdDetectReader(char *str)
|
||||
{
|
||||
UsbCommand c;
|
||||
// 'l' means LF - 125/134 kHz
|
||||
if(*str == 'l') {
|
||||
c.ext1 = 1;
|
||||
} else if (*str == 'h') {
|
||||
c.ext1 = 2;
|
||||
} else if (*str != '\0') {
|
||||
PrintToScrollback("use 'detectreader' or 'detectreader l' or 'detectreader h'");
|
||||
return;
|
||||
}
|
||||
c.cmd = CMD_LISTEN_READER_FIELD;
|
||||
SendCommand(&c, FALSE);
|
||||
}
|
||||
|
||||
/* send a command before reading */
|
||||
static void CmdLoCommandRead(char *str)
|
||||
{
|
||||
|
@ -2573,6 +2589,7 @@ static struct {
|
|||
"buffclear", CmdBuffClear,0, " Clear sample buffer and graph window",
|
||||
"dec", CmdDec,1, " Decimate samples",
|
||||
"detectclock", Cmddetectclockrate,1, " Detect clock rate",
|
||||
"detectreader", CmdDetectReader,0, "['l'|'h'] -- Detect external reader field (option 'l' or 'h' to limit to LF or HF)",
|
||||
"em410xsim", CmdEM410xsim,1, "<UID> -- Simulate EM410x tag",
|
||||
"em410xread", CmdEM410xread,1, "[clock rate] -- Extract ID from EM410x tag",
|
||||
"em410xwatch", CmdEM410xwatch,0, " Watches for EM410x tags",
|
||||
|
|
Loading…
Reference in a new issue