From 7f96433c8a1fc3ba13bd8c3b7ee2f257d4390ca2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 3 Jun 2015 22:19:32 +0200 Subject: [PATCH] CHG: trying to get the askdemod / biphasedeocde / finding startmarker / removeparity to work in ISO11784demod --- client/cmddata.c | 85 +++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/client/cmddata.c b/client/cmddata.c index 87cf4bac..8e0a308b 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -1457,65 +1457,68 @@ int CmdFSKdemodPyramid(const char *Cmd) return 1; } -// ISO11784/85 demod (aka animal tag) BIPHASE rf/32, with preamble of 00000000001 (128bits) -// 8 databits 1 parity +// ISO11784/85 demod (aka animal tag) BIPHASE, inverted, rf/32, with preamble of 00000000001 (128bits) +// 8 databits + 1 parity (1) // CIITT 16 chksum // NATIONAL CODE, ICAR database // COUNTRY CODE (ISO3166) // FLAG (animal/non-animal) int CmdIso11784demodBI(const char *Cmd){ - - if (!ASKbiphaseDemod(Cmd, FALSE)){ - if (g_debugMode) PrintAndLog("ASKbiphaseDemod failed 1st try"); + + int invert = 1; + int clk = 32; + int errCnt = 0; + uint8_t BitStream[MAX_DEMOD_BUF_LEN]; + size_t size = getFromGraphBuf(BitStream); + + errCnt = askdemod(BitStream, &size, &clk, &invert, 0, 0, 0); + if ( errCnt<0 ) { + if (g_debugMode) PrintAndLog("DEBUG: no data found %d, clock: 32", errCnt); return 0; } - size_t size = DemodBufferLen; - int ans = ISO11784demodBI(DemodBuffer, &size); - if (ans < 0){ - if (g_debugMode) PrintAndLog("Error ISO11784Demod"); + errCnt = BiphaseRawDecode(BitStream, &size, 0, 1); + if (errCnt < 0){ + if (g_debugMode) PrintAndLog("Error BiphaseRawDecode: %d", errCnt); return 0; - } + } + + - //size = removeParity(BitStream, idx+11, 9, 1, 104); + int preambleIndex = ISO11784demodBI(BitStream, &size); + if (preambleIndex < 0){ + if (g_debugMode) PrintAndLog("Error ISO11784Demod , no startmarker found :: %d",preambleIndex); + return 0; + } + + size = removeParity(BitStream, preambleIndex + 11, 9, 1, 128); + if ( size <= 0 ) { + if (g_debugMode) PrintAndLog("Error removeParity:: %d", size); + return 0; + } + PrintAndLog("startmarker %d; Size %d", preambleIndex, size); + + return 1; //got a good demod - uint32_t ByteStream[13] = {0x00}; - uint8_t xorKey=0; - uint8_t keyCnt=0; - uint8_t bitCnt=0; - uint8_t ByteCnt=0; - size_t startIdx = ans + 11; //start after preamble - for (size_t idx = 0; idx