add 'detectreader' command - listen for external reader fields

This commit is contained in:
adam@algroup.co.uk 2009-07-07 17:19:42 +00:00
parent 955aa93faa
commit 7f3480429b
4 changed files with 106 additions and 0 deletions

View file

@ -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;
}
}
}
}

View file

@ -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;

View file

@ -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

View file

@ -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",