1#ifndef INCLUDED_RTL2832
2#define INCLUDED_RTL2832
8#include <libusb-1.0/libusb.h>
10#include <libusb/libusb.h>
16#define RTL2832_API __declspec(dllexport)
18#define RTL2832_API __declspec(dllimport)
23typedef unsigned int uint32_t;
24typedef 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;
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);
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;
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);
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)
348 int read_samples(
unsigned char* buffer, uint32_t buffer_size,
int* bytes_read,
int timeout = -1);
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);
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,
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 ®)
usb_reg
Definition: rtl2832.h:380
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 ®)
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
Definition: rtl2832.h:260
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 ~tuner_skeleton()
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
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
tuner *(* CreateTunerFn)(demod *p)
Definition: rtl2832.h:142
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
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 DEVICE_INFO
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