summaryrefslogtreecommitdiff
path: root/gsm-tvoid/src/lib/gsm.i
blob: 9d653ac5b4d51f754a1be97d45c53b00270a370f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* -*- c++ -*- */
//%feature("autodoc", "1");		// generate python docstrings
//%include "exception.i"
%import "gnuradio.i"			// the common stuff

%{
#include "gnuradio_swig_bug_workaround.h"	// mandatory bug fix
//#include "gsm_constants.h"
//#include "gsm_burst.h"
#include "gsm_burst_ff.h"
#include "gsm_burst_cf.h"
//#include <stdexcept>

%}

// ----------------------------------------------------------------

#define PRINT_NOTHING		0x00000000
#define PRINT_EVERYTHING	0x7FFFFFFF		//7 for SWIG overflow check work around
#define PRINT_BITS			0x00000001
#define PRINT_ALL_BITS		0x00000002
#define PRINT_CORR_BITS		0x00000004
#define PRINT_STATE			0x00000008

#define PRINT_ALL_TYPES		0x00000FF0
#define PRINT_KNOWN			0x00000FE0
#define PRINT_UNKNOWN		0x00000010
#define PRINT_TS0			0x00000020
#define PRINT_FCCH			0x00000040
#define PRINT_SCH			0x00000080
#define PRINT_DUMMY			0x00000100
#define PRINT_NORMAL		0x00000200

#define PRINT_GSM_DECODE	0x00000400

#define PRINT_HEX			0x00001000

//Timing/clock options
#define QB_NONE				0x00000000
#define QB_QUARTER			0x00000001		//only for internal clocked versions
#define QB_FULL04			0x00000003
#define QB_MASK				0x0000000F

#define CLK_CORR_TRACK		0x00000010		//adjust timing based on correlation offsets

#define BURST_CB_ADJ_OFFSET		1
#define BURST_CB_TUNE			2

//EQ options
enum EQ_TYPE {
	EQ_NONE,
	EQ_FIXED_LINEAR,
	EQ_ADAPTIVE_LINEAR,
	EQ_FIXED_DFE,
	EQ_ADAPTIVE_DFE,
	EQ_VITERBI
};

//GR_SWIG_BLOCK_MAGIC(gsm,burst);

class gsm_burst {
public:
	~gsm_burst ();
		
	unsigned long	d_clock_options;
	unsigned long	d_print_options;
	EQ_TYPE			d_equalizer_type;

	//stats
	long			d_sync_loss_count;
	long			d_fcch_count;
	long			d_part_sch_count;
	long			d_sch_count;
	long			d_normal_count;
	long			d_dummy_count;
	long			d_unknown_count;
	long			d_total_count;
	
	long 			next_arfcn;

	int				sync_state();
	float 			last_freq_offset(void);
	double 			mean_freq_offset(void);
	
	//Methods
	void full_reset(void);


protected:
	gsm_burst(gr_feval_ll *);  
};


GR_SWIG_BLOCK_MAGIC(gsm,burst_ff);
gsm_burst_ff_sptr gsm_make_burst_ff (gr_feval_ll *);

class gsm_burst_ff : public gr_block, public gsm_burst {
private:
	gsm_burst_ff (gr_feval_ll *);
};

GR_SWIG_BLOCK_MAGIC(gsm,burst_cf);
gsm_burst_cf_sptr gsm_make_burst_cf (gr_feval_ll *,float);

class gsm_burst_cf : public gr_block, public gsm_burst {
private:
	gsm_burst_cf (gr_feval_ll *,float);
};





personal git repositories of Harald Welte. Your mileage may vary