|
gr-baz Package
|
00001 #ifndef __TUNER_E4000_H 00002 #define __TUNER_E4000_H 00003 00004 #include "rtl2832.h" 00005 00006 namespace RTL2832_NAMESPACE { namespace TUNERS_NAMESPACE { 00007 00008 class e4000 : public RTL2832_NAMESPACE::tuner_skeleton 00009 { 00010 IMPLEMENT_INLINE_TUNER_FACTORY(e4000) 00011 public: 00012 e4000(demod* p); 00013 public: 00014 inline virtual const char* name() const 00015 { return "Elonics E4000"; } 00016 public: 00017 int initialise(tuner::PPARAMS params = NULL); 00018 int set_frequency(double freq); 00019 int set_bandwidth(double bw); 00020 int set_gain(double gain); 00021 int set_gain_mode(int mode); 00022 int set_auto_gain_mode(bool on = true); 00023 bool calc_appropriate_gain_mode(int& mode)/* const*/; 00024 private: 00025 int update_gain_mode(); 00026 }; 00027 00028 } } // TUNERS_NAMESPACE, RTL2832_NAMESPACE 00029 00030 /** 00031 00032 @file 00033 00034 @brief E4000 tuner module declaration 00035 One can manipulate E4000 tuner through E4000 module. 00036 E4000 module is derived from tuner module. 00037 00038 @par Example: 00039 @code 00040 00041 // The example is the same as the tuner example in tuner_base.h except the listed lines. 00042 00043 #include "tuner_e4000.h" 00044 ... 00045 int main(void) 00046 { 00047 TUNER_MODULE *pTuner; 00048 E4000_EXTRA_MODULE *pTunerExtra; 00049 00050 TUNER_MODULE TunerModuleMemory; 00051 BASE_INTERFACE_MODULE BaseInterfaceModuleMemory; 00052 // I2C_BRIDGE_MODULE I2cBridgeModuleMemory; 00053 00054 unsigned long BandwidthMode; 00055 00056 ... 00057 00058 // Build E4000 tuner module. 00059 BuildE4000Module( 00060 &pTuner, 00061 &TunerModuleMemory, 00062 &BaseInterfaceModuleMemory, 00063 &I2cBridgeModuleMemory, 00064 0xac, // I2C device address is 0xac in 8-bit format. 00065 CRYSTAL_FREQ_16384000HZ, // Crystal frequency is 16.384 MHz. 00066 E4000_AGC_INTERNAL // The E4000 AGC mode is internal AGC mode. 00067 ); 00068 00069 // Get E4000 tuner extra module. 00070 pTunerExtra = (T2266_EXTRA_MODULE *)(pTuner->pExtra); 00071 00072 // ==== Initialize tuner and set its parameters ===== 00073 ... 00074 00075 // Set E4000 bandwidth. 00076 pTunerExtra->SetBandwidthMode(pTuner, E4000_BANDWIDTH_6MHZ); 00077 00078 // ==== Get tuner information ===== 00079 ... 00080 00081 // Get E4000 bandwidth. 00082 pTunerExtra->GetBandwidthMode(pTuner, &BandwidthMode); 00083 00084 // See the example for other tuner functions in tuner_base.h 00085 00086 return 0; 00087 } 00088 @endcode 00089 */ 00090 00091 //#include "tuner_base.h" 00092 00093 // The following context is implemented for E4000 source code. 00094 00095 // Definition (implemeted for E4000) 00096 #define E4000_1_SUCCESS 1 00097 #define E4000_1_FAIL 0 00098 #define E4000_I2C_SUCCESS 1 00099 #define E4000_I2C_FAIL 0 00100 /* 00101 // Function (implemeted for E4000) 00102 int 00103 I2CReadByte( 00104 RTL2832_NAMESPACE::tuner* pTuner, 00105 unsigned char NoUse, 00106 unsigned char RegAddr, 00107 unsigned char *pReadingByte 00108 ); 00109 00110 int 00111 I2CWriteByte( 00112 RTL2832_NAMESPACE::tuner* pTuner, 00113 unsigned char NoUse, 00114 unsigned char RegAddr, 00115 unsigned char WritingByte 00116 ); 00117 00118 int 00119 I2CWriteArray( 00120 RTL2832_NAMESPACE::tuner* pTuner, 00121 unsigned char NoUse, 00122 unsigned char RegStartAddr, 00123 unsigned char ByteNum, 00124 unsigned char *pWritingBytes 00125 ); 00126 */ 00127 // Functions (from E4000 source code) 00128 int tunerreset (RTL2832_NAMESPACE::tuner* pTuner); 00129 int Tunerclock(RTL2832_NAMESPACE::tuner* pTuner); 00130 int Qpeak(RTL2832_NAMESPACE::tuner* pTuner); 00131 int DCoffloop(RTL2832_NAMESPACE::tuner* pTuner); 00132 int GainControlinit(RTL2832_NAMESPACE::tuner* pTuner); 00133 00134 int Gainmanual(RTL2832_NAMESPACE::tuner* pTuner); 00135 int E4000_gain_freq(RTL2832_NAMESPACE::tuner* pTuner, int frequency); 00136 int PLL(RTL2832_NAMESPACE::tuner* pTuner, int Ref_clk, int Freq); 00137 int LNAfilter(RTL2832_NAMESPACE::tuner* pTuner, int Freq); 00138 int IFfilter(RTL2832_NAMESPACE::tuner* pTuner, int bandwidth, int Ref_clk); 00139 int freqband(RTL2832_NAMESPACE::tuner* pTuner, int Freq); 00140 int DCoffLUT(RTL2832_NAMESPACE::tuner* pTuner); 00141 int GainControlauto(RTL2832_NAMESPACE::tuner* pTuner); 00142 00143 int E4000_sensitivity(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth); 00144 int E4000_linearity(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth); 00145 int E4000_high_linearity(RTL2832_NAMESPACE::tuner* pTuner); 00146 int E4000_nominal(RTL2832_NAMESPACE::tuner* pTuner, int Freq, int bandwidth); 00147 00148 // The following context is E4000 tuner API source code 00149 00150 // Definitions 00151 /* 00152 // Bandwidth in Hz 00153 enum E4000_BANDWIDTH_HZ 00154 { 00155 E4000_BANDWIDTH_6000000HZ = 6000000, 00156 E4000_BANDWIDTH_7000000HZ = 7000000, 00157 E4000_BANDWIDTH_8000000HZ = 8000000, 00158 }; 00159 */ 00160 // Manipulaing functions 00161 void 00162 e4000_GetTunerType( 00163 RTL2832_NAMESPACE::tuner* pTuner, 00164 int *pTunerType 00165 ); 00166 00167 void 00168 e4000_GetDeviceAddr( 00169 RTL2832_NAMESPACE::tuner* pTuner, 00170 unsigned char *pDeviceAddr 00171 ); 00172 00173 int 00174 e4000_Initialize( 00175 RTL2832_NAMESPACE::tuner* pTuner, 00176 bool enable_dc_offset_loop = true, 00177 bool set_manual_gain = false 00178 ); 00179 00180 int 00181 e4000_SetRfFreqHz( 00182 RTL2832_NAMESPACE::tuner* pTuner, 00183 unsigned long RfFreqHz, 00184 bool update_gain_control = true, 00185 bool enable_dc_offset_lut = true 00186 ); 00187 00188 int 00189 e4000_GetRfFreqHz( 00190 RTL2832_NAMESPACE::tuner* pTuner, 00191 unsigned long *pRfFreqHz 00192 ); 00193 00194 // Extra manipulaing functions 00195 int 00196 e4000_GetRegByte( 00197 RTL2832_NAMESPACE::tuner* pTuner, 00198 unsigned char RegAddr, 00199 unsigned char *pReadingByte 00200 ); 00201 00202 int 00203 e4000_SetBandwidthHz( 00204 RTL2832_NAMESPACE::tuner* pTuner, 00205 unsigned long BandwidthHz 00206 ); 00207 00208 int 00209 e4000_GetBandwidthHz( 00210 RTL2832_NAMESPACE::tuner* pTuner, 00211 unsigned long *pBandwidthHz 00212 ); 00213 00214 /////////////////////////////////////////////////////////////////////////////// 00215 // Definitions 00216 00217 #define RTL2832_E4000_ADDITIONAL_INIT_REG_TABLE_LEN 34 00218 00219 #define RTL2832_E4000_LNA_GAIN_TABLE_LEN 16 00220 #define RTL2832_E4000_LNA_GAIN_ADD_TABLE_LEN 8 00221 #define RTL2832_E4000_MIXER_GAIN_TABLE_LEN 2 00222 #define RTL2832_E4000_IF_STAGE_1_GAIN_TABLE_LEN 2 00223 #define RTL2832_E4000_IF_STAGE_2_GAIN_TABLE_LEN 4 00224 #define RTL2832_E4000_IF_STAGE_3_GAIN_TABLE_LEN 4 00225 #define RTL2832_E4000_IF_STAGE_4_GAIN_TABLE_LEN 4 00226 #define RTL2832_E4000_IF_STAGE_5_GAIN_TABLE_LEN 8 00227 #define RTL2832_E4000_IF_STAGE_6_GAIN_TABLE_LEN 8 00228 00229 #define RTL2832_E4000_LNA_GAIN_BAND_NUM 2 00230 #define RTL2832_E4000_MIXER_GAIN_BAND_NUM 2 00231 00232 #define RTL2832_E4000_RF_BAND_BOUNDARY_HZ 300000000 00233 00234 #define RTL2832_E4000_LNA_GAIN_ADDR 0x14 00235 #define RTL2832_E4000_LNA_GAIN_MASK 0xf 00236 #define RTL2832_E4000_LNA_GAIN_SHIFT 0 00237 00238 #define RTL2832_E4000_LNA_GAIN_ADD_ADDR 0x24 00239 #define RTL2832_E4000_LNA_GAIN_ADD_MASK 0x7 00240 #define RTL2832_E4000_LNA_GAIN_ADD_SHIFT 0 00241 00242 #define RTL2832_E4000_MIXER_GAIN_ADDR 0x15 00243 #define RTL2832_E4000_MIXER_GAIN_MASK 0x1 00244 #define RTL2832_E4000_MIXER_GAIN_SHIFT 0 00245 00246 #define RTL2832_E4000_IF_STAGE_1_GAIN_ADDR 0x16 00247 #define RTL2832_E4000_IF_STAGE_1_GAIN_MASK 0x1 00248 #define RTL2832_E4000_IF_STAGE_1_GAIN_SHIFT 0 00249 00250 #define RTL2832_E4000_IF_STAGE_2_GAIN_ADDR 0x16 00251 #define RTL2832_E4000_IF_STAGE_2_GAIN_MASK 0x6 00252 #define RTL2832_E4000_IF_STAGE_2_GAIN_SHIFT 1 00253 00254 #define RTL2832_E4000_IF_STAGE_3_GAIN_ADDR 0x16 00255 #define RTL2832_E4000_IF_STAGE_3_GAIN_MASK 0x18 00256 #define RTL2832_E4000_IF_STAGE_3_GAIN_SHIFT 3 00257 00258 #define RTL2832_E4000_IF_STAGE_4_GAIN_ADDR 0x16 00259 #define RTL2832_E4000_IF_STAGE_4_GAIN_MASK 0x60 00260 #define RTL2832_E4000_IF_STAGE_4_GAIN_SHIFT 5 00261 00262 #define RTL2832_E4000_IF_STAGE_5_GAIN_ADDR 0x17 00263 #define RTL2832_E4000_IF_STAGE_5_GAIN_MASK 0x7 00264 #define RTL2832_E4000_IF_STAGE_5_GAIN_SHIFT 0 00265 00266 #define RTL2832_E4000_IF_STAGE_6_GAIN_ADDR 0x17 00267 #define RTL2832_E4000_IF_STAGE_6_GAIN_MASK 0x38 00268 #define RTL2832_E4000_IF_STAGE_6_GAIN_SHIFT 3 00269 00270 #define RTL2832_E4000_TUNER_OUTPUT_POWER_UNIT_0P1_DBM -100 00271 00272 #define RTL2832_E4000_TUNER_MODE_UPDATE_WAIT_TIME_MS 1000 00273 00274 // Tuner gain mode 00275 enum RTL2832_E4000_TUNER_GAIN_MODE 00276 { 00277 RTL2832_E4000_TUNER_GAIN_SENSITIVE = RTL2832_NAMESPACE::tuner::DEFAULT, 00278 RTL2832_E4000_TUNER_GAIN_NORMAL, 00279 RTL2832_E4000_TUNER_GAIN_LINEAR, 00280 }; 00281 00282 #endif