aboutsummaryrefslogtreecommitdiffstats
path: root/lib/source_impl.cc
diff options
context:
space:
mode:
authorDimitri Stolnikov <horiz0n@gmx.net>2013-06-09 20:19:17 +0200
committerDimitri Stolnikov <horiz0n@gmx.net>2013-06-09 20:19:17 +0200
commit02f38ca90813582607f6ba790a5800817cd288ae (patch)
treec554431b01b1747f0224de3cca6e3d7b1dee8903 /lib/source_impl.cc
parent656a9a014f5dd6d27f3f3c0a7a4bbee616485969 (diff)
uhd: implement dc correction
Diffstat (limited to 'lib/source_impl.cc')
-rw-r--r--lib/source_impl.cc38
1 files changed, 33 insertions, 5 deletions
diff --git a/lib/source_impl.cc b/lib/source_impl.cc
index 224c929..3ffc890 100644
--- a/lib/source_impl.cc
+++ b/lib/source_impl.cc
@@ -612,10 +612,28 @@ std::string source_impl::get_antenna( size_t chan )
return "";
}
+void source_impl::set_dc_offset_mode( int mode, size_t chan )
+{
+ size_t channel = 0;
+ BOOST_FOREACH( source_iface *dev, _devs )
+ for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++)
+ if ( chan == channel++ )
+ return dev->set_dc_offset_mode( mode, dev_chan );
+}
+
+void source_impl::set_dc_offset( const std::complex<double> &offset, size_t chan )
+{
+ size_t channel = 0;
+ BOOST_FOREACH( source_iface *dev, _devs )
+ for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++)
+ if ( chan == channel++ )
+ return dev->set_dc_offset( offset, dev_chan );
+}
+
void source_impl::set_iq_balance_mode( int mode, size_t chan )
{
-#ifdef HAVE_IQBALANCE
size_t channel = 0;
+#ifdef HAVE_IQBALANCE
BOOST_FOREACH( source_iface *dev, _devs ) {
for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++) {
if ( chan == channel++ ) {
@@ -645,13 +663,18 @@ void source_impl::set_iq_balance_mode( int mode, size_t chan )
}
}
}
+#else
+ BOOST_FOREACH( source_iface *dev, _devs )
+ for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++)
+ if ( chan == channel++ )
+ return dev->set_iq_balance_mode( mode, dev_chan );
#endif
}
-void source_impl::set_iq_balance( const std::complex<double> &correction, size_t chan )
+void source_impl::set_iq_balance( const std::complex<double> &balance, size_t chan )
{
-#ifdef HAVE_IQBALANCE
size_t channel = 0;
+#ifdef HAVE_IQBALANCE
BOOST_FOREACH( source_iface *dev, _devs ) {
for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++) {
if ( chan == channel++ ) {
@@ -660,13 +683,18 @@ void source_impl::set_iq_balance( const std::complex<double> &correction, size_t
gr::iqbalance::fix_cc *fix = _iq_fix[chan];
if ( opt->period() == 0 ) { /* automatic optimization desabled */
- fix->set_mag( correction.real() );
- fix->set_phase( correction.imag() );
+ fix->set_mag( balance.real() );
+ fix->set_phase( balance.imag() );
}
}
}
}
}
+#else
+ BOOST_FOREACH( source_iface *dev, _devs )
+ for (size_t dev_chan = 0; dev_chan < dev->get_num_channels(); dev_chan++)
+ if ( chan == channel++ )
+ return dev->set_iq_balance( balance, dev_chan );
#endif
}