aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/cores
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/cores')
-rw-r--r--host/lib/usrp/cores/gpio_core_200.hpp26
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_200.cpp1
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_3000.cpp21
-rw-r--r--host/lib/usrp/cores/rx_dsp_core_3000.hpp10
-rw-r--r--host/lib/usrp/cores/rx_frontend_core_200.cpp21
-rw-r--r--host/lib/usrp/cores/rx_frontend_core_200.hpp9
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_3000.cpp21
-rw-r--r--host/lib/usrp/cores/tx_dsp_core_3000.hpp8
-rw-r--r--host/lib/usrp/cores/tx_frontend_core_200.cpp16
-rw-r--r--host/lib/usrp/cores/tx_frontend_core_200.hpp8
10 files changed, 135 insertions, 6 deletions
diff --git a/host/lib/usrp/cores/gpio_core_200.hpp b/host/lib/usrp/cores/gpio_core_200.hpp
index 164437f40..e22834fd9 100644
--- a/host/lib/usrp/cores/gpio_core_200.hpp
+++ b/host/lib/usrp/cores/gpio_core_200.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2011,2014 Ettus Research LLC
+// Copyright 2011,2014,2015 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -20,10 +20,34 @@
#include <uhd/config.hpp>
#include <uhd/usrp/dboard_iface.hpp>
+#include <boost/assign.hpp>
#include <boost/cstdint.hpp>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
#include <uhd/types/wb_iface.hpp>
+#include <map>
+
+typedef enum {
+ GPIO_CTRL,
+ GPIO_DDR,
+ GPIO_OUT,
+ GPIO_ATR_0X,
+ GPIO_ATR_RX,
+ GPIO_ATR_TX,
+ GPIO_ATR_XX
+} gpio_attr_t;
+
+typedef std::map<gpio_attr_t,std::string> gpio_attr_map_t;
+static const gpio_attr_map_t gpio_attr_map =
+ boost::assign::map_list_of
+ (GPIO_CTRL, "CTRL")
+ (GPIO_DDR, "DDR")
+ (GPIO_OUT, "OUT")
+ (GPIO_ATR_0X, "ATR_0X")
+ (GPIO_ATR_RX, "ATR_RX")
+ (GPIO_ATR_TX, "ATR_TX")
+ (GPIO_ATR_XX, "ATR_XX")
+;
class gpio_core_200 : boost::noncopyable{
public:
diff --git a/host/lib/usrp/cores/rx_dsp_core_200.cpp b/host/lib/usrp/cores/rx_dsp_core_200.cpp
index 6a36e8fa1..b899085c0 100644
--- a/host/lib/usrp/cores/rx_dsp_core_200.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_200.cpp
@@ -295,6 +295,7 @@ public:
_iface->poke32(REG_RX_CTRL_FORMAT, format_word);
}
+
private:
wb_iface::sptr _iface;
const size_t _dsp_base, _ctrl_base;
diff --git a/host/lib/usrp/cores/rx_dsp_core_3000.cpp b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
index 8a131ffb4..18dabade0 100644
--- a/host/lib/usrp/cores/rx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/rx_dsp_core_3000.cpp
@@ -46,6 +46,9 @@ template <class T> T ceil_log2(T num){
using namespace uhd;
+const double rx_dsp_core_3000::DEFAULT_CORDIC_FREQ = 0.0;
+const double rx_dsp_core_3000::DEFAULT_RATE = 1e6;
+
rx_dsp_core_3000::~rx_dsp_core_3000(void){
/* NOP */
}
@@ -263,6 +266,24 @@ public:
this->update_scalar();
}
+ void populate_subtree(property_tree::sptr subtree)
+ {
+ subtree->create<meta_range_t>("rate/range")
+ .publish(boost::bind(&rx_dsp_core_3000::get_host_rates, this))
+ ;
+ subtree->create<double>("rate/value")
+ .set(DEFAULT_RATE)
+ .coerce(boost::bind(&rx_dsp_core_3000::set_host_rate, this, _1))
+ ;
+ subtree->create<double>("freq/value")
+ .set(DEFAULT_CORDIC_FREQ)
+ .coerce(boost::bind(&rx_dsp_core_3000::set_freq, this, _1))
+ ;
+ subtree->create<meta_range_t>("freq/range")
+ .publish(boost::bind(&rx_dsp_core_3000::get_freq_range, this))
+ ;
+ }
+
private:
wb_iface::sptr _iface;
const size_t _dsp_base;
diff --git a/host/lib/usrp/cores/rx_dsp_core_3000.hpp b/host/lib/usrp/cores/rx_dsp_core_3000.hpp
index 89059e953..65801de1d 100644
--- a/host/lib/usrp/cores/rx_dsp_core_3000.hpp
+++ b/host/lib/usrp/cores/rx_dsp_core_3000.hpp
@@ -21,14 +21,18 @@
#include <uhd/config.hpp>
#include <uhd/stream.hpp>
#include <uhd/types/ranges.hpp>
-#include <boost/utility.hpp>
-#include <boost/shared_ptr.hpp>
#include <uhd/types/stream_cmd.hpp>
#include <uhd/types/wb_iface.hpp>
+#include <uhd/property_tree.hpp>
+#include <boost/utility.hpp>
+#include <boost/shared_ptr.hpp>
#include <string>
class rx_dsp_core_3000 : boost::noncopyable{
public:
+ static const double DEFAULT_CORDIC_FREQ;
+ static const double DEFAULT_RATE;
+
typedef boost::shared_ptr<rx_dsp_core_3000> sptr;
virtual ~rx_dsp_core_3000(void) = 0;
@@ -56,6 +60,8 @@ public:
virtual double set_freq(const double freq) = 0;
virtual void setup(const uhd::stream_args_t &stream_args) = 0;
+
+ virtual void populate_subtree(uhd::property_tree::sptr subtree) = 0;
};
#endif /* INCLUDED_LIBUHD_USRP_RX_DSP_CORE_3000_HPP */
diff --git a/host/lib/usrp/cores/rx_frontend_core_200.cpp b/host/lib/usrp/cores/rx_frontend_core_200.cpp
index b73896b57..7ac920553 100644
--- a/host/lib/usrp/cores/rx_frontend_core_200.cpp
+++ b/host/lib/usrp/cores/rx_frontend_core_200.cpp
@@ -17,6 +17,7 @@
#include "rx_frontend_core_200.hpp"
#include <boost/math/special_functions/round.hpp>
+#include <boost/bind.hpp>
using namespace uhd;
@@ -38,6 +39,10 @@ rx_frontend_core_200::~rx_frontend_core_200(void){
/* NOP */
}
+const std::complex<double> rx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE = std::complex<double>(0.0, 0.0);
+const bool rx_frontend_core_200::DEFAULT_DC_OFFSET_ENABLE = true;
+const std::complex<double> rx_frontend_core_200::DEFAULT_IQ_BALANCE_VALUE = std::complex<double>(0.0, 0.0);
+
class rx_frontend_core_200_impl : public rx_frontend_core_200{
public:
rx_frontend_core_200_impl(wb_iface::sptr iface, const size_t base):
@@ -74,6 +79,22 @@ public:
_iface->poke32(REG_RX_FE_PHASE_CORRECTION, fs_to_bits(cor.imag(), 18));
}
+ void populate_subtree(uhd::property_tree::sptr subtree)
+ {
+ subtree->create<std::complex<double> >("dc_offset/value")
+ .set(DEFAULT_DC_OFFSET_VALUE)
+ .coerce(boost::bind(&rx_frontend_core_200::set_dc_offset, this, _1))
+ ;
+ subtree->create<bool>("dc_offset/enable")
+ .set(DEFAULT_DC_OFFSET_ENABLE)
+ .subscribe(boost::bind(&rx_frontend_core_200::set_dc_offset_auto, this, _1))
+ ;
+ subtree->create<std::complex<double> >("iq_balance/value")
+ .set(DEFAULT_IQ_BALANCE_VALUE)
+ .subscribe(boost::bind(&rx_frontend_core_200::set_iq_balance, this, _1))
+ ;
+ }
+
private:
boost::int32_t _i_dc_off, _q_dc_off;
wb_iface::sptr _iface;
diff --git a/host/lib/usrp/cores/rx_frontend_core_200.hpp b/host/lib/usrp/cores/rx_frontend_core_200.hpp
index 9b18e2089..32ce77e00 100644
--- a/host/lib/usrp/cores/rx_frontend_core_200.hpp
+++ b/host/lib/usrp/cores/rx_frontend_core_200.hpp
@@ -19,14 +19,19 @@
#define INCLUDED_LIBUHD_USRP_TX_FRONTEND_CORE_200_HPP
#include <uhd/config.hpp>
+#include <uhd/types/wb_iface.hpp>
+#include <uhd/property_tree.hpp>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
-#include <uhd/types/wb_iface.hpp>
#include <complex>
#include <string>
class rx_frontend_core_200 : boost::noncopyable{
public:
+ static const std::complex<double> DEFAULT_DC_OFFSET_VALUE;
+ static const bool DEFAULT_DC_OFFSET_ENABLE;
+ static const std::complex<double> DEFAULT_IQ_BALANCE_VALUE;
+
typedef boost::shared_ptr<rx_frontend_core_200> sptr;
virtual ~rx_frontend_core_200(void) = 0;
@@ -41,6 +46,8 @@ public:
virtual void set_iq_balance(const std::complex<double> &cor) = 0;
+ virtual void populate_subtree(uhd::property_tree::sptr subtree) = 0;
+
};
#endif /* INCLUDED_LIBUHD_USRP_TX_FRONTEND_CORE_200_HPP */
diff --git a/host/lib/usrp/cores/tx_dsp_core_3000.cpp b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
index 736205402..93b70435f 100644
--- a/host/lib/usrp/cores/tx_dsp_core_3000.cpp
+++ b/host/lib/usrp/cores/tx_dsp_core_3000.cpp
@@ -37,6 +37,9 @@ template <class T> T ceil_log2(T num){
using namespace uhd;
+const double tx_dsp_core_3000::DEFAULT_CORDIC_FREQ = 0.0;
+const double tx_dsp_core_3000::DEFAULT_RATE = 1e6;
+
tx_dsp_core_3000::~tx_dsp_core_3000(void){
/* NOP */
}
@@ -200,6 +203,24 @@ public:
this->update_scalar();
}
+ void populate_subtree(property_tree::sptr subtree)
+ {
+ subtree->create<meta_range_t>("rate/range")
+ .publish(boost::bind(&tx_dsp_core_3000::get_host_rates, this))
+ ;
+ subtree->create<double>("rate/value")
+ .set(DEFAULT_RATE)
+ .coerce(boost::bind(&tx_dsp_core_3000::set_host_rate, this, _1))
+ ;
+ subtree->create<double>("freq/value")
+ .set(DEFAULT_CORDIC_FREQ)
+ .coerce(boost::bind(&tx_dsp_core_3000::set_freq, this, _1))
+ ;
+ subtree->create<meta_range_t>("freq/range")
+ .publish(boost::bind(&tx_dsp_core_3000::get_freq_range, this))
+ ;
+ }
+
private:
wb_iface::sptr _iface;
const size_t _dsp_base;
diff --git a/host/lib/usrp/cores/tx_dsp_core_3000.hpp b/host/lib/usrp/cores/tx_dsp_core_3000.hpp
index a51cb2803..fbc43add6 100644
--- a/host/lib/usrp/cores/tx_dsp_core_3000.hpp
+++ b/host/lib/usrp/cores/tx_dsp_core_3000.hpp
@@ -21,12 +21,16 @@
#include <uhd/config.hpp>
#include <uhd/stream.hpp>
#include <uhd/types/ranges.hpp>
+#include <uhd/types/wb_iface.hpp>
+#include <uhd/property_tree.hpp>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
-#include <uhd/types/wb_iface.hpp>
class tx_dsp_core_3000 : boost::noncopyable{
public:
+ static const double DEFAULT_CORDIC_FREQ;
+ static const double DEFAULT_RATE;
+
typedef boost::shared_ptr<tx_dsp_core_3000> sptr;
virtual ~tx_dsp_core_3000(void) = 0;
@@ -51,6 +55,8 @@ public:
virtual double set_freq(const double freq) = 0;
virtual void setup(const uhd::stream_args_t &stream_args) = 0;
+
+ virtual void populate_subtree(uhd::property_tree::sptr subtree) = 0;
};
#endif /* INCLUDED_LIBUHD_USRP_TX_DSP_CORE_3000_HPP */
diff --git a/host/lib/usrp/cores/tx_frontend_core_200.cpp b/host/lib/usrp/cores/tx_frontend_core_200.cpp
index 7000f46bd..0fa028571 100644
--- a/host/lib/usrp/cores/tx_frontend_core_200.cpp
+++ b/host/lib/usrp/cores/tx_frontend_core_200.cpp
@@ -20,6 +20,7 @@
#include <uhd/exception.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/math/special_functions/round.hpp>
+#include <boost/bind.hpp>
using namespace uhd;
@@ -29,6 +30,9 @@ using namespace uhd;
#define REG_TX_FE_PHASE_CORRECTION _base + 12 //18 bits
#define REG_TX_FE_MUX _base + 16 //8 bits (std output = 0x10, reversed = 0x01)
+const std::complex<double> tx_frontend_core_200::DEFAULT_DC_OFFSET_VALUE = std::complex<double>(0.0, 0.0);
+const std::complex<double> tx_frontend_core_200::DEFAULT_IQ_BALANCE_VALUE = std::complex<double>(0.0, 0.0);
+
static boost::uint32_t fs_to_bits(const double num, const size_t bits){
return boost::int32_t(boost::math::round(num * (1 << (bits-1))));
}
@@ -71,6 +75,18 @@ public:
_iface->poke32(REG_TX_FE_PHASE_CORRECTION, fs_to_bits(cor.imag(), 18));
}
+ void populate_subtree(uhd::property_tree::sptr subtree)
+ {
+ subtree->create< std::complex<double> >("dc_offset/value")
+ .set(DEFAULT_DC_OFFSET_VALUE)
+ .coerce(boost::bind(&tx_frontend_core_200::set_dc_offset, this, _1))
+ ;
+ subtree->create< std::complex<double> >("iq_balance/value")
+ .set(DEFAULT_IQ_BALANCE_VALUE)
+ .subscribe(boost::bind(&tx_frontend_core_200::set_iq_balance, this, _1))
+ ;
+ }
+
private:
wb_iface::sptr _iface;
const size_t _base;
diff --git a/host/lib/usrp/cores/tx_frontend_core_200.hpp b/host/lib/usrp/cores/tx_frontend_core_200.hpp
index 0b89ea818..912256329 100644
--- a/host/lib/usrp/cores/tx_frontend_core_200.hpp
+++ b/host/lib/usrp/cores/tx_frontend_core_200.hpp
@@ -19,9 +19,10 @@
#define INCLUDED_LIBUHD_USRP_RX_FRONTEND_CORE_200_HPP
#include <uhd/config.hpp>
+#include <uhd/types/wb_iface.hpp>
+#include <uhd/property_tree.hpp>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
-#include <uhd/types/wb_iface.hpp>
#include <complex>
#include <string>
@@ -29,6 +30,9 @@ class tx_frontend_core_200 : boost::noncopyable{
public:
typedef boost::shared_ptr<tx_frontend_core_200> sptr;
+ static const std::complex<double> DEFAULT_DC_OFFSET_VALUE;
+ static const std::complex<double> DEFAULT_IQ_BALANCE_VALUE;
+
virtual ~tx_frontend_core_200(void) = 0;
static sptr make(uhd::wb_iface::sptr iface, const size_t base);
@@ -39,6 +43,8 @@ public:
virtual void set_iq_balance(const std::complex<double> &cor) = 0;
+ virtual void populate_subtree(uhd::property_tree::sptr subtree) = 0;
+
};
#endif /* INCLUDED_LIBUHD_USRP_RX_FRONTEND_CORE_200_HPP */