X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/9686a8d4d589ada3b61bf6c259aeaf21668fc8d8..7aa24806f420d064f325a4b46d6b639095cc7e6b:/common/lfdemod.c?ds=sidebyside diff --git a/common/lfdemod.c b/common/lfdemod.c index a410fd7c..7e31f53d 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -723,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) @@ -766,7 +799,7 @@ 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;