]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
addition animal tags demod info
authormarshmellow42 <marshmellowrf@gmail.com>
Wed, 3 Jun 2015 22:28:56 +0000 (18:28 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Wed, 3 Jun 2015 22:28:56 +0000 (18:28 -0400)
client/cmddata.c
common/lfdemod.c
common/lfdemod.h

index 089e7d5fcf6eb63998a5bed7ab8be67eb5b1d54d..fd08b6dd10a21e6517d3d6e12f2763d65b2d79b0 100644 (file)
@@ -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, "<bytes> [<offset>] -- 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, "<filename> -- Load trace (to graph window"},
        {"ltrim",           CmdLtrim,           1, "<samples> -- Trim samples from left of trace"},
        {"rtrim",           CmdRtrim,           1, "<location to end trace> -- Trim samples from right of trace"},
index c0f2bb71265ee4ffcce67f5da4be77527eb71321..aa37bb9ef580d04840c237de865bf140692b552a 100644 (file)
@@ -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_tsrc, 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_tsrc, 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;
        }
index 81157d1927103accdecccbbe9402c416994cd76c..e21bfe11a8ec69ce8d37be6d3e59036c93c216bf 100644 (file)
@@ -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);
Impressum, Datenschutz