gr-baz Package
rtl2832-tuner_e4000.h
Go to the documentation of this file.
1#ifndef __TUNER_E4000_H
2#define __TUNER_E4000_H
3
4#include "rtl2832.h"
5
6namespace RTL2832_NAMESPACE { namespace TUNERS_NAMESPACE {
7
9{
11public:
13public:
14 inline virtual const char* name() const
15 { return "Elonics E4000"; }
16public:
18 int set_frequency(double freq);
19 int set_bandwidth(double bw);
20 int set_gain(double gain);
21 int set_gain_mode(int mode);
22 int set_auto_gain_mode(bool on = true);
23 bool calc_appropriate_gain_mode(int& mode)/* const*/;
24private:
25 int update_gain_mode();
26};
27
28} } // TUNERS_NAMESPACE, RTL2832_NAMESPACE
29
30/**
31
32@file
33
34@brief E4000 tuner module declaration
35One can manipulate E4000 tuner through E4000 module.
36E4000 module is derived from tuner module.
37
38@par Example:
39@code
40
41// The example is the same as the tuner example in tuner_base.h except the listed lines.
42
43#include "tuner_e4000.h"
44...
45int main(void)
46{
47 TUNER_MODULE *pTuner;
48 E4000_EXTRA_MODULE *pTunerExtra;
49
50 TUNER_MODULE TunerModuleMemory;
51 BASE_INTERFACE_MODULE BaseInterfaceModuleMemory;
52// I2C_BRIDGE_MODULE I2cBridgeModuleMemory;
53
54 unsigned long BandwidthMode;
55
56 ...
57
58 // Build E4000 tuner module.
59 BuildE4000Module(
60 &pTuner,
61 &TunerModuleMemory,
62 &BaseInterfaceModuleMemory,
63 &I2cBridgeModuleMemory,
64 0xac, // I2C device address is 0xac in 8-bit format.
65 CRYSTAL_FREQ_16384000HZ, // Crystal frequency is 16.384 MHz.
66 E4000_AGC_INTERNAL // The E4000 AGC mode is internal AGC mode.
67 );
68
69 // Get E4000 tuner extra module.
70 pTunerExtra = (T2266_EXTRA_MODULE *)(pTuner->pExtra);
71
72 // ==== Initialize tuner and set its parameters =====
73 ...
74
75 // Set E4000 bandwidth.
76 pTunerExtra->SetBandwidthMode(pTuner, E4000_BANDWIDTH_6MHZ);
77
78 // ==== Get tuner information =====
79 ...
80
81 // Get E4000 bandwidth.
82 pTunerExtra->GetBandwidthMode(pTuner, &BandwidthMode);
83
84 // See the example for other tuner functions in tuner_base.h
85
86 return 0;
87}
88@endcode
89*/
90
91//#include "tuner_base.h"
92
93// The following context is implemented for E4000 source code.
94
95// Definition (implemeted for E4000)
96#define E4000_1_SUCCESS 1
97#define E4000_1_FAIL 0
98#define E4000_I2C_SUCCESS 1
99#define E4000_I2C_FAIL 0
100/*
101// Function (implemeted for E4000)
102int
103I2CReadByte(
104 RTL2832_NAMESPACE::tuner* pTuner,
105 unsigned char NoUse,
106 unsigned char RegAddr,
107 unsigned char *pReadingByte
108 );
109
110int
111I2CWriteByte(
112 RTL2832_NAMESPACE::tuner* pTuner,
113 unsigned char NoUse,
114 unsigned char RegAddr,
115 unsigned char WritingByte
116 );
117
118int
119I2CWriteArray(
120 RTL2832_NAMESPACE::tuner* pTuner,
121 unsigned char NoUse,
122 unsigned char RegStartAddr,
123 unsigned char ByteNum,
124 unsigned char *pWritingBytes
125 );
126*/
127// Functions (from E4000 source code)
133
135int E4000_gain_freq(RTL2832_NAMESPACE::tuner* pTuner, int frequency);
136int PLL(RTL2832_NAMESPACE::tuner* pTuner, int Ref_clk, int Freq);
137int LNAfilter(RTL2832_NAMESPACE::tuner* pTuner, int Freq);
138int IFfilter(RTL2832_NAMESPACE::tuner* pTuner, int bandwidth, int Ref_clk);
139int freqband(RTL2832_NAMESPACE::tuner* pTuner, int Freq);
142
143int E4000_sensitivity(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth);
144int E4000_linearity(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth);
146int E4000_nominal(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth);
147
148// The following context is E4000 tuner API source code
149
150// Definitions
151/*
152// Bandwidth in Hz
153enum E4000_BANDWIDTH_HZ
154{
155 E4000_BANDWIDTH_6000000HZ = 6000000,
156 E4000_BANDWIDTH_7000000HZ = 7000000,
157 E4000_BANDWIDTH_8000000HZ = 8000000,
158};
159*/
160// Manipulaing functions
161void
164 int *pTunerType
165 );
166
167void
170 unsigned char *pDeviceAddr
171 );
172
173int
176 bool enable_dc_offset_loop = true,
177 bool set_manual_gain = false
178 );
179
180int
183 unsigned long RfFreqHz,
184 bool update_gain_control = true,
185 bool enable_dc_offset_lut = true
186 );
187
188int
191 unsigned long *pRfFreqHz
192 );
193
194// Extra manipulaing functions
195int
198 unsigned char RegAddr,
199 unsigned char *pReadingByte
200 );
201
202int
205 unsigned long BandwidthHz
206 );
207
208int
211 unsigned long *pBandwidthHz
212 );
213
214///////////////////////////////////////////////////////////////////////////////
215// Definitions
216
217#define RTL2832_E4000_ADDITIONAL_INIT_REG_TABLE_LEN 34
218
219#define RTL2832_E4000_LNA_GAIN_TABLE_LEN 16
220#define RTL2832_E4000_LNA_GAIN_ADD_TABLE_LEN 8
221#define RTL2832_E4000_MIXER_GAIN_TABLE_LEN 2
222#define RTL2832_E4000_IF_STAGE_1_GAIN_TABLE_LEN 2
223#define RTL2832_E4000_IF_STAGE_2_GAIN_TABLE_LEN 4
224#define RTL2832_E4000_IF_STAGE_3_GAIN_TABLE_LEN 4
225#define RTL2832_E4000_IF_STAGE_4_GAIN_TABLE_LEN 4
226#define RTL2832_E4000_IF_STAGE_5_GAIN_TABLE_LEN 8
227#define RTL2832_E4000_IF_STAGE_6_GAIN_TABLE_LEN 8
228
229#define RTL2832_E4000_LNA_GAIN_BAND_NUM 2
230#define RTL2832_E4000_MIXER_GAIN_BAND_NUM 2
231
232#define RTL2832_E4000_RF_BAND_BOUNDARY_HZ 300000000
233
234#define RTL2832_E4000_LNA_GAIN_ADDR 0x14
235#define RTL2832_E4000_LNA_GAIN_MASK 0xf
236#define RTL2832_E4000_LNA_GAIN_SHIFT 0
237
238#define RTL2832_E4000_LNA_GAIN_ADD_ADDR 0x24
239#define RTL2832_E4000_LNA_GAIN_ADD_MASK 0x7
240#define RTL2832_E4000_LNA_GAIN_ADD_SHIFT 0
241
242#define RTL2832_E4000_MIXER_GAIN_ADDR 0x15
243#define RTL2832_E4000_MIXER_GAIN_MASK 0x1
244#define RTL2832_E4000_MIXER_GAIN_SHIFT 0
245
246#define RTL2832_E4000_IF_STAGE_1_GAIN_ADDR 0x16
247#define RTL2832_E4000_IF_STAGE_1_GAIN_MASK 0x1
248#define RTL2832_E4000_IF_STAGE_1_GAIN_SHIFT 0
249
250#define RTL2832_E4000_IF_STAGE_2_GAIN_ADDR 0x16
251#define RTL2832_E4000_IF_STAGE_2_GAIN_MASK 0x6
252#define RTL2832_E4000_IF_STAGE_2_GAIN_SHIFT 1
253
254#define RTL2832_E4000_IF_STAGE_3_GAIN_ADDR 0x16
255#define RTL2832_E4000_IF_STAGE_3_GAIN_MASK 0x18
256#define RTL2832_E4000_IF_STAGE_3_GAIN_SHIFT 3
257
258#define RTL2832_E4000_IF_STAGE_4_GAIN_ADDR 0x16
259#define RTL2832_E4000_IF_STAGE_4_GAIN_MASK 0x60
260#define RTL2832_E4000_IF_STAGE_4_GAIN_SHIFT 5
261
262#define RTL2832_E4000_IF_STAGE_5_GAIN_ADDR 0x17
263#define RTL2832_E4000_IF_STAGE_5_GAIN_MASK 0x7
264#define RTL2832_E4000_IF_STAGE_5_GAIN_SHIFT 0
265
266#define RTL2832_E4000_IF_STAGE_6_GAIN_ADDR 0x17
267#define RTL2832_E4000_IF_STAGE_6_GAIN_MASK 0x38
268#define RTL2832_E4000_IF_STAGE_6_GAIN_SHIFT 3
269
270#define RTL2832_E4000_TUNER_OUTPUT_POWER_UNIT_0P1_DBM -100
271
272#define RTL2832_E4000_TUNER_MODE_UPDATE_WAIT_TIME_MS 1000
273
274// Tuner gain mode
276{
280};
281
282#endif
Definition: rtl2832-tuner_e4000.h:9
virtual const char * name() const
Definition: rtl2832-tuner_e4000.h:14
int initialise(tuner::PPARAMS params=NULL)
Definition: rtl2832.h:310
Definition: rtl2832.h:187
virtual double gain() const
Definition: rtl2832.h:228
Definition: rtl2832.h:138
@ DEFAULT
Definition: rtl2832.h:151
Definition: rtl2832-tuner_e4000.h:6
RTL2832_E4000_TUNER_GAIN_MODE
Definition: rtl2832-tuner_e4000.h:276
@ RTL2832_E4000_TUNER_GAIN_NORMAL
Definition: rtl2832-tuner_e4000.h:278
@ RTL2832_E4000_TUNER_GAIN_LINEAR
Definition: rtl2832-tuner_e4000.h:279
@ RTL2832_E4000_TUNER_GAIN_SENSITIVE
Definition: rtl2832-tuner_e4000.h:277
int E4000_high_linearity(RTL2832_NAMESPACE::tuner *pTuner)
int tunerreset(RTL2832_NAMESPACE::tuner *pTuner)
int E4000_linearity(RTL2832_NAMESPACE::tuner *pTuner, int Freq, int bandwidth)
int GainControlauto(RTL2832_NAMESPACE::tuner *pTuner)
int e4000_Initialize(RTL2832_NAMESPACE::tuner *pTuner, bool enable_dc_offset_loop=true, bool set_manual_gain=false)
int Tunerclock(RTL2832_NAMESPACE::tuner *pTuner)
int Qpeak(RTL2832_NAMESPACE::tuner *pTuner)
int e4000_GetBandwidthHz(RTL2832_NAMESPACE::tuner *pTuner, unsigned long *pBandwidthHz)
int E4000_nominal(RTL2832_NAMESPACE::tuner *pTuner, int Freq, int bandwidth)
int e4000_SetBandwidthHz(RTL2832_NAMESPACE::tuner *pTuner, unsigned long BandwidthHz)
int E4000_gain_freq(RTL2832_NAMESPACE::tuner *pTuner, int frequency)
int LNAfilter(RTL2832_NAMESPACE::tuner *pTuner, int Freq)
int DCoffLUT(RTL2832_NAMESPACE::tuner *pTuner)
int IFfilter(RTL2832_NAMESPACE::tuner *pTuner, int bandwidth, int Ref_clk)
int DCoffloop(RTL2832_NAMESPACE::tuner *pTuner)
int Gainmanual(RTL2832_NAMESPACE::tuner *pTuner)
int e4000_GetRfFreqHz(RTL2832_NAMESPACE::tuner *pTuner, unsigned long *pRfFreqHz)
void e4000_GetDeviceAddr(RTL2832_NAMESPACE::tuner *pTuner, unsigned char *pDeviceAddr)
int E4000_sensitivity(RTL2832_NAMESPACE::tuner *pTuner, int Freq, int bandwidth)
int e4000_GetRegByte(RTL2832_NAMESPACE::tuner *pTuner, unsigned char RegAddr, unsigned char *pReadingByte)
int e4000_SetRfFreqHz(RTL2832_NAMESPACE::tuner *pTuner, unsigned long RfFreqHz, bool update_gain_control=true, bool enable_dc_offset_lut=true)
void e4000_GetTunerType(RTL2832_NAMESPACE::tuner *pTuner, int *pTunerType)
int PLL(RTL2832_NAMESPACE::tuner *pTuner, int Ref_clk, int Freq)
int GainControlinit(RTL2832_NAMESPACE::tuner *pTuner)
int freqband(RTL2832_NAMESPACE::tuner *pTuner, int Freq)
#define IMPLEMENT_INLINE_TUNER_FACTORY(class_name)
Definition: rtl2832.h:77
#define TUNERS_NAMESPACE
Definition: rtl2832.h:66
Definition: rtl2832.h:145