]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmddata.c
ADD: removed the paritythingy, I missunderstood its purpose.
[proxmark3-svn] / client / cmddata.c
index 8e0a308b968f0739f4bf42afedf983c1e7a6882c..3b9c3a663d61c84d20ad93bd67fab5a5af9de2e2 100644 (file)
@@ -1463,6 +1463,19 @@ int CmdFSKdemodPyramid(const char *Cmd)
 // NATIONAL CODE, ICAR database
 // COUNTRY CODE (ISO3166) 
 // FLAG (animal/non-animal)
+/*
+38 IDbits   
+10 country code 
+1 extra app bit
+14 reserved bits
+1 animal bit
+16 ccitt CRC chksum over 64bit ID CODE.
+24 appli bits.
+
+-- sample: 985121004515220
+
+Now is nibble shifting, byte shifting.
+*/
 int CmdIso11784demodBI(const char *Cmd){
 
        int invert = 1;
@@ -1482,44 +1495,41 @@ int CmdIso11784demodBI(const char *Cmd){
                if (g_debugMode) PrintAndLog("Error BiphaseRawDecode: %d", errCnt);
                return 0;
        } 
-
-
        
        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
        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++){
+       for (size_t idx = 0; idx < size; idx++){
 
+               if ( bitCnt == 9 ){
+                       bitCnt = 0;
+                       continue;
+               }
                //lsb first
-               ByteStream[ByteCnt] = ByteStream[ByteCnt] | (BitStream[startIdx+idx] << bitCnt);
+               ByteStream[ByteCnt] |= ( BitStream[startIdx+idx] << bitCnt );
                bitCnt++;
                if (bitCnt % 8 == 0){
                        if (g_debugMode) PrintAndLog("byte %d: %02x", ByteCnt, ByteStream[ByteCnt]);
-                       bitCnt = 0;
+                       bitCnt = 9;
                        ByteCnt++;
                }
        }
+       PrintAndLog("DATA:  %s", sprint_hex(ByteStream, 14));
        //now ByteStream contains 16 bytes of decrypted raw tag data
-       setDemodBuf(ByteStream, 128, 0);
-       //printDemodBuff();
+       setDemodBuf(BitStream+preambleIndex, 128, 0);
+       printDemodBuff();
        return 1;
+       
 }
 
 
Impressum, Datenschutz