X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/959baa89f737bdf91ea0ec56957ab5aabbf39ff8..38b65694d61805baa4f0f0d55949d183462b18a7:/armsrc/appmain.c diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 01e3efc9..e7b868bd 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -7,6 +7,7 @@ #include +#include #include "apps.h" #ifdef WITH_LCD #include "fonts.h" @@ -240,7 +241,9 @@ static int AvgAdc(int ch) void SweepLFrange() { BYTE *dest = (BYTE *)BigBuf; - int i; + BYTE dummy[12]; + int i, peak= 0, ptr= 0; + double freq; // clear buffer memset(BigBuf,0,sizeof(BigBuf)); @@ -249,8 +252,29 @@ void SweepLFrange() for (i=255; i>19; i--) { FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i); SpinDelay(20); - dest[i] = (137500 * AvgAdc(4)) >> 18; + dest[i] = (137500 * AvgAdc(ADC_CHAN_LF)) >> 18; + if(dest[i] > peak) { + peak= dest[i]; + ptr= i; + } } + dummy[11]= '\0'; + dummy[10]= 'z'; + dummy[9]= 'H'; + dummy[8]= 'k'; + dummy[7]= ' '; + freq= 12000000/(ptr + 1); + for(i= 6; i > 3 ; --i) { + dummy[i]= '0' + ((int) freq) % 10; + freq /= 10; + } + dummy[3]= '.'; + for(i= 2; i >= 0 ; --i) { + dummy[i]= '0' + ((int) freq) % 10; + freq /= 10; + } + DbpString("Antenna resonates at:"); + DbpString(dummy); } void MeasureAntennaTuning(void) @@ -267,7 +291,7 @@ void MeasureAntennaTuning(void) FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_125_KHZ); SpinDelay(20); - vLf125 = AvgAdc(4); + vLf125 = AvgAdc(ADC_CHAN_LF); // Vref = 3.3V, and a 10000:240 voltage divider on the input // can measure voltages up to 137500 mV vLf125 = (137500 * vLf125) >> 10; @@ -276,7 +300,7 @@ void MeasureAntennaTuning(void) FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_READER_USE_134_KHZ); SpinDelay(20); - vLf134 = AvgAdc(4); + vLf134 = AvgAdc(ADC_CHAN_LF); // Vref = 3.3V, and a 10000:240 voltage divider on the input // can measure voltages up to 137500 mV vLf134 = (137500 * vLf134) >> 10; @@ -284,7 +308,7 @@ void MeasureAntennaTuning(void) // Let the FPGA drive the high-frequency antenna around 13.56 MHz. FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); SpinDelay(20); - vHf = AvgAdc(5); + vHf = AvgAdc(ADC_CHAN_HF); // Vref = 3300mV, and an 10:1 voltage divider on the input // can measure voltages up to 33000 mV vHf = (33000 * vHf) >> 10; @@ -727,6 +751,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 +932,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; + } + } + } +}