From: marshmellow42 Date: Wed, 25 Mar 2015 00:26:14 +0000 (-0400) Subject: EM410x bug fix X-Git-Tag: v2.1.0~26^2~2 X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/90677ad99bb27055b1e06429b8731db628d3b8ae?hp=9680b11d9e4b526102bb32571bab7c95ae804ab8 EM410x bug fix --- diff --git a/client/cmddata.c b/client/cmddata.c index 7854fa51..2b82c367 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -400,8 +400,8 @@ int CmdAskEM410xDemod(const char *Cmd) PrintAndLog(" : data askem410xdemod 64 1 0 = demod an EM410x Tag ID from GraphBuffer using a clock of RF/64 and inverting data and allowing 0 demod errors"); return 0; } - uint32_t hi; - uint64_t lo; + uint32_t hi = 0; + uint64_t lo = 0; if (AskEm410xDemod(Cmd, &hi, &lo)) { PrintAndLog("EM410x pattern found: "); printEM410x(hi, lo); diff --git a/common/lfdemod.c b/common/lfdemod.c index c7acb404..92ad633e 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -88,37 +88,34 @@ uint8_t Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx, uint32_ return 0; } // 111111111 bit pattern represent start of frame - uint8_t preamble[] = {1,1,1,1,1,1,1,1,1}; + // include 0 in front to help get start pos + uint8_t preamble[] = {0,1,1,1,1,1,1,1,1,1}; uint32_t idx = 0; uint32_t parityBits = 0; uint8_t errChk = 0; uint8_t FmtLen = 10; *startIdx = 0; - for (uint8_t extraBitChk=0; extraBitChk<5; extraBitChk++){ - errChk = preambleSearch(BitStream+extraBitChk+*startIdx, preamble, sizeof(preamble), size, startIdx); - if (errChk == 0) return 0; - if (*size>64) FmtLen = 22; - if (*size<64) return 0; - idx = *startIdx + 9; - for (i=0; i> 63); - *lo = (*lo << 1) | (BitStream[(i*5)+ii+idx]); - } + errChk = preambleSearch(BitStream, preamble, sizeof(preamble), size, startIdx); + if (errChk == 0 || *size < 64) return 0; + if (*size > 64) FmtLen = 22; + *startIdx += 1; //get rid of 0 from preamble + idx = *startIdx + 9; + for (i=0; i> 63); + *lo = (*lo << 1) | (BitStream[(i*5)+ii+idx]); } - if (errChk != 0) return 1; - //skip last 5 bit parity test for simplicity. - // *size = 64 | 128; } + if (errChk != 0) return 1; + //skip last 5 bit parity test for simplicity. + // *size = 64 | 128; return 0; }