X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/58e93ff593ee67e1c41fa790110dc60f09b91cc4..ca65d3af861fefa3395825cb39ba2ac144d2ff3b:/client/cmdlf.c?ds=sidebyside diff --git a/client/cmdlf.c b/client/cmdlf.c index 79d6787b..988bda36 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -489,7 +489,12 @@ int CmdLFRead(const char *Cmd) //And ship it to device UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K}; SendCommand(&c); - WaitForResponse(CMD_ACK,NULL); + //WaitForResponse(CMD_ACK,NULL); + if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) { + PrintAndLog("command execution time out"); + return 1; + } + return 0; } @@ -570,12 +575,13 @@ int usage_lf_simfsk(void) int usage_lf_simask(void) { //print help - PrintAndLog("Usage: lf simask [c ] [i] [m|r] [s] [d ]"); + PrintAndLog("Usage: lf simask [c ] [i] [b|m|r] [s] [d ]"); PrintAndLog("Options: "); PrintAndLog(" h This help"); PrintAndLog(" c Manually set clock - can autodetect if using DemodBuffer"); PrintAndLog(" i invert data"); - PrintAndLog(" m sim ask/manchester"); + PrintAndLog(" b sim ask/biphase"); + PrintAndLog(" m sim ask/manchester - Default"); PrintAndLog(" r sim ask/raw"); PrintAndLog(" s TBD- -to enable a gap between playback repetitions - default: no gap"); PrintAndLog(" d Data to sim as hex - omit to sim from DemodBuffer"); @@ -703,7 +709,7 @@ int CmdLFaskSim(const char *Cmd) { //autodetect clock from Graphbuffer if using demod buffer //will need clock, invert, manchester/raw as m or r, separator as s, and bitstream - uint8_t manchester = 1, separator = 0; + uint8_t encoding = 1, separator = 0; //char cmdp = Cmd[0], par3='m', par4=0; uint8_t clk=0, invert=0; bool errors = FALSE; @@ -725,12 +731,16 @@ int CmdLFaskSim(const char *Cmd) errors |= param_getdec(Cmd,cmdp+1,&clk); cmdp+=2; break; + case 'b': + encoding=2; //biphase + cmdp++; + break; case 'm': - manchester=1; + encoding=1; cmdp++; break; case 'r': - manchester=0; + encoding=0; cmdp++; break; case 's': @@ -771,10 +781,10 @@ int CmdLFaskSim(const char *Cmd) setDemodBuf(data, dataLen, 0); } if (clk == 0) clk = 64; - if (manchester == 0) clk = clk/2; //askraw needs to double the clock speed + if (encoding == 0) clk = clk/2; //askraw needs to double the clock speed uint16_t arg1, arg2; size_t size=DemodBufferLen; - arg1 = clk << 8 | manchester; + arg1 = clk << 8 | encoding; arg2 = invert << 8 | separator; if (size > USB_CMD_DATA_SIZE) { PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE); @@ -1080,24 +1090,30 @@ int CmdLFfind(const char *Cmd) if (testRaw=='u' || testRaw=='U'){ //test unknown tag formats (raw mode) PrintAndLog("\nChecking for Unknown tags:\n"); - ans=CmdDetectClockRate("f"); + ans=AutoCorrelate(4000, FALSE, FALSE); + if (ans > 0) PrintAndLog("Possible Auto Correlation of %d repeating samples",ans); + ans=GetFskClock("",FALSE,FALSE); //CmdDetectClockRate("F"); // if (ans != 0){ //fsk - ans=CmdFSKrawdemod(""); + ans=FSKrawDemod("",FALSE); if (ans>0) { PrintAndLog("\nUnknown FSK Modulated Tag Found!"); + printDemodBuff(); return 1; } } - ans=Cmdaskmandemod(""); + ans=ASKmanDemod("",FALSE,FALSE); if (ans>0) { PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!"); + PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'"); + printDemodBuff(); return 1; } ans=CmdPSK1rawDemod(""); if (ans>0) { - PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data psk2rawdemod'"); + PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'"); PrintAndLog("\nCould also be PSK3 - [currently not supported]"); PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod"); + printDemodBuff(); return 1; } PrintAndLog("\nNo Data Found!\n"); @@ -1108,12 +1124,18 @@ int CmdLFfind(const char *Cmd) static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, - {"cmdread", CmdLFCommandRead, 0, " <'0' period> <'1' period> ['h'] -- Modulate LF reader field to send command before read (all periods in microseconds) (option 'h' for 134)"}, {"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"}, + {"hid", CmdLFHID, 1, "{ HID RFIDs... }"}, + {"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"}, + {"io", CmdLFIO, 1, "{ IOPROX RFIDs... }"}, + {"pcf7931", CmdLFPCF7931, 1, "{ PCF7931 RFIDs... }"}, + {"ti", CmdLFTI, 1, "{ TI RFIDs... }"}, + {"t55xx", CmdLFT55XX, 1, "{ T55X7 RFIDs... }"}, + {"config", CmdLFSetConfig, 0, "Set config for LF sampling, bit/sample, decimation, frequency"}, + + {"cmdread", CmdLFCommandRead, 0, " <'0' period> <'1' period> ['h'] -- Modulate LF reader field to send command before read (all periods in microseconds) (option 'h' for 134)"}, {"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"}, - {"hid", CmdLFHID, 1, "{ HID RFIDs... }"}, - {"io", CmdLFIO, 1, "{ ioProx tags... }"}, {"indalademod", CmdIndalaDemod, 1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"}, {"indalaclone", CmdIndalaClone, 0, " ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"}, {"read", CmdLFRead, 0, "Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"}, @@ -1125,11 +1147,7 @@ static command_t CommandTable[] = {"simbidir", CmdLFSimBidir, 0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, //{"simman", CmdLFSimManchester, 0, " [GAP] Simulate arbitrary Manchester LF tag"}, {"snoop", CmdLFSnoop, 0, "['l'|'h'|] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"}, - {"ti", CmdLFTI, 1, "{ TI RFIDs... }"}, - {"hitag", CmdLFHitag, 1, "{ Hitag tags and transponders... }"}, {"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"}, - {"t55xx", CmdLFT55XX, 1, "{ T55xx RFIDs... }"}, - {"pcf7931", CmdLFPCF7931, 1, "{PCF7931 RFIDs...}"}, {NULL, NULL, 0, NULL} };