1 #ifndef INCLUDED_RTL2832 2 #define INCLUDED_RTL2832 8 #include <libusb-1.0/libusb.h> 10 #include <libusb/libusb.h> 11 #endif // LIBUSB_FOUND 15 #ifdef RTL2832_EXPORTS 16 #define RTL2832_API __declspec(dllexport) 18 #define RTL2832_API __declspec(dllimport) 22 typedef __int8 int8_t;
23 typedef unsigned int uint32_t;
24 typedef unsigned __int64 uint64_t;
29 #define RTL2832_TEMPLATE 41 #define CURRENT_FUNCTION __FUNCTION__ 43 #define CURRENT_FUNCTION __PRETTY_FUNCTION__ 48 #define DEBUG_TUNER_I2C(t,r) \ 49 if (t->params().message_output && function && (line_number >= 0) && (line)) \ 50 t->params().message_output->on_log_message_ex(RTL2832_NAMESPACE::log_sink::LOG_LEVEL_ERROR, "%s: %s [%i] @ %s:%i \"%s\"\n", __FUNCTION__, libusb_result_to_string(r), r, function, line_number, line); 52 #define RTL2832_NAMESPACE rtl2832 66 #define TUNERS_NAMESPACE tuners 68 #define TUNER_FACTORY_FN_NAME Factory 69 #define TUNER_PROBE_FN_NAME Probe 70 #define DECLARE_TUNER_FACTORY() \ 72 static tuner* TUNER_FACTORY_FN_NAME(demod* p); \ 73 static int TUNER_PROBE_FN_NAME(demod* d); 74 #define IMPLEMENT_TUNER_FACTORY(class_name) \ 75 tuner* class_name::TUNER_FACTORY_FN_NAME(demod* p) \ 76 { return new class_name(p); } 77 #define IMPLEMENT_INLINE_TUNER_FACTORY(class_name) \ 79 static tuner* TUNER_FACTORY_FN_NAME(demod* p) \ 80 { return new class_name(p); } \ 81 static int TUNER_PROBE_FN_NAME(demod* d); 89 {
if (v.empty())
return false; r = std::make_pair(v[0], v[v.size() - 1]);
return true; }
92 {
return !(r.first == r.second); }
95 {
return !((d < r.first) || (d > r.second)); }
101 {
return (r.second - r.first); }
124 virtual int set_i2c_repeater(
bool on =
true,
const char* function_name = NULL,
int line_number = -1,
const char* line = NULL)=0;
125 virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer,
int len)=0;
126 virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer,
int len)=0;
127 virtual int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val)=0;
128 virtual int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t& data)=0;
134 virtual const char*
name()
const=0;
143 typedef int (*ProbeTunerFn)(
demod* p);
155 virtual int initialise(PPARAMS params = NULL)=0;
157 virtual int set_frequency(
double freq)=0;
158 virtual int set_bandwidth(
double bw)=0;
159 virtual int set_gain(
double gain)=0;
160 virtual int set_gain_mode(
int mode)=0;
161 virtual int set_auto_gain_mode(
bool on =
true)=0;
163 virtual int set_i2c_repeater(
bool on =
true,
const char* function_name = NULL,
int line_number = -1,
const char* line = NULL)=0;
164 virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer,
int len)=0;
165 virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer,
int len)=0;
167 virtual double frequency()
const=0;
168 virtual double bandwidth()
const=0;
169 virtual double gain()
const=0;
170 virtual int gain_mode()
const=0;
172 virtual range_t gain_range()
const=0;
173 virtual values_t gain_values()
const=0;
174 virtual range_t frequency_range()
const=0;
175 virtual range_t bandwidth_range()
const=0;
176 virtual values_t bandwidth_values()
const=0;
179 virtual bool calc_appropriate_gain_mode(
int& mode)=0;
180 virtual bool auto_gain_mode()
const=0;
182 virtual const PARAMS& params()
const=0;
183 virtual demod* parent()
const=0;
207 virtual const char*
name()
const 208 {
return "(dummy)"; }
218 virtual int set_i2c_repeater(
bool on =
true,
const char* function_name = NULL,
int line_number = -1,
const char* line = NULL);
219 virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer,
int len);
220 virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer,
int len);
221 virtual int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val);
222 virtual int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t& data);
227 {
return m_bandwidth; }
231 {
return m_gain_mode; }
233 { m_auto_gain_mode = on;
return SUCCESS; }
236 {
return m_gain_range; }
238 {
return m_gain_values; }
240 {
return m_frequency_range; }
242 {
return m_bandwidth_range; }
244 {
return m_bandwidth_values; }
247 {
return m_gain_modes; }
249 { mode = m_gain_mode;
return true; }
251 {
return m_auto_gain_mode; }
263 const char* m_function_name;
269 , m_function_name(function_name)
270 , m_line_number(line_number)
277 #define I2C_REPEATER_SCOPE(p) i2c_repeater_scope _i2c_repeater_scope(p, CURRENT_FUNCTION, __LINE__, p->name()) 278 #define THIS_I2C_REPEATER_SCOPE() I2C_REPEATER_SCOPE(this) 291 #define CHECK_LIBUSB_RESULT(r) check_libusb_result(r, false, CURRENT_FUNCTION, __LINE__, #r) 292 #define CHECK_LIBUSB_NEG_RESULT(r) check_libusb_result(r, true, CURRENT_FUNCTION, __LINE__, #r) 293 #define CHECK_LIBUSB_RESULT_EX(r,f,l,s) check_libusb_result(r, false, f, l, s) 295 #define CHECK_LIBUSB_RESULT_RETURN_EX(d,r) \ 296 { int res = d->CHECK_LIBUSB_RESULT(r); \ 297 if (res <= 0) return res; } 299 #define CHECK_LIBUSB_NEG_RESULT_RETURN_EX(d,r) \ 300 { int res = d->CHECK_LIBUSB_NEG_RESULT(r); \ 301 if (res < 0) return res; } 303 #define CHECK_LIBUSB_RESULT_RETURN(r) CHECK_LIBUSB_RESULT_RETURN_EX(this,r) 304 #define CHECK_LIBUSB_NEG_RESULT_RETURN(d,r) CHECK_LIBUSB_NEG_RESULT_RETURN_EX(this,r) 306 #define RTL2832_FIR_COEFF_COUNT 20 307 #define RTL2832_TUNER_NAME_LEN (32+1) 343 const char* name()
const;
346 int set_sample_rate(uint32_t samp_rate,
double* real_rate = NULL);
347 int set_if(
double frequency);
348 int read_samples(
unsigned char* buffer, uint32_t buffer_size,
int* bytes_read,
int timeout = -1);
352 int demod_write_reg(uint8_t page, uint16_t addr, uint16_t val, uint8_t len);
353 int demod_read_reg(uint8_t page, uint8_t addr, uint8_t len, uint16_t& reg);
354 int write_reg(uint8_t block, uint16_t addr, uint16_t val, uint8_t len);
355 int read_reg(uint8_t block, uint16_t addr, uint8_t len, uint16_t& reg);
356 int write_array(uint8_t block, uint16_t addr, uint8_t *array, uint8_t len);
357 int read_array(uint8_t block, uint16_t addr, uint8_t *array, uint8_t len);
359 int check_libusb_result(
int res,
bool zero_okay,
const char* function_name = NULL,
int line_number = -1,
const char* line = NULL);
360 void log(
const char* message, ...);
362 int set_i2c_repeater(
bool on =
true,
const char* function_name = NULL,
int line_number = -1,
const char* line = NULL);
363 int i2c_read(uint8_t i2c_addr, uint8_t *buffer,
int len);
364 int i2c_write(uint8_t i2c_addr, uint8_t *buffer,
int len);
365 int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val);
366 int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t& data);
368 int set_gpio_output(uint8_t gpio);
369 int set_gpio_bit(uint8_t gpio,
int val);
374 {
return m_sample_rate; }
376 {
return m_crystal_frequency; }
378 {
return m_sample_rate_range; }
384 USB_EPA_CFG = 0x2144,
385 USB_EPA_CTL = 0x2148,
386 USB_EPA_MAXPKT = 0x2158,
387 USB_EPA_MAXPKT_2 = 0x215a,
388 USB_EPA_FIFO_CFG = 0x2160,
402 DEMOD_CTL_1 = 0x300b,
418 #endif // INCLUDED_RTL2832 #define RTL2832_API
Definition: rtl2832.h:28
virtual void on_log_message_ex(int level, const char *msg,...)
Definition: rtl2832.h:117
Definition: rtl2832.h:131
const char * name
Definition: rtl2832.h:282
virtual int set_auto_gain_mode(bool on=true)
Definition: rtl2832.h:232
virtual int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val)=0
bool verbose
Definition: rtl2832.h:147
virtual void on_log_message_va(int level, const char *msg, va_list args)=0
virtual int set_i2c_repeater(bool on=true, const char *function_name=NULL, int line_number=-1, const char *line=NULL)=0
const tuner::PARAMS & params() const
Definition: rtl2832.h:253
virtual bool auto_gain_mode() const
Definition: rtl2832.h:250
std::pair< double, double > range_t
Definition: rtl2832.h:84
uint16_t pid
Definition: rtl2832.h:283
Definition: rtl2832.h:317
Definition: rtl2832.h:144
virtual range_t gain_range() const
Definition: rtl2832.h:235
Definition: rtl2832.h:103
tuner::PARAMS m_params
Definition: rtl2832.h:193
std::vector< double > values_t
Definition: rtl2832.h:85
#define RTL2832_TUNER_NAME_LEN
Definition: rtl2832.h:307
bool is_valid_range(const range_t &r)
Definition: rtl2832.h:91
bool m_libusb_init_done
Definition: rtl2832.h:335
bool verbose
Definition: rtl2832.h:321
int m_gain_mode
Definition: rtl2832.h:195
log_sink * message_output
Definition: rtl2832.h:146
virtual int set_frequency(double freq)
Definition: rtl2832.h:209
Definition: rtl2832.h:110
result_code
Definition: rtl2832.h:59
level
Definition: rtl2832.h:106
virtual void on_log_message(const char *msg,...)
Definition: rtl2832.h:115
RTL2832_API int get_map_index(int value, const int *map, int pair_count)
tuner *(* CreateTunerFn)(demod *p)
Definition: rtl2832.h:142
demod * parent() const
Definition: rtl2832.h:255
virtual values_t gain_values() const
Definition: rtl2832.h:237
gain_mode
Definition: rtl2832.h:149
virtual int set_gain(double gain)
Definition: rtl2832.h:213
struct RTL2832_NAMESPACE::device_info * PDEVICE_INFO
uint32_t max_rate
Definition: rtl2832.h:285
uint16_t vid
Definition: rtl2832.h:319
uint32_t crystal_frequency
Definition: rtl2832.h:285
virtual double bandwidth() const
Definition: rtl2832.h:226
i2c_repeater_scope(i2c_interface *p, const char *function_name=NULL, int line_number=-1, const char *line=NULL)
Definition: rtl2832.h:267
std::map< int, std::string > num_name_map_t
Definition: rtl2832.h:86
double m_gain
Definition: rtl2832.h:197
Definition: rtl2832.h:280
Definition: rtl2832.h:109
Definition: rtl2832.h:309
PDEVICE_INFO m_current_info
Definition: rtl2832.h:333
range_t sample_rate_range() const
Definition: rtl2832.h:377
Definition: rtl2832.h:186
uint32_t m_crystal_frequency
Definition: rtl2832.h:339
virtual int set_bandwidth(double bw)
Definition: rtl2832.h:211
int default_timeout
Definition: rtl2832.h:322
virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer, int len)=0
virtual int set_gain_mode(int mode)
Definition: rtl2832.h:215
virtual range_t frequency_range() const
Definition: rtl2832.h:239
Definition: rtl2832.h:137
virtual num_name_map_t gain_modes() const
Definition: rtl2832.h:246
range_t m_gain_range
Definition: rtl2832.h:199
virtual const char * name() const
Definition: rtl2832.h:207
bool in_valid_range(const range_t &r, double d)
Definition: rtl2832.h:97
virtual bool calc_appropriate_gain_mode(int &mode)
Definition: rtl2832.h:248
demod * m_demod
Definition: rtl2832.h:192
uint16_t pid
Definition: rtl2832.h:320
uint32_t crystal_frequency() const
Definition: rtl2832.h:375
Definition: rtl2832.h:108
PARAMS m_params
Definition: rtl2832.h:336
double m_bandwidth
Definition: rtl2832.h:198
virtual double gain() const
Definition: rtl2832.h:228
usb_reg
Definition: rtl2832.h:380
bool values_to_range(const values_t &v, range_t &r)
Definition: rtl2832.h:88
values_t m_gain_values
Definition: rtl2832.h:200
virtual const char * name() const =0
values_t m_bandwidth_values
Definition: rtl2832.h:203
bool m_tuner_was_active
Definition: rtl2832.h:340
tuner::PPARAMS tuner_params
Definition: rtl2832.h:327
double calc_range(const range_t &r)
Definition: rtl2832.h:100
tuner * active_tuner() const
Definition: rtl2832.h:371
range_t m_frequency_range
Definition: rtl2832.h:201
bool m_auto_gain_mode
Definition: rtl2832.h:194
virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer, int len)=0
tuner::CreateTunerFn factory
Definition: rtl2832.h:284
virtual range_t bandwidth_range() const
Definition: rtl2832.h:241
uint32_t min_rate
Definition: rtl2832.h:285
~i2c_repeater_scope()
Definition: rtl2832.h:273
bool in_range(const range_t &r, double d)
Definition: rtl2832.h:94
#define RTL2832_FIR_COEFF_COUNT
Definition: rtl2832.h:306
uint32_t crystal_frequency
Definition: rtl2832.h:328
virtual int gain_mode() const
Definition: rtl2832.h:230
num_name_map_t m_gain_modes
Definition: rtl2832.h:204
range_t m_bandwidth_range
Definition: rtl2832.h:202
tuner * m_tuner
Definition: rtl2832.h:334
Definition: rtl2832-tuner_e4000.h:6
RTL2832_API const char * libusb_result_to_string(int res)
virtual values_t bandwidth_values() const
Definition: rtl2832.h:243
double m_freq
Definition: rtl2832.h:196
blocks
Definition: rtl2832.h:405
Definition: rtl2832.h:259
struct libusb_device_handle * m_devh
Definition: rtl2832.h:332
uint16_t vid
Definition: rtl2832.h:283
sys_reg
Definition: rtl2832.h:390
virtual double frequency() const
Definition: rtl2832.h:224
double m_sample_rate
Definition: rtl2832.h:338
virtual int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t &data)=0
log_sink * message_output
Definition: rtl2832.h:323
range_t m_sample_rate_range
Definition: rtl2832.h:337
double sample_rate() const
Definition: rtl2832.h:373
Definition: rtl2832.h:121
uint32_t flags
Definition: rtl2832.h:285
struct RTL2832_NAMESPACE::device_info DEVICE_INFO
bool use_custom_fir_coefficients
Definition: rtl2832.h:324