mirror of
https://github.com/Proxmark/proxmark3.git
synced 2024-09-21 15:26:35 +08:00
add 'detectreader' command - listen for external reader fields
This commit is contained in:
parent
955aa93faa
commit
7f3480429b
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include <proxmark3.h>
|
#include <proxmark3.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#ifdef WITH_LCD
|
#ifdef WITH_LCD
|
||||||
#include "fonts.h"
|
#include "fonts.h"
|
||||||
|
@ -727,6 +728,10 @@ void UsbPacketReceived(BYTE *packet, int len)
|
||||||
MeasureAntennaTuning();
|
MeasureAntennaTuning();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CMD_LISTEN_READER_FIELD:
|
||||||
|
ListenReaderField(c->ext1);
|
||||||
|
break;
|
||||||
|
|
||||||
case CMD_HID_DEMOD_FSK:
|
case CMD_HID_DEMOD_FSK:
|
||||||
CmdHIDdemodFSK(); // Demodulate HID tag
|
CmdHIDdemodFSK(); // Demodulate HID tag
|
||||||
break;
|
break;
|
||||||
|
@ -904,3 +909,85 @@ void SpinDelay(int ms)
|
||||||
WDT_HIT();
|
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 SpinDelayUs(int us);
|
||||||
void ToSendStuffBit(int b);
|
void ToSendStuffBit(int b);
|
||||||
void ToSendReset(void);
|
void ToSendReset(void);
|
||||||
|
void ListenReaderField(int limit);
|
||||||
void AcquireRawAdcSamples125k(BOOL at134khz);
|
void AcquireRawAdcSamples125k(BOOL at134khz);
|
||||||
void DoAcquisition125k(BOOL at134khz);
|
void DoAcquisition125k(BOOL at134khz);
|
||||||
extern int ToSendMax;
|
extern int ToSendMax;
|
||||||
|
|
|
@ -69,6 +69,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_MEASURED_ANTENNA_TUNING 0x0401
|
#define CMD_MEASURED_ANTENNA_TUNING 0x0401
|
||||||
|
#define CMD_LISTEN_READER_FIELD 0x0402
|
||||||
|
|
||||||
// For direct FPGA control
|
// For direct FPGA control
|
||||||
#define CMD_FPGA_MAJOR_MODE_OFF 0x0500 // ## FPGA Control
|
#define CMD_FPGA_MAJOR_MODE_OFF 0x0500 // ## FPGA Control
|
||||||
|
|
|
@ -677,6 +677,22 @@ static void CmdLoread(char *str)
|
||||||
SendCommand(&c, FALSE);
|
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 */
|
/* send a command before reading */
|
||||||
static void CmdLoCommandRead(char *str)
|
static void CmdLoCommandRead(char *str)
|
||||||
{
|
{
|
||||||
|
@ -2573,6 +2589,7 @@ static struct {
|
||||||
"buffclear", CmdBuffClear,0, " Clear sample buffer and graph window",
|
"buffclear", CmdBuffClear,0, " Clear sample buffer and graph window",
|
||||||
"dec", CmdDec,1, " Decimate samples",
|
"dec", CmdDec,1, " Decimate samples",
|
||||||
"detectclock", Cmddetectclockrate,1, " Detect clock rate",
|
"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",
|
"em410xsim", CmdEM410xsim,1, "<UID> -- Simulate EM410x tag",
|
||||||
"em410xread", CmdEM410xread,1, "[clock rate] -- Extract ID from EM410x tag",
|
"em410xread", CmdEM410xread,1, "[clock rate] -- Extract ID from EM410x tag",
|
||||||
"em410xwatch", CmdEM410xwatch,0, " Watches for EM410x tags",
|
"em410xwatch", CmdEM410xwatch,0, " Watches for EM410x tags",
|
||||||
|
|
Loading…
Reference in a new issue