X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/e3f9c50d81680809c6cdb821dee419a666ecd2c3..8ae9b358f85bdfc60e269c0e93c8fa911869706a:/client/cmddata.c diff --git a/client/cmddata.c b/client/cmddata.c index 30cb501c..18edd33e 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -76,7 +76,7 @@ void printDemodBuff(void) } if (bitLen>512) bitLen=512; //max output to 512 bits if we have more - should be plenty - char *bin = sprint_bin_break(DemodBuffer,bitLen,16); + char *bin = sprint_bin_break(DemodBuffer, bitLen,16); PrintAndLog("%s",bin); return; @@ -527,7 +527,11 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose) sscanf(Cmd, "%i %i %i %i", &offset, &clk, &invert, &maxErr); uint8_t BitStream[MAX_DEMOD_BUF_LEN]; - size_t size = getFromGraphBuf(BitStream); + size_t size = getFromGraphBuf(BitStream); + if (size == 0 ) { + if (g_debugMode) PrintAndLog("DEBUG: no data in graphbuf"); + return 0; + } //invert here inverts the ask raw demoded bits which has no effect on the demod, but we need the pointer int errCnt = askdemod(BitStream, &size, &clk, &invert, maxErr, 0, 0); if ( errCnt < 0 || errCnt > maxErr ) { @@ -660,7 +664,7 @@ int CmdVikingDemod(const char *Cmd) //call lfdemod.c demod for Viking int ans = VikingDemod_AM(DemodBuffer, &size); if (ans < 0) { - if (g_debugMode) PrintAndLog("Error Viking_Demod %d", ans); + if (g_debugMode) PrintAndLog("Error Viking_Demod %d %s", ans, (ans == -5)?"[chksum error]":""); return 0; } //got a good demod @@ -877,13 +881,16 @@ int CmdGraphShiftZero(const char *Cmd) int CmdAskEdgeDetect(const char *Cmd) { int thresLen = 25; + int last = 0; sscanf(Cmd, "%i", &thresLen); - for(int i = 1; i=thresLen) //large jump up - GraphBuffer[i-1] = 127; - else if(GraphBuffer[i]-GraphBuffer[i-1]<=-1*thresLen) //large jump down - GraphBuffer[i-1] = -127; + for(int i = 1; i < GraphTraceLen; ++i){ + if (GraphBuffer[i] - GraphBuffer[i-1] >= thresLen) //large jump up + last = 127; + else if(GraphBuffer[i] - GraphBuffer[i-1] <= -1 * thresLen) //large jump down + last = -127; + + GraphBuffer[i-1] = last; } RepaintGraphWindow(); return 0; @@ -1314,37 +1321,51 @@ int CmdFSKdemodAWID(const char *Cmd) // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000 // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // |26 bit| |-117--| |-----142------| + // + // 00110010 0 0000111110100000 00000000000100010010100010000111 1 000000000 + // bbbbbbbb w ffffffffffffffff cccccccccccccccccccccccccccccccc w xxxxxxxxx + // |50 bit| |----4000------| |-----------2248975------------| // b = format bit len, o = odd parity of last 3 bits // f = facility code, c = card number // w = wiegand parity - // (26 bit format shown) uint32_t fc = 0; uint32_t cardnum = 0; uint32_t code1 = 0; uint32_t code2 = 0; - uint8_t fmtLen = bytebits_to_byte(BitStream,8); - if (fmtLen==26){ - fc = bytebits_to_byte(BitStream+9, 8); - cardnum = bytebits_to_byte(BitStream+17, 16); - code1 = bytebits_to_byte(BitStream+8,fmtLen); - PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo); - } else { - cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16); - if (fmtLen>32){ - code1 = bytebits_to_byte(BitStream+8,fmtLen-32); - code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32); - PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo); - } else{ - code1 = bytebits_to_byte(BitStream+8,fmtLen); - PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo); - } + uint8_t fmtLen = bytebits_to_byte(BitStream, 8); + switch(fmtLen) { + case 26: + fc = bytebits_to_byte(BitStream + 9, 8); + cardnum = bytebits_to_byte(BitStream + 17, 16); + code1 = bytebits_to_byte(BitStream + 8,fmtLen); + PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %u - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo); + break; + case 50: + fc = bytebits_to_byte(BitStream + 9, 16); + cardnum = bytebits_to_byte(BitStream + 25, 32); + code1 = bytebits_to_byte(BitStream + 8, (fmtLen-32) ); + code2 = bytebits_to_byte(BitStream + 8 + (fmtLen-32), 32); + PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %u - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, code2, rawHi2, rawHi, rawLo); + break; + default: + if (fmtLen > 32 ) { + cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16); + code1 = bytebits_to_byte(BitStream+8,fmtLen-32); + code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32); + PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%u) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo); + } else { + cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16); + code1 = bytebits_to_byte(BitStream+8,fmtLen); + PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%u) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo); + } + break; } + if (g_debugMode){ PrintAndLog("DEBUG: idx: %d, Len: %d Printing Demod Buffer:", idx, 96); printDemodBuff(); } - //todo - convert hi2, hi, lo to demodbuffer for future sim/clone commands return 1; } @@ -2362,6 +2383,12 @@ int Cmdhex2bin(const char *Cmd) return 0; } +int CmdDataIIR(const char *Cmd){ + iceIIR_Butterworth(GraphBuffer, GraphTraceLen); + RepaintGraphWindow(); + return 0; +} + static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, @@ -2408,6 +2435,7 @@ static command_t CommandTable[] = {"tune", CmdTuneSamples, 0, "Get hw tune samples for graph window"}, {"undec", CmdUndec, 1, "Un-decimate samples by 2"}, {"zerocrossings", CmdZerocrossings, 1, "Count time between zero-crossings"}, + {"iir", CmdDataIIR, 0, "apply IIR buttersworth filter on plotdata"}, {NULL, NULL, 0, NULL} };