aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/dboard/db_basic_and_lf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp/dboard/db_basic_and_lf.cpp')
-rw-r--r--host/lib/usrp/dboard/db_basic_and_lf.cpp229
1 files changed, 113 insertions, 116 deletions
diff --git a/host/lib/usrp/dboard/db_basic_and_lf.cpp b/host/lib/usrp/dboard/db_basic_and_lf.cpp
index 81a7aa534..5e8ac310e 100644
--- a/host/lib/usrp/dboard/db_basic_and_lf.cpp
+++ b/host/lib/usrp/dboard/db_basic_and_lf.cpp
@@ -7,11 +7,11 @@
#include <uhd/types/dict.hpp>
#include <uhd/types/ranges.hpp>
-#include <uhd/utils/assert_has.hpp>
-#include <uhd/utils/static.hpp>
-#include <uhd/utils/log.hpp>
#include <uhd/usrp/dboard_base.hpp>
#include <uhd/usrp/dboard_manager.hpp>
+#include <uhd/utils/assert_has.hpp>
+#include <uhd/utils/log.hpp>
+#include <uhd/utils/static.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
@@ -22,37 +22,29 @@ using namespace uhd::usrp;
* Constants
**********************************************************************/
namespace {
- constexpr uint32_t BASIC_TX_PID = 0x0000;
- constexpr uint32_t BASIC_RX_PID = 0x0001;
- constexpr uint32_t LF_TX_PID = 0x000E;
- constexpr uint32_t LF_RX_PID = 0x000F;
-
- constexpr double BASIC_MAX_BANDWIDTH = 250e6; // Hz
- constexpr double LF_MAX_BANDWIDTH = 32e6; // Hz
-
-
- const std::map<std::string, double> subdev_bandwidth_scalar{
- {"A", 1.0},
- {"B", 1.0},
- {"AB", 2.0},
- {"BA", 2.0}
- };
-
- const uhd::dict<std::string, std::string> sd_name_to_conn =
- boost::assign::map_list_of
- ("AB", "IQ")
- ("BA", "QI")
- ("A", "I")
- ("B", "Q")
- ;
-}
+constexpr uint32_t BASIC_TX_PID = 0x0000;
+constexpr uint32_t BASIC_RX_PID = 0x0001;
+constexpr uint32_t LF_TX_PID = 0x000E;
+constexpr uint32_t LF_RX_PID = 0x000F;
+
+constexpr double BASIC_MAX_BANDWIDTH = 250e6; // Hz
+constexpr double LF_MAX_BANDWIDTH = 32e6; // Hz
+
+
+const std::map<std::string, double> subdev_bandwidth_scalar{
+ {"A", 1.0}, {"B", 1.0}, {"AB", 2.0}, {"BA", 2.0}};
+
+const uhd::dict<std::string, std::string> sd_name_to_conn =
+ boost::assign::map_list_of("AB", "IQ")("BA", "QI")("A", "I")("B", "Q");
+} // namespace
/***********************************************************************
* The basic and lf boards:
* They share a common class because only the frequency bounds differ.
**********************************************************************/
-class basic_rx : public rx_dboard_base{
+class basic_rx : public rx_dboard_base
+{
public:
basic_rx(ctor_args_t args, double max_freq);
virtual ~basic_rx(void);
@@ -63,7 +55,8 @@ private:
double _max_freq;
};
-class basic_tx : public tx_dboard_base{
+class basic_tx : public tx_dboard_base
+{
public:
basic_tx(ctor_args_t args, double max_freq);
virtual ~basic_tx(void);
@@ -75,167 +68,171 @@ private:
/***********************************************************************
* Register the basic and LF dboards
**********************************************************************/
-static dboard_base::sptr make_basic_rx(dboard_base::ctor_args_t args){
+static dboard_base::sptr make_basic_rx(dboard_base::ctor_args_t args)
+{
return dboard_base::sptr(new basic_rx(args, BASIC_MAX_BANDWIDTH));
}
-static dboard_base::sptr make_basic_tx(dboard_base::ctor_args_t args){
+static dboard_base::sptr make_basic_tx(dboard_base::ctor_args_t args)
+{
return dboard_base::sptr(new basic_tx(args, BASIC_MAX_BANDWIDTH));
}
-static dboard_base::sptr make_lf_rx(dboard_base::ctor_args_t args){
+static dboard_base::sptr make_lf_rx(dboard_base::ctor_args_t args)
+{
return dboard_base::sptr(new basic_rx(args, LF_MAX_BANDWIDTH));
}
-static dboard_base::sptr make_lf_tx(dboard_base::ctor_args_t args){
+static dboard_base::sptr make_lf_tx(dboard_base::ctor_args_t args)
+{
return dboard_base::sptr(new basic_tx(args, LF_MAX_BANDWIDTH));
}
-UHD_STATIC_BLOCK(reg_basic_and_lf_dboards){
- dboard_manager::register_dboard(BASIC_TX_PID, &make_basic_tx, "Basic TX", sd_name_to_conn.keys());
- dboard_manager::register_dboard(BASIC_RX_PID, &make_basic_rx, "Basic RX", sd_name_to_conn.keys());
- dboard_manager::register_dboard(LF_TX_PID, &make_lf_tx, "LF TX", sd_name_to_conn.keys());
- dboard_manager::register_dboard(LF_RX_PID, &make_lf_rx, "LF RX", sd_name_to_conn.keys());
+UHD_STATIC_BLOCK(reg_basic_and_lf_dboards)
+{
+ dboard_manager::register_dboard(
+ BASIC_TX_PID, &make_basic_tx, "Basic TX", sd_name_to_conn.keys());
+ dboard_manager::register_dboard(
+ BASIC_RX_PID, &make_basic_rx, "Basic RX", sd_name_to_conn.keys());
+ dboard_manager::register_dboard(
+ LF_TX_PID, &make_lf_tx, "LF TX", sd_name_to_conn.keys());
+ dboard_manager::register_dboard(
+ LF_RX_PID, &make_lf_rx, "LF RX", sd_name_to_conn.keys());
}
/***********************************************************************
* Basic and LF RX dboard
**********************************************************************/
basic_rx::basic_rx(ctor_args_t args, double max_freq)
- : rx_dboard_base(args),
- _max_freq(max_freq)
+ : rx_dboard_base(args), _max_freq(max_freq)
{
const std::string fe_name(get_subdev_name());
const std::string fe_conn(sd_name_to_conn[fe_name]);
- const std::string db_name(str(
- boost::format("%s (%s)")
- % ((get_rx_id() == BASIC_RX_PID) ? "BasicRX" : "LFRX")
- % fe_name));
+ const std::string db_name(
+ str(boost::format("%s (%s)")
+ % ((get_rx_id() == BASIC_RX_PID) ? "BasicRX" : "LFRX") % fe_name));
UHD_LOG_TRACE("BASICRX",
- "Initializing driver for: " << db_name <<
- " IQ connection type: " << fe_conn);
+ "Initializing driver for: " << db_name << " IQ connection type: " << fe_conn);
const bool has_fe_conn_settings =
get_iface()->has_set_fe_connection(dboard_iface::UNIT_RX);
UHD_LOG_TRACE("BASICRX",
- "Access to FE connection settings: "
- << (has_fe_conn_settings ? "Yes" : "No"));
+ "Access to FE connection settings: " << (has_fe_conn_settings ? "Yes" : "No"));
- std::vector<std::string> antenna_options = has_fe_conn_settings
- ? sd_name_to_conn.keys()
- : std::vector<std::string>(1, "");
+ std::vector<std::string> antenna_options =
+ has_fe_conn_settings ? sd_name_to_conn.keys() : std::vector<std::string>(1, "");
////////////////////////////////////////////////////////////////////
// Register properties
////////////////////////////////////////////////////////////////////
this->get_rx_subtree()->create<std::string>("name").set(db_name);
- this->get_rx_subtree()->create<int>("gains"); //phony property so this dir exists
- this->get_rx_subtree()->create<double>("freq/value")
- .set_publisher([](){ return 0.0; });
- this->get_rx_subtree()->create<meta_range_t>("freq/range")
+ this->get_rx_subtree()->create<int>("gains"); // phony property so this dir exists
+ this->get_rx_subtree()->create<double>("freq/value").set_publisher([]() {
+ return 0.0;
+ });
+ this->get_rx_subtree()
+ ->create<meta_range_t>("freq/range")
.set(freq_range_t(-_max_freq, +_max_freq));
- this->get_rx_subtree()->create<std::string>("antenna/value")
+ this->get_rx_subtree()
+ ->create<std::string>("antenna/value")
.set(has_fe_conn_settings ? fe_name : "");
if (has_fe_conn_settings) {
- this->get_rx_subtree()->access<std::string>("antenna/value")
- .add_coerced_subscriber([this](const std::string& ant){
- this->set_rx_ant(ant);
- })
- ;
+ this->get_rx_subtree()
+ ->access<std::string>("antenna/value")
+ .add_coerced_subscriber(
+ [this](const std::string& ant) { this->set_rx_ant(ant); });
}
- this->get_rx_subtree()->create<std::vector<std::string>>("antenna/options")
+ this->get_rx_subtree()
+ ->create<std::vector<std::string>>("antenna/options")
.set(antenna_options);
- this->get_rx_subtree()->create<int>("sensors"); //phony property so this dir exists
- this->get_rx_subtree()->create<std::string>("connection")
+ this->get_rx_subtree()->create<int>("sensors"); // phony property so this dir exists
+ this->get_rx_subtree()
+ ->create<std::string>("connection")
.set(sd_name_to_conn[get_subdev_name()]);
- this->get_rx_subtree()->create<bool>("enabled")
- .set(true); //always enabled
- this->get_rx_subtree()->create<bool>("use_lo_offset")
- .set(false);
- this->get_rx_subtree()->create<double>("bandwidth/value")
- .set(subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq);
- this->get_rx_subtree()->create<meta_range_t>("bandwidth/range")
- .set(freq_range_t(
- subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq,
- subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq));
-
- //disable RX dboard clock by default
+ this->get_rx_subtree()->create<bool>("enabled").set(true); // always enabled
+ this->get_rx_subtree()->create<bool>("use_lo_offset").set(false);
+ this->get_rx_subtree()
+ ->create<double>("bandwidth/value")
+ .set(subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq);
+ this->get_rx_subtree()
+ ->create<meta_range_t>("bandwidth/range")
+ .set(freq_range_t(subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq,
+ subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq));
+
+ // disable RX dboard clock by default
this->get_iface()->set_clock_enabled(dboard_iface::UNIT_RX, false);
- //set GPIOs to output 0x0000 to decrease noise pickup
+ // set GPIOs to output 0x0000 to decrease noise pickup
this->get_iface()->set_pin_ctrl(dboard_iface::UNIT_RX, 0x0000);
this->get_iface()->set_gpio_ddr(dboard_iface::UNIT_RX, 0xFFFF);
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, 0x0000);
}
-basic_rx::~basic_rx(void){
+basic_rx::~basic_rx(void)
+{
/* NOP */
}
void basic_rx::set_rx_ant(const std::string& ant)
{
UHD_ASSERT_THROW(get_iface()->has_set_fe_connection(dboard_iface::UNIT_RX));
- UHD_LOG_TRACE("BASICRX",
- "Setting antenna value to: " << ant);
- get_iface()->set_fe_connection(
- dboard_iface::UNIT_RX,
+ UHD_LOG_TRACE("BASICRX", "Setting antenna value to: " << ant);
+ get_iface()->set_fe_connection(dboard_iface::UNIT_RX,
get_subdev_name(),
- usrp::fe_connection_t(sd_name_to_conn[ant], 0.0 /* IF */)
- );
+ usrp::fe_connection_t(sd_name_to_conn[ant], 0.0 /* IF */));
}
/***********************************************************************
* Basic and LF TX dboard
**********************************************************************/
-basic_tx::basic_tx(ctor_args_t args, double max_freq) : tx_dboard_base(args){
+basic_tx::basic_tx(ctor_args_t args, double max_freq) : tx_dboard_base(args)
+{
_max_freq = max_freq;
- //this->get_iface()->set_clock_enabled(dboard_iface::UNIT_TX, true);
+ // this->get_iface()->set_clock_enabled(dboard_iface::UNIT_TX, true);
////////////////////////////////////////////////////////////////////
// Register properties
////////////////////////////////////////////////////////////////////
if (get_tx_id() == BASIC_TX_PID) {
this->get_tx_subtree()->create<std::string>("name").set(
- std::string(str(boost::format("BasicTX (%s)") % get_subdev_name()
- )));
- }
- else {
+ std::string(str(boost::format("BasicTX (%s)") % get_subdev_name())));
+ } else {
this->get_tx_subtree()->create<std::string>("name").set(
- std::string(str(boost::format("LFTX (%s)") % get_subdev_name()
- )));
+ std::string(str(boost::format("LFTX (%s)") % get_subdev_name())));
}
- this->get_tx_subtree()->create<int>("gains"); //phony property so this dir exists
- this->get_tx_subtree()->create<double>("freq/value")
- .set_publisher([](){ return 0.0; });
- this->get_tx_subtree()->create<meta_range_t>("freq/range")
+ this->get_tx_subtree()->create<int>("gains"); // phony property so this dir exists
+ this->get_tx_subtree()->create<double>("freq/value").set_publisher([]() {
+ return 0.0;
+ });
+ this->get_tx_subtree()
+ ->create<meta_range_t>("freq/range")
.set(freq_range_t(-_max_freq, +_max_freq));
- this->get_tx_subtree()->create<std::string>("antenna/value")
- .set("");
- this->get_tx_subtree()->create<std::vector<std::string>>("antenna/options")
- .set({""});
- this->get_tx_subtree()->create<int>("sensors"); //phony property so this dir exists
- this->get_tx_subtree()->create<std::string>("connection")
+ this->get_tx_subtree()->create<std::string>("antenna/value").set("");
+ this->get_tx_subtree()->create<std::vector<std::string>>("antenna/options").set({""});
+ this->get_tx_subtree()->create<int>("sensors"); // phony property so this dir exists
+ this->get_tx_subtree()
+ ->create<std::string>("connection")
.set(sd_name_to_conn[get_subdev_name()]);
- this->get_tx_subtree()->create<bool>("enabled")
- .set(true); //always enabled
- this->get_tx_subtree()->create<bool>("use_lo_offset")
- .set(false);
- this->get_tx_subtree()->create<double>("bandwidth/value")
- .set(subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq);
- this->get_tx_subtree()->create<meta_range_t>("bandwidth/range")
- .set(freq_range_t(
- subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq,
- subdev_bandwidth_scalar.at(get_subdev_name())*_max_freq));
-
- //disable TX dboard clock by default
+ this->get_tx_subtree()->create<bool>("enabled").set(true); // always enabled
+ this->get_tx_subtree()->create<bool>("use_lo_offset").set(false);
+ this->get_tx_subtree()
+ ->create<double>("bandwidth/value")
+ .set(subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq);
+ this->get_tx_subtree()
+ ->create<meta_range_t>("bandwidth/range")
+ .set(freq_range_t(subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq,
+ subdev_bandwidth_scalar.at(get_subdev_name()) * _max_freq));
+
+ // disable TX dboard clock by default
this->get_iface()->set_clock_enabled(dboard_iface::UNIT_TX, false);
- //set GPIOs to output 0x0000 to decrease noise pickup
+ // set GPIOs to output 0x0000 to decrease noise pickup
this->get_iface()->set_pin_ctrl(dboard_iface::UNIT_TX, 0x0000);
this->get_iface()->set_gpio_ddr(dboard_iface::UNIT_TX, 0xFFFF);
this->get_iface()->set_gpio_out(dboard_iface::UNIT_TX, 0x0000);
}
-basic_tx::~basic_tx(void){
+basic_tx::~basic_tx(void)
+{
/* NOP */
}