X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/595b623bf4d58609d7362e463e1f8e7984031635..05446d5bc3d9263efc6a12026f6cf84bb421735e:/common/lfdemod.c diff --git a/common/lfdemod.c b/common/lfdemod.c index a14f2613..7ab8a388 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -1079,10 +1079,9 @@ void psk1TOpsk2(uint8_t *BitStream, size_t size) size_t i=1; uint8_t lastBit=BitStream[0]; for (; i= dest[i+2]){ - if (waveStart == 0) { - waveStart = i+1; - avgWaveVal=dest[i+1]; - //PrintAndLog("DEBUG: waveStart: %d",waveStart); - } else { waveEnd = i+1; //PrintAndLog("DEBUG: waveEnd: %d",waveEnd); waveLenCnt = waveEnd-waveStart; - lastAvgWaveVal = avgWaveVal/waveLenCnt; - if (waveLenCnt > fc){ + if (waveLenCnt > fc && waveStart > fc){ //not first peak and is a large wave + lastAvgWaveVal = avgWaveVal/(waveLenCnt); firstFullWave = waveStart; fullWaveLen=waveLenCnt; //if average wave value is > graph 0 then it is an up wave or a 1 - if (lastAvgWaveVal > 128) curPhase^=1; + if (lastAvgWaveVal > 123) curPhase^=1; //fudge graph 0 a little 123 vs 128 break; } - waveStart=0; - avgWaveVal=0; + waveStart = i+1; + avgWaveVal = 0; } + avgWaveVal+=dest[i+2]; } - avgWaveVal+=dest[i+1]; - } //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen); lastClkBit = firstFullWave; //set start of wave as clock align + //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit); waveStart = 0; errCnt=0; size_t numBits=0; - //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit); //set skipped bits - memset(dest+numBits, curPhase^1,firstFullWave / *clock); + memset(dest+numBits,curPhase^1,firstFullWave / *clock); numBits += (firstFullWave / *clock); + dest[numBits++] = curPhase; //set first read bit for (i = firstFullWave+fullWaveLen-1; i < *size-3; i++){ //top edge of wave = start of new wave if (dest[i]+fc < dest[i+1] && dest[i+1] >= dest[i+2]){ @@ -1652,20 +1646,17 @@ int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert) //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, i: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+*clock-tol,i+1,fc); if (i+1 >= lastClkBit + *clock - tol){ //should be a clock bit curPhase^=1; - dest[numBits] = curPhase; - numBits++; + dest[numBits++] = curPhase; lastClkBit += *clock; - } else if (i lastClkBit + *clock + tol + fc){ lastClkBit += *clock; //no phase shift but clock bit - dest[numBits] = curPhase; - numBits++; + dest[numBits++] = curPhase; } avgWaveVal=0; waveStart=i+1;