gr-baz Package
rtl2832.h
Go to the documentation of this file.
1#ifndef INCLUDED_RTL2832
2#define INCLUDED_RTL2832
3
4#include <stdio.h>
5#include <stdarg.h>
6
7#ifdef LIBUSB_FOUND
8#include <libusb-1.0/libusb.h>
9#else
10#include <libusb/libusb.h> // libusbx on Windows
11#endif // LIBUSB_FOUND
12
13#ifdef _WIN32
14
15#ifdef RTL2832_EXPORTS
16#define RTL2832_API __declspec(dllexport)
17#else
18#define RTL2832_API __declspec(dllimport)
19#endif
20
21// 'libusb.h' offers uint8_t & uint16_t
22typedef __int8 int8_t;
23typedef unsigned int uint32_t;
24typedef unsigned __int64 uint64_t;
25
26#else
27
28#define RTL2832_API
29#define RTL2832_TEMPLATE
30
31#endif // _WIN32
32
33#include <vector>
34#include <map>
35#include <string>
36
37RTL2832_API extern int get_map_index(int value, const int* map, int pair_count);
38RTL2832_API extern const char* libusb_result_to_string(int res);
39
40#ifdef _WIN32
41#define CURRENT_FUNCTION __FUNCTION__
42#else
43#define CURRENT_FUNCTION __PRETTY_FUNCTION__
44#endif // _WIN32
45
46// Swap following comments to disable I2C reporting
47//#define DEBUG_TUNER_I2C(t,r) // This is empty on purpose
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);
51
52#define RTL2832_NAMESPACE rtl2832
53
54namespace RTL2832_NAMESPACE
55{
56
57class demod;
58
60{
61 // < 0: libusb result code
63 SUCCESS = 1 // > 0 also # bytes transferred
64};
65
66#define TUNERS_NAMESPACE tuners
67
68#define TUNER_FACTORY_FN_NAME Factory
69#define TUNER_PROBE_FN_NAME Probe
70#define DECLARE_TUNER_FACTORY() \
71 public: \
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) \
78 public: \
79 static tuner* TUNER_FACTORY_FN_NAME(demod* p) \
80 { return new class_name(p); } \
81 static int TUNER_PROBE_FN_NAME(demod* d);
82
83// _WIN32: DLL WARNING! These will cause C4251, but only 'vector' can be exported as a DLL interface. You must have exactly the same STL headers in your importing files, otherwise your app will crash. Solution is to recompile this library with your own STL headers.
84typedef std::pair<double,double> range_t;
85typedef std::vector<double> values_t;
86typedef std::map<int,std::string> num_name_map_t;
87
88inline bool values_to_range(const values_t& v, range_t& r)
89{ if (v.empty()) return false; r = std::make_pair(v[0], v[v.size() - 1]); return true; }
90
91inline bool is_valid_range(const range_t& r)
92{ return !(r.first == r.second); }
93
94inline bool in_range(const range_t& r, double d)
95{ return !((d < r.first) || (d > r.second)); }
96
97inline bool in_valid_range(const range_t& r, double d) // If invalid range, return 'true'
98{ return ((is_valid_range(r) == false) || (in_range(r, d))); }
99
100inline double calc_range(const range_t& r)
101{ return (r.second - r.first); }
102
104{
105public:
106 enum level
107 {
108 LOG_LEVEL_ERROR = -1, // Negative: more serious
110 LOG_LEVEL_VERBOSE = 1, // Positive: more verbose
111 };
112public:
113 virtual void on_log_message_va(int level, const char* msg, va_list args)=0;
114public:
115 inline virtual void on_log_message(const char* msg, ...)
116 { va_list args; va_start(args, msg); on_log_message_va(LOG_LEVEL_DEFAULT, msg, args); }
117 inline virtual void on_log_message_ex(int level, const char* msg, ...)
118 { va_list args; va_start(args, msg); on_log_message_va(level, msg, args); }
119};
120
122{
123public:
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;
129};
130
132{
133public:
134 virtual const char* name() const=0;
135};
136
138{
139public:
140 virtual ~tuner();
141public:
142 typedef tuner* (*CreateTunerFn)(demod* p);
143 typedef int (*ProbeTunerFn)(demod* p);
144 typedef struct params
145 {
148 } PARAMS, *PPARAMS;
150 NOT_SUPPORTED = -1,
151 DEFAULT = 0,
152 // Specific values > 0 & internal to tuner implementations
153 };
154public:
155 virtual int initialise(PPARAMS params = NULL)=0;
156 //virtual const char* name()=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;
162public:
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;
166public:
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;
171public:
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;
177public:
178 virtual num_name_map_t gain_modes() const=0;
179 virtual bool calc_appropriate_gain_mode(int& mode)/* const*/=0;
180 virtual bool auto_gain_mode() const=0;
181public:
182 virtual const PARAMS& params() const=0;
183 virtual demod* parent() const=0;
184};
185
187{
188public:
191protected:
196 double m_freq;
197 double m_gain;
205public:
206 virtual int initialise(tuner::PPARAMS params = NULL);
207 virtual const char* name() const
208 { return "(dummy)"; }
209 virtual int set_frequency(double freq)
210 { return SUCCESS; }
211 virtual int set_bandwidth(double bw)
212 { return SUCCESS; }
213 virtual int set_gain(double gain)
214 { return SUCCESS; }
215 virtual int set_gain_mode(int mode)
216 { return SUCCESS; }
217public:
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);
223public:
224 virtual double frequency() const
225 { return m_freq; }
226 virtual double bandwidth() const
227 { return m_bandwidth; }
228 virtual double gain() const
229 { return m_gain; }
230 virtual int gain_mode() const
231 { return m_gain_mode; }
232 virtual int set_auto_gain_mode(bool on = true)
233 { m_auto_gain_mode = on; return SUCCESS; }
234public:
235 virtual range_t gain_range() const
236 { return m_gain_range; }
237 virtual values_t gain_values() const
238 { return m_gain_values; }
239 virtual range_t frequency_range() const
240 { return m_frequency_range; }
241 virtual range_t bandwidth_range() const
242 { return m_bandwidth_range; }
244 { return m_bandwidth_values; }
245public:
247 { return m_gain_modes; }
248 virtual bool calc_appropriate_gain_mode(int& mode)/* const*/
249 { mode = m_gain_mode; return true; }
250 virtual bool auto_gain_mode() const
251 { return m_auto_gain_mode; }
252public:
253 const tuner::PARAMS& params() const
254 { return m_params; }
255 demod* parent() const
256 { return m_demod; }
257};
258
260{
261private:
262 i2c_interface* m_p;
263 const char* m_function_name;
264 int m_line_number;
265 const char* m_line;
266public:
267 i2c_repeater_scope(i2c_interface* p, const char* function_name = NULL, int line_number = -1, const char* line = NULL)
268 : m_p(p)
269 , m_function_name(function_name)
270 , m_line_number(line_number)
271 , m_line(line)
272 { p->set_i2c_repeater(true, function_name, line_number, line); }
274 { m_p->set_i2c_repeater(false, m_function_name, m_line_number, m_line); }
275};
276
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)
279
280typedef struct device_info
281{
282 const char* name;
283 uint16_t vid, pid;
284 tuner::CreateTunerFn factory;
286} DEVICE_INFO, *PDEVICE_INFO;
287
288//#define CHECK_LIBUSB_RESULT(r) (r)
289//#define CHECK_LIBUSB_NEG_RESULT(r) (r)
290//#define CHECK_LIBUSB_RESULT_EX(r,f,l,s) (r)
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)
294
295#define CHECK_LIBUSB_RESULT_RETURN_EX(d,r) \
296 { int res = d->CHECK_LIBUSB_RESULT(r); \
297 if (res <= 0) return res; }
298
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; }
302
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)
305
306#define RTL2832_FIR_COEFF_COUNT 20
307#define RTL2832_TUNER_NAME_LEN (32+1)
308
310{
311public:
313 virtual ~demod();
314public:
315 //static const int FIR_COEFF_COUNT = 20;
316 //static const int TUNER_NAME_LEN = 32+1;
317 typedef struct params
318 {
319 uint16_t vid;
320 uint16_t pid;
322 int default_timeout; // 0: use default, -1: poll only
325 uint8_t fir_coeff[RTL2832_FIR_COEFF_COUNT];
326 //bool use_tuner_params; // Use if valid tuner::PPARAMS pointer
329 char tuner_name[RTL2832_TUNER_NAME_LEN];
330 } PARAMS, *PPARAMS;
331protected:
332 struct libusb_device_handle *m_devh;
340 bool m_tuner_was_active; // True if the kernel driver was detached
341public:
343 const char* name() const;
344 void destroy();
345 int reset();
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);
349protected:
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);
358public:
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, ...);
361public:
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);
367public:
368 int set_gpio_output(uint8_t gpio);
369 int set_gpio_bit(uint8_t gpio, int val);
370public:
371 inline tuner* active_tuner() const
372 { return m_tuner; }
373 inline double sample_rate() const
374 { return m_sample_rate; }
375 inline uint32_t crystal_frequency() const
376 { return m_crystal_frequency; }
378 { return m_sample_rate_range; }
379protected:
380 enum usb_reg {
381 USB_SYSCTL = 0x2000,
382 USB_CTRL = 0x2010,
383 USB_STAT = 0x2014,
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,
389 };
390 enum sys_reg {
391 DEMOD_CTL = 0x3000,
392 GPO = 0x3001,
393 GPI = 0x3002,
394 GPOE = 0x3003,
395 GPD = 0x3004,
396 SYSINTE = 0x3005,
397 SYSINTS = 0x3006,
398 GP_CFG0 = 0x3007,
399 GP_CFG1 = 0x3008,
400 SYSINTE_1 = 0x3009,
401 SYSINTS_1 = 0x300a,
402 DEMOD_CTL_1 = 0x300b,
403 IR_SUSPEND = 0x300c,
404 };
405 enum blocks {
406 DEMODB = 0,
407 USBB = 1,
408 SYSB = 2,
409 TUNB = 3,
410 ROMB = 4,
411 IRB = 5,
412 IICB = 6,
413 };
414};
415
416}
417
418#endif // INCLUDED_RTL2832
Definition rtl2832.h:310
double sample_rate() const
Definition rtl2832.h:373
uint32_t crystal_frequency() const
Definition rtl2832.h:375
int i2c_read(uint8_t i2c_addr, uint8_t *buffer, int len)
tuner * active_tuner() const
Definition rtl2832.h:371
tuner * m_dummy_tuner
Definition rtl2832.h:334
int i2c_write(uint8_t i2c_addr, uint8_t *buffer, int len)
bool m_libusb_init_done
Definition rtl2832.h:335
int check_libusb_result(int res, bool zero_okay, const char *function_name=NULL, int line_number=-1, const char *line=NULL)
range_t sample_rate_range() const
Definition rtl2832.h:377
int write_reg(uint8_t block, uint16_t addr, uint16_t val, uint8_t len)
int read_array(uint8_t block, uint16_t addr, uint8_t *array, uint8_t len)
int demod_write_reg(uint8_t page, uint16_t addr, uint16_t val, uint8_t len)
sys_reg
Definition rtl2832.h:390
int set_if(double frequency)
range_t m_sample_rate_range
Definition rtl2832.h:337
blocks
Definition rtl2832.h:405
struct libusb_device_handle * m_devh
Definition rtl2832.h:332
int read_reg(uint8_t block, uint16_t addr, uint8_t len, uint16_t &reg)
usb_reg
Definition rtl2832.h:380
struct RTL2832_NAMESPACE::demod::params PARAMS
struct RTL2832_NAMESPACE::demod::params * PPARAMS
double m_sample_rate
Definition rtl2832.h:338
bool m_tuner_was_active
Definition rtl2832.h:340
int initialise(PPARAMS params=NULL)
int set_gpio_bit(uint8_t gpio, int val)
int set_i2c_repeater(bool on=true, const char *function_name=NULL, int line_number=-1, const char *line=NULL)
PDEVICE_INFO m_current_info
Definition rtl2832.h:333
int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t &data)
int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val)
int demod_read_reg(uint8_t page, uint8_t addr, uint8_t len, uint16_t &reg)
int set_sample_rate(uint32_t samp_rate, double *real_rate=NULL)
int set_gpio_output(uint8_t gpio)
PARAMS m_params
Definition rtl2832.h:336
const char * name() const
void log(const char *message,...)
uint32_t m_crystal_frequency
Definition rtl2832.h:339
int read_samples(unsigned char *buffer, uint32_t buffer_size, int *bytes_read, int timeout=-1)
int write_array(uint8_t block, uint16_t addr, uint8_t *array, uint8_t len)
Definition rtl2832.h:122
virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer, int len)=0
virtual int set_i2c_repeater(bool on=true, const char *function_name=NULL, int line_number=-1, const char *line=NULL)=0
virtual int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val)=0
virtual int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t &data)=0
virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer, int len)=0
i2c_repeater_scope(i2c_interface *p, const char *function_name=NULL, int line_number=-1, const char *line=NULL)
Definition rtl2832.h:267
~i2c_repeater_scope()
Definition rtl2832.h:273
Definition rtl2832.h:104
level
Definition rtl2832.h:107
@ LOG_LEVEL_ERROR
Definition rtl2832.h:108
@ LOG_LEVEL_DEFAULT
Definition rtl2832.h:109
@ LOG_LEVEL_VERBOSE
Definition rtl2832.h:110
virtual void on_log_message_va(int level, const char *msg, va_list args)=0
virtual void on_log_message(const char *msg,...)
Definition rtl2832.h:115
virtual void on_log_message_ex(int level, const char *msg,...)
Definition rtl2832.h:117
Definition rtl2832.h:132
virtual const char * name() const =0
Definition rtl2832.h:187
virtual range_t bandwidth_range() const
Definition rtl2832.h:241
values_t m_gain_values
Definition rtl2832.h:200
double m_bandwidth
Definition rtl2832.h:198
virtual int initialise(tuner::PPARAMS params=NULL)
virtual int gain_mode() const
Definition rtl2832.h:230
bool m_auto_gain_mode
Definition rtl2832.h:194
range_t m_gain_range
Definition rtl2832.h:199
virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer, int len)
const tuner::PARAMS & params() const
Definition rtl2832.h:253
virtual int set_frequency(double freq)
Definition rtl2832.h:209
virtual const char * name() const
Definition rtl2832.h:207
virtual double bandwidth() const
Definition rtl2832.h:226
values_t m_bandwidth_values
Definition rtl2832.h:203
virtual values_t bandwidth_values() const
Definition rtl2832.h:243
tuner::PARAMS m_params
Definition rtl2832.h:193
virtual bool calc_appropriate_gain_mode(int &mode)
Definition rtl2832.h:248
range_t m_bandwidth_range
Definition rtl2832.h:202
double m_freq
Definition rtl2832.h:196
int m_gain_mode
Definition rtl2832.h:195
virtual double frequency() const
Definition rtl2832.h:224
virtual int i2c_read_reg(uint8_t i2c_addr, uint8_t reg, uint8_t &data)
virtual range_t gain_range() const
Definition rtl2832.h:235
double m_gain
Definition rtl2832.h:197
virtual int set_bandwidth(double bw)
Definition rtl2832.h:211
virtual int i2c_write_reg(uint8_t i2c_addr, uint8_t reg, uint8_t val)
demod * m_demod
Definition rtl2832.h:192
virtual bool auto_gain_mode() const
Definition rtl2832.h:250
virtual int set_auto_gain_mode(bool on=true)
Definition rtl2832.h:232
virtual int set_gain_mode(int mode)
Definition rtl2832.h:215
virtual values_t gain_values() const
Definition rtl2832.h:237
virtual double gain() const
Definition rtl2832.h:228
demod * parent() const
Definition rtl2832.h:255
virtual num_name_map_t gain_modes() const
Definition rtl2832.h:246
virtual range_t frequency_range() const
Definition rtl2832.h:239
num_name_map_t m_gain_modes
Definition rtl2832.h:204
virtual int set_gain(double gain)
Definition rtl2832.h:213
virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer, int len)
range_t m_frequency_range
Definition rtl2832.h:201
virtual int set_i2c_repeater(bool on=true, const char *function_name=NULL, int line_number=-1, const char *line=NULL)
Definition rtl2832.h:138
virtual demod * parent() const =0
virtual int initialise(PPARAMS params=NULL)=0
struct RTL2832_NAMESPACE::tuner::params * PPARAMS
virtual int set_auto_gain_mode(bool on=true)=0
virtual range_t gain_range() const =0
virtual bool calc_appropriate_gain_mode(int &mode)=0
virtual values_t bandwidth_values() const =0
virtual double gain() const =0
virtual bool auto_gain_mode() const =0
virtual range_t frequency_range() const =0
virtual int gain_mode() const =0
virtual int i2c_write(uint8_t i2c_addr, uint8_t *buffer, int len)=0
virtual const PARAMS & params() const =0
virtual int set_i2c_repeater(bool on=true, const char *function_name=NULL, int line_number=-1, const char *line=NULL)=0
virtual int set_gain(double gain)=0
virtual range_t bandwidth_range() const =0
virtual int set_frequency(double freq)=0
virtual int set_bandwidth(double bw)=0
virtual num_name_map_t gain_modes() const =0
virtual int set_gain_mode(int mode)=0
gain_mode
Definition rtl2832.h:149
virtual values_t gain_values() const =0
virtual double frequency() const =0
struct RTL2832_NAMESPACE::tuner::params PARAMS
virtual int i2c_read(uint8_t i2c_addr, uint8_t *buffer, int len)=0
virtual double bandwidth() const =0
Definition rtl2832-tuner_e4000.h:6
bool in_range(const range_t &r, double d)
Definition rtl2832.h:94
bool in_valid_range(const range_t &r, double d)
Definition rtl2832.h:97
std::pair< double, double > range_t
Definition rtl2832.h:84
bool is_valid_range(const range_t &r)
Definition rtl2832.h:91
struct RTL2832_NAMESPACE::device_info * PDEVICE_INFO
result_code
Definition rtl2832.h:60
@ FAILURE
Definition rtl2832.h:62
@ SUCCESS
Definition rtl2832.h:63
std::map< int, std::string > num_name_map_t
Definition rtl2832.h:86
bool values_to_range(const values_t &v, range_t &r)
Definition rtl2832.h:88
std::vector< double > values_t
Definition rtl2832.h:85
double calc_range(const range_t &r)
Definition rtl2832.h:100
RTL2832_API int get_map_index(int value, const int *map, int pair_count)
#define RTL2832_API
Definition rtl2832.h:28
#define RTL2832_TUNER_NAME_LEN
Definition rtl2832.h:307
#define RTL2832_FIR_COEFF_COUNT
Definition rtl2832.h:306
RTL2832_API const char * libusb_result_to_string(int res)
Definition rtl2832.h:318
uint16_t vid
Definition rtl2832.h:319
uint32_t crystal_frequency
Definition rtl2832.h:328
bool use_custom_fir_coefficients
Definition rtl2832.h:324
bool verbose
Definition rtl2832.h:321
uint16_t pid
Definition rtl2832.h:320
int default_timeout
Definition rtl2832.h:322
log_sink * message_output
Definition rtl2832.h:323
tuner::PPARAMS tuner_params
Definition rtl2832.h:327
Definition rtl2832.h:281
uint32_t max_rate
Definition rtl2832.h:285
uint16_t vid
Definition rtl2832.h:283
uint32_t crystal_frequency
Definition rtl2832.h:285
uint32_t flags
Definition rtl2832.h:285
tuner::CreateTunerFn factory
Definition rtl2832.h:284
const char * name
Definition rtl2832.h:282
uint16_t pid
Definition rtl2832.h:283
uint32_t min_rate
Definition rtl2832.h:285
Definition rtl2832.h:145
bool verbose
Definition rtl2832.h:147
log_sink * message_output
Definition rtl2832.h:146