X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/56bbb25a4114df189f66dc8c14d233187e40b042..b1013281d38ef0184fc29ae421ab98e7c8a6b3bf:/common/lfdemod.c diff --git a/common/lfdemod.c b/common/lfdemod.c index 3bc246a3..7e31f53d 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -259,13 +259,15 @@ int cleanAskRawDemod(uint8_t *BinStream, size_t *size, int clk, int invert, int //by marshmellow void askAmp(uint8_t *BitStream, size_t size) { - for(size_t i = 1; i=30) //large jump up - BitStream[i]=255; - else if(BitStream[i]-BitStream[i-1]<=-20) //large jump down - BitStream[i]=0; + uint8_t last = 128; + for(size_t i = 1; i < size; ++i){ + if (BitStream[i]-BitStream[i-1] >= 30) //large jump up + last = 255; + else if(BitStream[i-1] - BitStream[i] >= 20) //large jump down + last = 0; + + BitStream[i] = last; } - return; } //by marshmellow @@ -721,6 +723,39 @@ int FDXBdemodBI(uint8_t *dest, size_t *size) return (int)startIdx; } +// ASK/Diphase fc/64 (inverted Biphase) +// Note: this i s not a demod, this is only a detection +// the parameter *dest needs to be demoded before call +int JablotronDemod(uint8_t *dest, size_t *size){ + //make sure buffer has enough data + if (*size < 64) return -1; + + size_t startIdx = 0; + // 0xFFFF preamble, 64bits + uint8_t preamble[] = { + 1,1,1,1, + 1,1,1,1, + 1,1,1,1, + 1,1,1,1, + 0 + }; + + uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx); + if (errChk == 0) return -4; //preamble not found + if (*size != 64) return -3; + + uint8_t checkchksum = 0; + for (int i=16; i < 56; i += 8) { + checkchksum += bytebits_to_byte(dest+startIdx+i,8); + } + checkchksum ^= 0x3A; + + uint8_t crc = bytebits_to_byte(dest+startIdx+56, 8); + + if ( checkchksum != crc ) return -5; + return (int)startIdx; +} + // by marshmellow // FSK Demod then try to locate an AWID ID int AWIDdemodFSK(uint8_t *dest, size_t *size) @@ -764,15 +799,16 @@ int PyramiddemodFSK(uint8_t *dest, size_t *size) return (int)startIdx; } -// find presco preamble 0x10D in already demoded data +// find nedap preamble in already demoded data int NedapDemod(uint8_t *dest, size_t *size) { //make sure buffer has data if (*size < 128) return -3; + size_t startIdx = 0; + //uint8_t preamble[] = {1,1,1,1,1,1,1,1,1,0,0,0,1}; uint8_t preamble[] = {1,1,1,1,1,1,1,1,1,0}; uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx); if (errChk == 0) return -4; //preamble not found - //return start position return (int) startIdx; }