FIX: 'lf snoop' - now turns of LF antenna after snoop.
FIX: 'lf cotag read' - now waits until the ACK cmd arrives before downloading samples.
// now do the read
DoAcquisition_config(false);
+
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
}
/* blank r/w tag data stream
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);
// 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
* @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();
* @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;
}
/**
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) {
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;
}
{"simfsk", CmdLFfskSim, 0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
{"simpsk", CmdLFpskSim, 0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \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'|<divisor>] [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}
};
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[] = {