]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/ui.c
Some more nasty bugs fixed in the lf t55xx manchester_decode method.
[proxmark3-svn] / client / ui.c
index 5d05da96c5cb13037ec4d31bbe9a0bfe2131d7c9..816bff44058dea8230617a1da3ad8e466b00d45d 100644 (file)
@@ -95,15 +95,14 @@ void SetLogFilename(char *fn)
   logfilename = 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;
        
        int bitlength = 0;
        int i, clock, high, low, startindex;
        low = startindex = 0;
        high = 1;
-       uint8_t bitStream[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++) {
        
        /* Detect high and lows */
        for (i = 0; i < len; i++) {
@@ -117,15 +116,15 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        clock = GetT55x7Clock( data, len, high );       
        startindex = DetectFirstTransition(data, len, high);
   
        clock = GetT55x7Clock( data, len, high );       
        startindex = DetectFirstTransition(data, len, high);
   
-       PrintAndLog(" Clock       : %d", clock);
-       //PrintAndLog(" startindex  : %d", startindex);
-       
+       //PrintAndLog(" Clock       : %d", clock);
+
        if (high != 1)
        if (high != 1)
-               bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
+               bitlength = ManchesterConvertFrom255(data, len, bitStream, dataoutlen, high, low, clock, startindex);
        else
        else
-               bitlength= ManchesterConvertFrom1(data, len, bitStream, clock, startindex);
+               bitlength= ManchesterConvertFrom1(data, len, bitStream, dataoutlen, clock, startindex);
 
        memcpy(dataout, bitStream, bitlength);
 
        memcpy(dataout, bitStream, bitlength);
+       free(bitStream);
        return bitlength;
 }
 
        return bitlength;
 }
 
@@ -193,7 +192,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        return i;
  }
 
        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;
 
        int i, j, z, hithigh, hitlow, bitIndex, startType;
        i = 0;
@@ -206,7 +205,7 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
        int firstST = 0;
 
        // i = clock frame of data
        int firstST = 0;
 
        // i = clock frame of data
-       for (; i < (int)(len / clock); i++)
+       for (; i < (int)(len/clock); i++)
        {
                hithigh = 0;
                hitlow = 0;
        {
                hithigh = 0;
                hitlow = 0;
@@ -262,11 +261,13 @@ int manchester_decode( int * data, const size_t len, uint8_t * dataout){
                
                if ( firstST == 4)
                        break;
                
                if ( firstST == 4)
                        break;
+               if ( bitIndex >= dataoutlen-1 )
+                       break;
        }
        return bitIndex;
  }
  
        }
        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");
  
 
        PrintAndLog(" Path B");
  
@@ -398,8 +399,9 @@ void PrintPaddedManchester( uint8_t* bitStream, size_t len, size_t blocksize){
 void iceFsk2(int * data, const size_t len){
 
        int i, j;
 void iceFsk2(int * data, const size_t len){
 
        int i, j;
-       int output[len];
-       
+       int * output =  (int* ) malloc(sizeof(int) * len);      
+       memset(output, 0x00, len);
+
        // for (i=0; i<len-5; ++i){
                // for ( j=1; j <=5; ++j) {
                        // output[i] += data[i*j];
        // for (i=0; i<len-5; ++i){
                // for ( j=1; j <=5; ++j) {
                        // output[i] += data[i*j];
@@ -419,13 +421,17 @@ void iceFsk2(int * data, const size_t len){
        
        for (j=0; j<len; ++j)
                data[j] = output[j];
        
        for (j=0; j<len; ++j)
                data[j] = output[j];
+               
+       free(output);
 }
 
 void iceFsk3(int * data, const size_t len){
 
        int i,j;
 }
 
 void iceFsk3(int * data, const size_t len){
 
        int i,j;
-       int output[len];
-    float fc           = 0.1125f;          // center frequency
+       
+       int * output =  (int* ) malloc(sizeof(int) * len);      
+       memset(output, 0x00, len);
+       float fc           = 0.1125f;          // center frequency
        size_t adjustedLen = len;
        
     // create very simple low-pass filter to remove images (2nd-order Butterworth)
        size_t adjustedLen = len;
        
     // create very simple low-pass filter to remove images (2nd-order Butterworth)
@@ -520,6 +526,7 @@ void iceFsk3(int * data, const size_t len){
                printf("%d", bit );     }
        printf("\n");   
        
                printf("%d", bit );     }
        printf("\n");   
        
+       free(output);
 }
 
 float complex cexpf (float complex Z)
 }
 
 float complex cexpf (float complex Z)
Impressum, Datenschutz