#include <pthread.h>
#include "loclass/cipherutils.h"
#include "ui.h"
-
+#include "cmdmain.h"
+#include "cmddata.h"
//#include <liquid/liquid.h>
#define M_PI 3.14159265358979323846264338327
startindex = DetectFirstTransition(data, len, high);
PrintAndLog(" Clock : %d", clock);
- PrintAndLog(" startindex : %d", startindex);
+ //PrintAndLog(" startindex : %d", startindex);
if (high != 1)
bitlength = ManchesterConvertFrom255(data, len, bitStream, high, low, clock, startindex);
// No high value found, are we in a dampening field?
if ( !hithigh ) {
//PrintAndLog(" # Entering damp test at index : %d (%d)", z+j, j);
- for (j = 0; j < clock; j++)
- {
+ for (j = 0; j < clock; j++) {
if (
(data[z+j] <= dampHi && data[z+j] >= dampLow)
){
PrintAndLog(" %s", sprint_bin(bitStream+i, mod) );
}
-void iceFsk(int * data, const size_t len){
-
- //34359738 == 125khz (2^32 / 125) =
-
- // parameters
- float phase_offset = 0.00f; // carrier phase offset
- float frequency_offset = 0.30f; // carrier frequency offset
- float wn = 0.01f; // pll bandwidth
- float zeta = 0.707f; // pll damping factor
- float K = 1000; // pll loop gain
- size_t n = len; // number of samples
-
- // generate loop filter parameters (active PI design)
- float t1 = K/(wn*wn); // tau_1
- float t2 = 2*zeta/wn; // tau_2
-
- // feed-forward coefficients (numerator)
- float b0 = (4*K/t1)*(1.+t2/2.0f);
- float b1 = (8*K/t1);
- float b2 = (4*K/t1)*(1.-t2/2.0f);
-
- // feed-back coefficients (denominator)
- // a0 = 1.0 is implied
- float a1 = -2.0f;
- float a2 = 1.0f;
-
- // filter buffer
- float v0=0.0f, v1=0.0f, v2=0.0f;
-
- // initialize states
- float phi = phase_offset; // input signal's initial phase
- float phi_hat = 0.0f; // PLL's initial phase
-
- unsigned int i;
- float complex x,y;
- float complex output[n];
-
- for (i=0; i<n; i++) {
- // INPUT SIGNAL
- x = data[i];
- phi += frequency_offset;
-
- // generate complex sinusoid
- y = cosf(phi_hat) + _Complex_I*sinf(phi_hat);
-
- output[i] = y;
-
- // compute error estimate
- float delta_phi = cargf( x * conjf(y) );
-
-
- // print results to standard output
- printf(" %6u %12.8f %12.8f %12.8f %12.8f %12.8f\n",
- i,
- crealf(x), cimagf(x),
- crealf(y), cimagf(y),
- delta_phi);
-
- // push result through loop filter, updating phase estimate
-
- // advance buffer
- v2 = v1; // shift center register to upper register
- v1 = v0; // shift lower register to center register
-
- // compute new lower register
- v0 = delta_phi - v1*a1 - v2*a2;
-
- // compute new output
- phi_hat = v0*b0 + v1*b1 + v2*b2;
-
- }
-
- for (i=0; i<len; ++i){
- data[i] = (int)crealf(output[i]);
- }
-}
-
/* Sliding DFT
Smooths out
*/
int i,j;
int output[len];
- float fc = 0.1125f; // center frequency
-
+ float fc = 0.1125f; // center frequency
+ size_t adjustedLen = len;
+
// create very simple low-pass filter to remove images (2nd-order Butterworth)
float complex iir_buf[3] = {0,0,0};
float b[3] = {0.003621681514929, 0.007243363029857, 0.003621681514929};
float a[3] = {1.000000000000000, -1.822694925196308, 0.837181651256023};
- // process entire input file one sample at a time
- float sample = 0; // input sample read from file
- float complex x_prime = 1.0f; // save sample for estimating frequency
+ float sample = 0; // input sample read from file
+ float complex x_prime = 1.0f; // save sample for estimating frequency
float complex x;
- for (i=0; i<len; ++i) {
+ for (i=0; i<adjustedLen; ++i) {
- sample = data[i];
+ sample = data[i]+128;
// remove DC offset and mix to complex baseband
x = (sample - 127.5f) * cexpf( _Complex_I * 2 * M_PI * fc * i );
}
// show data
- for (j=0; j<len; ++j)
+ for (j=0; j<adjustedLen; ++j)
data[j] = output[j];
CmdLtrim("30");
+ adjustedLen -= 30;
// zero crossings.
- for (j=0; j<len; ++j){
+ for (j=0; j<adjustedLen; ++j){
if ( data[j] == 10) break;
}
int startOne =j;
- for (;j<len; ++j){
+ for (;j<adjustedLen; ++j){
if ( data[j] == -10 ) break;
}
int stopOne = j-1;
fieldlen = (fieldlen == 59 || fieldlen == 51)? 50 : fieldlen;
if ( fieldlen != 40 && fieldlen != 50){
printf("Detected field Length: %d \n", fieldlen);
- printf("Can only handle len 40 or 50. Aborting...");
+ printf("Can only handle 40 or 50. Aborting...\n");
return;
}
// FSK sequence start == 000111
int startPos = 0;
- for (i =0; i<len; ++i){
+ for (i =0; i<adjustedLen; ++i){
int dec = 0;
for ( j = 0; j < 6*fieldlen; ++j){
dec += data[i + j];
int bit =0;
printf("BINARY\n");
printf("R/40 : ");
- for (i =startPos ; i < len; i += 40){
+ for (i =startPos ; i < adjustedLen; i += 40){
bit = data[i]>0 ? 1:0;
printf("%d", bit );
}
printf("\n");
printf("R/50 : ");
- for (i =startPos ; i < len; i += 50){
+ for (i =startPos ; i < adjustedLen; i += 50){
bit = data[i]>0 ? 1:0;
printf("%d", bit ); }
printf("\n");