X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/ebfb4447b867205750692ca9bb54bcb6d9dc41e6..9fe4507c03c26715b532b4ceb1f46e8198ecd4c9:/common/lfdemod.c diff --git a/common/lfdemod.c b/common/lfdemod.c index 6beef130..072bd120 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -751,8 +751,8 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock, size_t *firstPhaseShi uint16_t fcs = countFC(dest, size, 0); *fc = fcs & 0xFF; if (g_debugMode==2) prnt("DEBUG PSK: FC: %d, FC2: %d",*fc, fcs>>8); - if ((fcs>>8) == 10 && *fc == 8) return -1; - if (*fc!=2 && *fc!=4 && *fc!=8) return -1; + if ((fcs>>8) == 10 && *fc == 8) return 0; + if (*fc!=2 && *fc!=4 && *fc!=8) return 0; //if we already have a valid clock quit size_t i=1; @@ -833,15 +833,9 @@ int DetectPSKClock(uint8_t dest[], size_t size, int clock, size_t *firstPhaseShi return clk[best]; } -//int DetectPSKClock(uint8_t dest[], size_t size, int clock) { -// size_t firstPhaseShift = 0; -// uint8_t curPhase = 0; -// return DetectPSKClock_ext(dest, size, clock, &firstPhaseShift, &curPhase); -//} - //by marshmellow //detects the bit clock for FSK given the high and low Field Clocks -uint8_t detectFSKClk_ext(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fcLow, int *firstClockEdge) { +uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fcLow, int *firstClockEdge) { uint8_t clk[] = {8,16,32,40,50,64,100,128,0}; uint16_t rfLens[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint8_t rfCnts[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -947,11 +941,6 @@ uint8_t detectFSKClk_ext(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_ return clk[ii]; } -uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fcLow) { - int firstClockEdge = 0; - return detectFSKClk_ext(BitStream, size, fcHigh, fcLow, &firstClockEdge); -} - //********************************************************************************************** //--------------------Modulation Demods &/or Decoding Section----------------------------------- //********************************************************************************************** @@ -977,7 +966,7 @@ bool findST(int *stStopLoc, int *stStartIdx, int lowToLowWaveLen[], int highToLo } //by marshmellow //attempt to identify a Sequence Terminator in ASK modulated raw wave -bool DetectST_ext(uint8_t buffer[], size_t *size, int *foundclock, size_t *ststart, size_t *stend) { +bool DetectST(uint8_t buffer[], size_t *size, int *foundclock, size_t *ststart, size_t *stend) { size_t bufsize = *size; //need to loop through all samples and identify our clock, look for the ST pattern int clk = 0; @@ -1098,10 +1087,6 @@ bool DetectST_ext(uint8_t buffer[], size_t *size, int *foundclock, size_t *ststa *size = newloc; return true; } -bool DetectST(uint8_t buffer[], size_t *size, int *foundclock) { - size_t ststart = 0, stend = 0; - return DetectST_ext(buffer, size, foundclock, &ststart, &stend); -} //by marshmellow //take 11 10 01 11 00 and make 01100 ... miller decoding @@ -1145,10 +1130,10 @@ int millerRawDecode(uint8_t *BitStream, size_t *size, int invert) { //take 01 or 10 = 1 and 11 or 00 = 0 //check for phase errors - should never have 111 or 000 should be 01001011 or 10110100 for 1010 //decodes biphase or if inverted it is AKA conditional dephase encoding AKA differential manchester encoding -int BiphaseRawDecode(uint8_t *BitStream, size_t *size, int offset, int invert) { +int BiphaseRawDecode(uint8_t *BitStream, size_t *size, int *offset, int invert) { uint16_t bitnum = 0; uint16_t errCnt = 0; - size_t i = offset; + size_t i = *offset; uint16_t MaxBits=512; //if not enough samples - error if (*size < 51) return -1; @@ -1158,8 +1143,8 @@ int BiphaseRawDecode(uint8_t *BitStream, size_t *size, int offset, int invert) { if (BitStream[i+1]==BitStream[i+2]) offsetA=0; if (BitStream[i+2]==BitStream[i+3]) offsetB=0; } - if (!offsetA && offsetB) offset++; - for (i=offset; i<*size-3; i+=2){ + if (!offsetA && offsetB) *offset+=1; + for (i=*offset; i<*size-3; i+=2){ //check for phase error if (BitStream[i+1]==BitStream[i+2]) { BitStream[bitnum++]=7; @@ -1505,6 +1490,7 @@ size_t aggregate_bits(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, //by marshmellow (from holiman's base) // full fsk demod from GraphBuffer wave to decoded 1s and 0s (no mandemod) int fskdemod_ext(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow, int *startIdx) { + if (justNoise(dest, *size)) return 0; // FSK demodulator size = fsk_wave_demod(dest, size, fchigh, fclow, startIdx); size = aggregate_bits(dest, size, rfLen, invert, fchigh, fclow, startIdx); @@ -1561,7 +1547,7 @@ int pskRawDemod_ext(uint8_t dest[], size_t *size, int *clock, int *invert, int * uint16_t errCnt=0, errCnt2=0; *clock = DetectPSKClock(dest, *size, *clock, &firstFullWave, &curPhase, &fc); - if (*clock == 0) return -1; + if (*clock <= 0) return -1; //if clock detect found firstfullwave... uint16_t tol = fc/2; if (firstFullWave == 0) { @@ -1646,8 +1632,6 @@ int AWIDdemodFSK(uint8_t *dest, size_t *size) { //make sure buffer has enough data if (*size < 96*50) return -1; - if (justNoise(dest, *size)) return -2; - // FSK demodulator *size = fskdemod(dest, *size, 50, 1, 10, 8); // fsk2a RF/50 if (*size < 96) return -3; //did we get a good demod? @@ -1732,8 +1716,6 @@ int gProxII_Demod(uint8_t BitStream[], size_t *size) { // loop to get raw HID waveform then FSK demodulate the TAG ID from it int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo) { - if (justNoise(dest, *size)) return -1; - size_t numStart=0, size2=*size, startIdx=0; // FSK demodulator *size = fskdemod(dest, size2,50,1,10,8); //fsk2a @@ -1762,7 +1744,6 @@ int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32 } int IOdemodFSK(uint8_t *dest, size_t size) { - if (justNoise(dest, size)) return -1; //make sure buffer has data if (size < 66*64) return -2; // FSK demodulator @@ -1812,8 +1793,6 @@ int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert) { // loop to get raw paradox waveform then FSK demodulate the TAG ID from it int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo) { - if (justNoise(dest, *size)) return -1; - size_t numStart=0, size2=*size, startIdx=0; // FSK demodulator *size = fskdemod(dest, size2,50,1,10,8); //fsk2a @@ -1860,9 +1839,6 @@ int PyramiddemodFSK(uint8_t *dest, size_t *size) { //make sure buffer has data if (*size < 128*50) return -5; - //test samples are not just noise - if (justNoise(dest, *size)) return -1; - // FSK demodulator *size = fskdemod(dest, *size, 50, 1, 10, 8); // fsk2a RF/50 if (*size < 128) return -2; //did we get a good demod?