From b828a4e16818697605d57f2600cbb815c5ce5e7e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 31 Jan 2017 16:11:57 +0100 Subject: [PATCH] CHG: 'lf snoop' - now automatically downloads samples after finished. (annoying step to do over and over) FIX: 'lf snoop' - now turns of LF antenna after snoop. FIX: 'lf cotag read' - now waits until the ACK cmd arrives before downloading samples. --- armsrc/lfops.c | 35 +++++++++++++++++++++-------------- armsrc/lfsampling.c | 12 +++++++++--- client/cmdlf.c | 12 ++++++------ client/cmdlfcotag.c | 10 +++++++--- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 28927c33..0dc5bcf9 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -78,6 +78,8 @@ void ModThenAcquireRawAdcSamples125k(uint32_t delay_off, uint32_t periods, uint3 // now do the read DoAcquisition_config(false); + + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); } /* blank r/w tag data stream @@ -1740,12 +1742,12 @@ void EM4xWriteWord(uint32_t Data, uint8_t Address, uint32_t Pwd, uint8_t PwdMode void Cotag() { +//#define WAIT2200 { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); WaitUS(2035); } #define WAIT2200 { FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); WaitUS(2200); } - LED_A_ON(); //clear buffer now so it does not interfere with timing later - BigBuf_Clear_keep_EM(); + BigBuf_Clear_ext(false); // Set up FPGA, 132kHz to power up the tag FpgaDownloadAndGo(FPGA_BITSTREAM_LF); @@ -1755,28 +1757,33 @@ void Cotag() { // Connect the A/D to the peak-detected low-frequency path. SetAdcMuxFor(GPIO_MUXSEL_LOPKD); - // 50ms for the resonant antenna to settle. - SpinDelay(50); - // Now set up the SSC to get the ADC samples that are now streaming at us. FpgaSetupSsc(); + // start a 1.5ticks is 1us StartTicks(); //send start pulse - TurnReadLFOn(800); - WAIT2200 - TurnReadLFOn(3600); - WAIT2200 - TurnReadLFOn(800); - WAIT2200 + TurnReadLFOn(800); WAIT2200 + TurnReadLFOn(3600); WAIT2200 + TurnReadLFOn(800); WAIT2200 TurnReadLFOn(3600); - // Turn field on to read the response - TurnReadLFOn(READ_GAP); +/* + TurnReadLFOn(740); WAIT2200 + TurnReadLFOn(3330); WAIT2200 + TurnReadLFOn(740); WAIT2200 + TurnReadLFOn(3330); + + +burst 800 us, gap 2.2 msecs +burst 3.6 msecs gap 2.2 msecs +burst 800 us gap 2.2 msecs +pulse 3.6 msecs +*/ // Acquisition - doT55x7Acquisition(20000); + DoAcquisition_default(-1, true); // Turn the field off FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 02c0cd4a..d726ba20 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -110,7 +110,7 @@ void LFSetupFPGAForADC(int divisor, bool lf_field) { * @param silent - is true, now outputs are made. If false, dbprints the status * @return the number of bits occupied by the samples. */ -uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold,bool silent) { +uint32_t DoAcquisition(uint8_t decimation, uint32_t bits_per_sample, bool averaging, int trigger_threshold, bool silent) { //bigbuf, to hold the aquired raw data signal uint8_t *dest = BigBuf_get_addr(); uint16_t bufsize = BigBuf_max_traceLen(); @@ -224,14 +224,20 @@ uint32_t ReadLF(bool activeField, bool silent) { * @return number of bits sampled **/ uint32_t SampleLF(bool printCfg) { - return ReadLF(true, printCfg); + BigBuf_Clear_ext(false); + uint32_t ret = ReadLF(true, printCfg); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + return ret; } /** * Initializes the FPGA for snoop-mode (field off), and acquires the samples. * @return number of bits sampled **/ uint32_t SnoopLF() { - return ReadLF(false, true); + BigBuf_Clear_ext(false); + uint32_t ret = ReadLF(false, true); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + return ret; } /** diff --git a/client/cmdlf.c b/client/cmdlf.c index 2daa46ab..eb2f7cde 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -36,11 +36,10 @@ int usage_lf_read(void){ return 0; } int usage_lf_snoop(void) { - PrintAndLog("Usage: lf snoop"); + PrintAndLog("Snoop low frequence signal. Use 'lf config' to set parameters."); + PrintAndLog("Usage: lf snoop [h]"); PrintAndLog("Options:"); - PrintAndLog(" h This help"); - PrintAndLog("This function takes no arguments. "); - PrintAndLog("Use 'lf config' to set parameters."); + PrintAndLog(" h This help"); return 0; } int usage_lf_config(void) { @@ -568,10 +567,11 @@ int CmdLFSnoop(const char *Cmd) { uint8_t cmdp = param_getchar(Cmd, 0); if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop(); - UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES}; + UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES,{0,0,0}}; clearCommandBuffer(); SendCommand(&c); WaitForResponse(CMD_ACK,NULL); + getSamples("", false); return 0; } @@ -1221,7 +1221,7 @@ static command_t CommandTable[] = {"simfsk", CmdLFfskSim, 0, "[c ] [i] [H ] [L ] [d ] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"}, {"simpsk", CmdLFpskSim, 0, "[1|2|3] [c ] [i] [r ] [d ] \n\t\t-- Simulate LF PSK tag from demodbuffer or input"}, {"simbidir", CmdLFSimBidir, 0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, - {"snoop", CmdLFSnoop, 0, "['l'|'h'|] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"}, + {"snoop", CmdLFSnoop, 0, "Snoop LF"}, {"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"}, {NULL, NULL, 0, NULL} }; diff --git a/client/cmdlfcotag.c b/client/cmdlfcotag.c index e200e834..11be2db8 100644 --- a/client/cmdlfcotag.c +++ b/client/cmdlfcotag.c @@ -18,9 +18,13 @@ int CmdCOTAGRead(const char *Cmd) { UsbCommand c = {CMD_COTAG, {0, 0, 0}}; clearCommandBuffer(); SendCommand(&c); - - getSamples("20000", TRUE); - return CmdFSKdemodAWID(Cmd); + if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2500) ) { + //PrintAndLog("command execution time out"); + return 1; + } + getSamples("", true); + //return CmdFSKdemodAWID(Cmd); + return 0; } static command_t CommandTable[] = { -- 2.39.2