]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/ui.c
FIX: hf mf eload - now supports specifying 0,1,2,4 in card memory for the file to...
[proxmark3-svn] / client / ui.c
index 966ab2ca12f696501340b06fdafd7b981c5906fc..d475852549403a10ac03987242048ed12965e2ed 100644 (file)
@@ -79,6 +79,7 @@ void PrintAndLog(char *fmt, ...)
                vfprintf(logfile, fmt, argptr2);
                fprintf(logfile,"\n");
                fflush(logfile);
+               fclose(logfile);  // ICEMAN,  this logfile is never closed?!?
        }
        va_end(argptr2);
 
@@ -95,14 +96,14 @@ void SetLogFilename(char *fn)
   logfilename = fn;
 }
 
-int manchester_decode( int * data, const size_t len, uint8_t * dataout){
+int manchester_decode( int * data, const size_t len, uint8_t * dataout,  size_t dataoutlen){
        
        int bitlength = 0;
        int i, clock, high, low, startindex;
        low = startindex = 0;
        high = 1;
-       uint8_t * bitStream =  (uint8_t* ) malloc(sizeof(uint8_t) * len);       
-       memset(bitStream, 0x00, len);
+       uint8_t * bitStream =  (uint8_t* ) malloc(sizeof(uint8_t) * dataoutlen);        
+       memset(bitStream, 0x00, dataoutlen);    
        
        /* Detect high and lows */
        for (i = 0; i < len; i++) {
@@ -116,12 +117,12 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        clock = GetT55x7Clock( data, len, high );       
        startindex = DetectFirstTransition(data, len, high);
   
-       PrintAndLog(" Clock       : %d", clock);
+       //PrintAndLog(" Clock       : %d", clock);
 
        if (high != 1)
-               bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
+               bitlength = ManchesterConvertFrom255(data, len, bitStream, dataoutlen, high, low, clock, startindex);
        else
-               bitlength= ManchesterConvertFrom1(data, len, bitStream, clock, startindex);
+               bitlength= ManchesterConvertFrom1(data, len, bitStream, dataoutlen, clock, startindex);
 
        memcpy(dataout, bitStream, bitlength);
        free(bitStream);
@@ -152,30 +153,13 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
                        lastpeak = i;
                }
        }
-       //return clock;  
-       //defaults clock to precise values.
-       switch(clock){
-               case 8:
-               case 16:
-               case 32:
-               case 40:
-               case 50:
-               case 64:
-               case 100:
-               case 128:
-               return clock;
-               break;
-               default:  break;
-       }
-       
-       //PrintAndLog(" Found Clock : %d  - trying to adjust", clock);
        
        // When detected clock is 31 or 33 then then return 
        int clockmod = clock%8;
-       if ( clockmod == 7 ) 
-               clock += 1;
-       else if ( clockmod == 1 )
-               clock -= 1;
+       if ( clockmod == 0) return clock;
+       
+       if ( clockmod == 7 ) clock += 1;
+       else if ( clockmod == 1 ) clock -= 1;
        
        return clock;
  }
@@ -192,7 +176,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        return i;
  }
 
- int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int high, int low, int clock, int startIndex){
+ int ManchesterConvertFrom255(const int * data, const size_t len, uint8_t * dataout, int dataoutlen, int high, int low, int clock, int startIndex){
 
        int i, j, z, hithigh, hitlow, bitIndex, startType;
        i = 0;
@@ -205,7 +189,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        int firstST = 0;
 
        // i = clock frame of data
-       for (; i < (int)(len / clock); i++)
+       for (; i < (int)(len/clock); i++)
        {
                hithigh = 0;
                hitlow = 0;
@@ -261,11 +245,13 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
                
                if ( firstST == 4)
                        break;
+               if ( bitIndex >= dataoutlen-1 )
+                       break;
        }
        return bitIndex;
  }
  
- int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int clock, int startIndex){
+ int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout,int dataoutlen, int clock, int startIndex){
 
        PrintAndLog(" Path B");
  
Impressum, Datenschutz