From 7f3480429ba8a8fecc9768aceb11c74db7f186ae Mon Sep 17 00:00:00 2001 From: "adam@algroup.co.uk" Date: Tue, 7 Jul 2009 17:19:42 +0000 Subject: [PATCH] add 'detectreader' command - listen for external reader fields --- armsrc/appmain.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++ armsrc/apps.h | 1 + include/usb_cmd.h | 1 + winsrc/command.cpp | 17 +++++++++ 4 files changed, 106 insertions(+) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index fcb910c9..27a7551d 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -7,6 +7,7 @@ #include +#include #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; + } + } + } +} diff --git a/armsrc/apps.h b/armsrc/apps.h index 01567b56..f2be7904 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -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; diff --git a/include/usb_cmd.h b/include/usb_cmd.h index 9dc4d3e2..961cc36c 100644 --- a/include/usb_cmd.h +++ b/include/usb_cmd.h @@ -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 diff --git a/winsrc/command.cpp b/winsrc/command.cpp index 913631ef..c8fe40ea 100644 --- a/winsrc/command.cpp +++ b/winsrc/command.cpp @@ -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, " -- Simulate EM410x tag", "em410xread", CmdEM410xread,1, "[clock rate] -- Extract ID from EM410x tag", "em410xwatch", CmdEM410xwatch,0, " Watches for EM410x tags", -- 2.39.2