summaryrefslogtreecommitdiff
path: root/gsm-tvoid/src/lib/gsm.i
blob: af644d97a8fc2e3364166f185939bd33256649f1 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* -*- 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 "gsm_burst_sink_c.h"
//#include <stdexcept>

%}

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

#define OPT_TEST_HOP_SPEED	0x00000001


#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	0x00004000

#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_SYNC_OFFSET	1
#define BURST_CB_ADJ_OFFSET		2
#define BURST_CB_TUNE			3

//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;
	unsigned long	d_test_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;

	//hop testing
	long			d_hop_good_arfcn;
	long			d_hop_bad_arfcn;

	int				sync_state();
	float 			last_freq_offset(void);
	float 			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 {
public:
	float			get_omega();

private:
	gsm_burst_cf (gr_feval_ll *,float);
};

GR_SWIG_BLOCK_MAGIC(gsm,burst_sink_c);
gsm_burst_sink_c_sptr gsm_make_burst_sink_c(gr_feval_ll *,float);

class gsm_burst_sink_c : public gr_sync_block, public gsm_burst {
private:
	gsm_burst_sink_c (gr_feval_ll *,float);
};





personal git repositories of Harald Welte. Your mileage may vary