From fd1d30cb76a384adc8176df1f0f35658c091d96c Mon Sep 17 00:00:00 2001 From: marshmellow42 Date: Wed, 3 Jun 2015 18:28:56 -0400 Subject: [PATCH] addition animal tags demod info --- client/cmddata.c | 35 ++++++++++++++--------------------- common/lfdemod.c | 13 +++++++------ common/lfdemod.h | 1 + 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/client/cmddata.c b/client/cmddata.c index 089e7d5f..fd08b6dd 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -1493,11 +1493,14 @@ int CmdIso11784demodBI(const char *Cmd){ setDemodBuf(BitStream, 128, preambleIndex); //printDemodBuff(); - size = removeParity(BitStream, preambleIndex + 11, 9, 1, 117); - if ( size <= 0 ) { + size = removeParity(BitStream, preambleIndex + 11, 9, 2, 117); + if ( size <= 103 ) { if (g_debugMode) PrintAndLog("Error removeParity:: %d", size); return 0; } + //char *bin = sprint_bin_break(BitStream,size,16); + //PrintAndLog("DEBUG BinStream:\n%s",bin); + PrintAndLog("startmarker %d; Size %d", preambleIndex, size); //return 1; @@ -1511,25 +1514,14 @@ int CmdIso11784demodBI(const char *Cmd){ uint32_t crc16 = bytebits_to_byteLSBF(BitStream+64,16); uint32_t extended = bytebits_to_byteLSBF(BitStream+80,24); - PrintAndLog("NationalCode: %x%08x",NationalCodeB,NationalCodeA); - //add rest of print code here... - /* - uint8_t ByteStream[16] = {0x00}; - uint8_t bitCnt = 0; - uint8_t ByteCnt = 0; - size_t startIdx = preambleIndex + 11; //start after preamble - for (size_t idx = 0; idx < size-11; idx++){ - - //lsb first - ByteStream[ByteCnt] = ByteStream[ByteCnt] | (BitStream[startIdx+idx] << bitCnt); - bitCnt++; - if (bitCnt % 8 == 0){ - if (g_debugMode) PrintAndLog("byte %d: %02x", ByteCnt, ByteStream[ByteCnt]); - bitCnt = 0; - ByteCnt++; - } - } - */ + PrintAndLog("NationalCode: %X%08X",NationalCodeB,NationalCodeA); + PrintAndLog("CountryCode: %d",countryCode); + PrintAndLog("dataBlockBit: %d",dataBlockBit); + PrintAndLog("reservedCode: %X",reservedCode); + PrintAndLog("animalBit: %d", animalBit); + PrintAndLog("CRC: %02X", crc16); + PrintAndLog("Extended: %x", extended); + return 1; } @@ -2289,6 +2281,7 @@ static command_t CommandTable[] = {"hexsamples", CmdHexsamples, 0, " [] -- Dump big buffer as hex bytes"}, {"hide", CmdHide, 1, "Hide graph window"}, {"hpf", CmdHpf, 1, "Remove DC offset from trace"}, + {"iso11784demod", CmdIso11784demodBI, 1, "Demodulate a ISO11784/85 Biphase tag from GraphBuffer"}, {"load", CmdLoad, 1, " -- Load trace (to graph window"}, {"ltrim", CmdLtrim, 1, " -- Trim samples from left of trace"}, {"rtrim", CmdRtrim, 1, " -- Trim samples from right of trace"}, diff --git a/common/lfdemod.c b/common/lfdemod.c index c0f2bb71..aa37bb9e 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -526,7 +526,7 @@ int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, ui return (int)startIdx; } -uint32_t bytebits_to_byte(uint8_t* src, size_t numbits) +uint32_t bytebits_to_byte(uint8_t *src, size_t numbits) { uint32_t num = 0; for(int i = 0 ; i < numbits ; i++) @@ -538,13 +538,12 @@ uint32_t bytebits_to_byte(uint8_t* src, size_t numbits) } //least significant bit first -uint32_t bytebits_to_byteLSBF(uint8_t* src, size_t numbits) +uint32_t bytebits_to_byteLSBF(uint8_t *src, size_t numbits) { uint32_t num = 0; for(int i = 0 ; i < numbits ; i++) { - num = (num << 1) | (*src); - src++; + num = (num << 1) | *(src + (numbits-(i+1))); } return num; } @@ -581,7 +580,7 @@ int IOdemodFSK(uint8_t *dest, size_t size) // by marshmellow // takes a array of binary values, start position, length of bits per parity (includes parity bit), -// Parity Type (1 for odd 0 for even), and binary Length (length to run) +// Parity Type (1 for odd; 0 for even; 2 for just drop it), and binary Length (length to run) size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen) { uint32_t parityWd = 0; @@ -593,7 +592,9 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p } j--; // if parity fails then return 0 - if (parityTest(parityWd, pLen, pType) == 0) return -1; + if (pType != 2) { + if (parityTest(parityWd, pLen, pType) == 0) return -1; + } bitCnt+=(pLen-1); parityWd = 0; } diff --git a/common/lfdemod.h b/common/lfdemod.h index 81157d19..e21bfe11 100644 --- a/common/lfdemod.h +++ b/common/lfdemod.h @@ -41,6 +41,7 @@ void psk1TOpsk2(uint8_t *BitStream, size_t size); size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen); //tag specific +int ISO11784demodBI(uint8_t *dest, size_t *size); int AWIDdemodFSK(uint8_t *dest, size_t *size); int gProxII_Demod(uint8_t BitStream[], size_t *size); int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo); -- 2.39.2