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[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++) {
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)
- 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);
return bitlength;
}
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;
}
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 firstST = 0;
// i = clock frame of data
- for (; i < (int)(len / clock); i++)
+ for (; i < (int)(len/clock); i++)
{
hithigh = 0;
hitlow = 0;
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");
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 (j=0; j<len; ++j)
data[j] = output[j];
+
+ free(output);
}
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)
printf("%d", bit ); }
printf("\n");
+ free(output);
}
float complex cexpf (float complex Z)