aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorAshish Chaudhari <ashish@ettus.com>2015-04-09 09:47:55 -0700
committerAshish Chaudhari <ashish@ettus.com>2015-04-09 09:47:55 -0700
commit625724d7f81c214e9955334860a364802be3fda9 (patch)
tree39d6d0087646ef4028bc6a57d33c89a28112fed8 /host/lib
parent700bf99bdc483fdcc9deb54abc29bd7f81e16089 (diff)
parent3f0b770ab14aa0acaf4846680e3ee7379a1f93d7 (diff)
downloaduhd-625724d7f81c214e9955334860a364802be3fda9.tar.gz
uhd-625724d7f81c214e9955334860a364802be3fda9.tar.bz2
uhd-625724d7f81c214e9955334860a364802be3fda9.zip
Merge branch 'master' into vivado
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/types/wb_iface.cpp2
-rw-r--r--host/lib/usrp/b100/b100_impl.hpp2
-rw-r--r--host/lib/usrp/b100/dboard_iface.cpp18
-rw-r--r--host/lib/usrp/b200/b200_impl.cpp2
-rw-r--r--host/lib/usrp/b200/b200_impl.hpp2
-rw-r--r--host/lib/usrp/common/fifo_ctrl_excelsior.cpp8
-rw-r--r--host/lib/usrp/common/fifo_ctrl_excelsior.hpp7
-rw-r--r--host/lib/usrp/cores/radio_ctrl_core_3000.cpp8
-rw-r--r--host/lib/usrp/cores/radio_ctrl_core_3000.hpp7
-rw-r--r--host/lib/usrp/dboard/db_tvrx2.cpp2
-rw-r--r--host/lib/usrp/dboard_iface.cpp12
-rw-r--r--host/lib/usrp/e100/dboard_iface.cpp20
-rw-r--r--host/lib/usrp/e100/e100_impl.hpp4
-rw-r--r--host/lib/usrp/e300/e300_remote_codec_ctrl.cpp2
-rw-r--r--host/lib/usrp/usrp2/dboard_iface.cpp25
-rw-r--r--host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp6
-rw-r--r--host/lib/usrp/usrp2/usrp2_fifo_ctrl.hpp7
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp12
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.hpp2
-rw-r--r--host/lib/usrp/usrp2/usrp2_impl.hpp4
-rw-r--r--host/lib/usrp/x300/x300_clock_ctrl.cpp2
-rw-r--r--host/lib/usrp/x300/x300_dboard_iface.cpp15
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp1
-rw-r--r--host/lib/usrp/x300/x300_impl.hpp1
24 files changed, 130 insertions, 41 deletions
diff --git a/host/lib/types/wb_iface.cpp b/host/lib/types/wb_iface.cpp
index 6edfdfe2f..dc8d2a83e 100644
--- a/host/lib/types/wb_iface.cpp
+++ b/host/lib/types/wb_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2013 Ettus Research LLC
+// Copyright 2013,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
diff --git a/host/lib/usrp/b100/b100_impl.hpp b/host/lib/usrp/b100/b100_impl.hpp
index dbca543be..5a8f70d73 100644
--- a/host/lib/usrp/b100/b100_impl.hpp
+++ b/host/lib/usrp/b100/b100_impl.hpp
@@ -68,7 +68,7 @@ static const size_t B100_MAX_RATE_USB2 = 32000000; // bytes/s
//! Make a b100 dboard interface
uhd::usrp::dboard_iface::sptr make_b100_dboard_iface(
- uhd::wb_iface::sptr wb_iface,
+ uhd::timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
b100_clock_ctrl::sptr clock,
diff --git a/host/lib/usrp/b100/dboard_iface.cpp b/host/lib/usrp/b100/dboard_iface.cpp
index efbba1c4c..325efeec1 100644
--- a/host/lib/usrp/b100/dboard_iface.cpp
+++ b/host/lib/usrp/b100/dboard_iface.cpp
@@ -34,7 +34,7 @@ class b100_dboard_iface : public dboard_iface{
public:
b100_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
i2c_iface::sptr i2c_iface,
spi_iface::sptr spi_iface,
b100_clock_ctrl::sptr clock,
@@ -72,6 +72,8 @@ public:
void _set_gpio_out(unit_t, boost::uint16_t);
void set_gpio_debug(unit_t, int);
boost::uint16_t read_gpio(unit_t);
+ void set_command_time(const uhd::time_spec_t& t);
+ uhd::time_spec_t get_command_time(void);
void write_i2c(boost::uint16_t, const byte_vector_t &);
byte_vector_t read_i2c(boost::uint16_t, size_t);
@@ -97,7 +99,7 @@ public:
double get_codec_rate(unit_t);
private:
- wb_iface::sptr _wb_iface;
+ timed_wb_iface::sptr _wb_iface;
i2c_iface::sptr _i2c_iface;
spi_iface::sptr _spi_iface;
b100_clock_ctrl::sptr _clock;
@@ -109,7 +111,7 @@ private:
* Make Function
**********************************************************************/
dboard_iface::sptr make_b100_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
i2c_iface::sptr i2c_iface,
spi_iface::sptr spi_iface,
b100_clock_ctrl::sptr clock,
@@ -256,3 +258,13 @@ double b100_dboard_iface::read_aux_adc(dboard_iface::unit_t unit, aux_adc_t whic
;
return _codec->read_aux_adc(unit_to_which_to_aux_adc[unit][which]);
}
+
+void b100_dboard_iface::set_command_time(const uhd::time_spec_t& t)
+{
+ _wb_iface->set_time(t);
+}
+
+uhd::time_spec_t b100_dboard_iface::get_command_time(void)
+{
+ return _wb_iface->get_time();
+}
diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp
index e1b106208..afc21d031 100644
--- a/host/lib/usrp/b200/b200_impl.cpp
+++ b/host/lib/usrp/b200/b200_impl.cpp
@@ -67,7 +67,7 @@ public:
digital_interface_delays_t get_digital_interface_timing() {
digital_interface_delays_t delays;
delays.rx_clk_delay = 0;
- delays.rx_data_delay = 0xF;
+ delays.rx_data_delay = 0x6;
delays.tx_clk_delay = 0;
delays.tx_data_delay = 0xF;
return delays;
diff --git a/host/lib/usrp/b200/b200_impl.hpp b/host/lib/usrp/b200/b200_impl.hpp
index cff767b4b..b68293109 100644
--- a/host/lib/usrp/b200/b200_impl.hpp
+++ b/host/lib/usrp/b200/b200_impl.hpp
@@ -47,7 +47,7 @@
#include "recv_packet_demuxer_3000.hpp"
static const boost::uint8_t B200_FW_COMPAT_NUM_MAJOR = 7;
static const boost::uint8_t B200_FW_COMPAT_NUM_MINOR = 0;
-static const boost::uint16_t B200_FPGA_COMPAT_NUM = 4;
+static const boost::uint16_t B200_FPGA_COMPAT_NUM = 5;
static const double B200_BUS_CLOCK_RATE = 100e6;
static const double B200_DEFAULT_TICK_RATE = 32e6;
static const double B200_DEFAULT_FREQ = 100e6; // Hz
diff --git a/host/lib/usrp/common/fifo_ctrl_excelsior.cpp b/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
index 2ea5b66da..f55d1ef41 100644
--- a/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
+++ b/host/lib/usrp/common/fifo_ctrl_excelsior.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2012 Ettus Research LLC
+// Copyright 2012,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
@@ -207,6 +207,12 @@ public:
if (_use_time) _timeout = MASSIVE_TIMEOUT; //permanently sets larger timeout
}
+ uhd::time_spec_t get_time(void)
+ {
+ boost::mutex::scoped_lock lock(_mutex);
+ return _time;
+ }
+
void set_tick_rate(const double rate){
boost::mutex::scoped_lock lock(_mutex);
_tick_rate = rate;
diff --git a/host/lib/usrp/common/fifo_ctrl_excelsior.hpp b/host/lib/usrp/common/fifo_ctrl_excelsior.hpp
index bd7777ffa..759e2ccc9 100644
--- a/host/lib/usrp/common/fifo_ctrl_excelsior.hpp
+++ b/host/lib/usrp/common/fifo_ctrl_excelsior.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2012 Ettus Research LLC
+// Copyright 2012,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
@@ -40,7 +40,7 @@ struct fifo_ctrl_excelsior_config
/*!
* Provide access to peek, poke, spi, and async messages.
*/
-class fifo_ctrl_excelsior : public uhd::wb_iface, public uhd::spi_iface
+class fifo_ctrl_excelsior : public uhd::timed_wb_iface, public uhd::spi_iface
{
public:
typedef boost::shared_ptr<fifo_ctrl_excelsior> sptr;
@@ -51,9 +51,6 @@ public:
const fifo_ctrl_excelsior_config &config
);
- //! Set the command time that will activate
- virtual void set_time(const uhd::time_spec_t &time) = 0;
-
//! Set the tick rate (converting time into ticks)
virtual void set_tick_rate(const double rate) = 0;
diff --git a/host/lib/usrp/cores/radio_ctrl_core_3000.cpp b/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
index 1c9b5c4fa..47cfaf3ca 100644
--- a/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
+++ b/host/lib/usrp/cores/radio_ctrl_core_3000.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2012-2014 Ettus Research LLC
+// Copyright 2012-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
@@ -111,6 +111,12 @@ public:
if (_use_time) _timeout = MASSIVE_TIMEOUT; //permanently sets larger timeout
}
+ uhd::time_spec_t get_time(void)
+ {
+ boost::mutex::scoped_lock lock(_mutex);
+ return _time;
+ }
+
void set_tick_rate(const double rate)
{
boost::mutex::scoped_lock lock(_mutex);
diff --git a/host/lib/usrp/cores/radio_ctrl_core_3000.hpp b/host/lib/usrp/cores/radio_ctrl_core_3000.hpp
index 1c25ceb2c..c1cc1d372 100644
--- a/host/lib/usrp/cores/radio_ctrl_core_3000.hpp
+++ b/host/lib/usrp/cores/radio_ctrl_core_3000.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2012-2014 Ettus Research LLC
+// Copyright 2012-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
@@ -29,7 +29,7 @@
/*!
* Provide access to peek, poke for the radio ctrl module
*/
-class radio_ctrl_core_3000 : public uhd::wb_iface
+class radio_ctrl_core_3000 : public uhd::timed_wb_iface
{
public:
typedef boost::shared_ptr<radio_ctrl_core_3000> sptr;
@@ -54,6 +54,9 @@ public:
//! Set the command time that will activate
virtual void set_time(const uhd::time_spec_t &time) = 0;
+ //! Get the command time that will activate
+ virtual uhd::time_spec_t get_time(void) = 0;
+
//! Set the tick rate (converting time into ticks)
virtual void set_tick_rate(const double rate) = 0;
};
diff --git a/host/lib/usrp/dboard/db_tvrx2.cpp b/host/lib/usrp/dboard/db_tvrx2.cpp
index 9300483d1..00c2fef50 100644
--- a/host/lib/usrp/dboard/db_tvrx2.cpp
+++ b/host/lib/usrp/dboard/db_tvrx2.cpp
@@ -1014,7 +1014,7 @@ tvrx2::tvrx2(ctor_args_t args) : rx_dboard_base(args){
_freq_scalar = (6*16.0e6)/this->get_iface()->get_clock_rate(dboard_iface::UNIT_RX);
} else if (ref_clock == 200e6) {
- UHD_MSG(warning) << boost::format("ref_clock was 200e6, setting ref_clock divider for 100e6.") % ref_clock << std::endl;
+ UHD_MSG(warning) << boost::format("ref_clock was 200e6, setting ref_clock divider for 100e6.") << std::endl;
this->get_iface()->set_clock_rate(dboard_iface::UNIT_RX, 100e6);
this->get_iface()->set_gpio_out(dboard_iface::UNIT_RX, REFCLOCK_DIV6);
diff --git a/host/lib/usrp/dboard_iface.cpp b/host/lib/usrp/dboard_iface.cpp
index 6be50130a..092e005f0 100644
--- a/host/lib/usrp/dboard_iface.cpp
+++ b/host/lib/usrp/dboard_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2013 Ettus Research LLC
+// Copyright 2010-2013,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
@@ -81,3 +81,13 @@ void dboard_iface::set_gpio_out(
boost::uint16_t dboard_iface::get_gpio_out(unit_t unit){
return _impl->gpio_out_shadow[unit];
}
+
+void dboard_iface::set_command_time(const uhd::time_spec_t&)
+{
+ throw uhd::not_implemented_error("timed command feature not implemented on this hardware");
+}
+
+uhd::time_spec_t dboard_iface::get_command_time()
+{
+ return uhd::time_spec_t(0.0);
+}
diff --git a/host/lib/usrp/e100/dboard_iface.cpp b/host/lib/usrp/e100/dboard_iface.cpp
index 07d0049c8..b5baf6c56 100644
--- a/host/lib/usrp/e100/dboard_iface.cpp
+++ b/host/lib/usrp/e100/dboard_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2011 Ettus Research LLC
+// Copyright 2010-2011,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
@@ -34,7 +34,7 @@ class e100_dboard_iface : public dboard_iface{
public:
e100_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
i2c_iface::sptr i2c_iface,
spi_iface::sptr spi_iface,
e100_clock_ctrl::sptr clock,
@@ -72,6 +72,8 @@ public:
void _set_gpio_out(unit_t, boost::uint16_t);
void set_gpio_debug(unit_t, int);
boost::uint16_t read_gpio(unit_t);
+ void set_command_time(const uhd::time_spec_t& t);
+ uhd::time_spec_t get_command_time(void);
void write_i2c(boost::uint16_t, const byte_vector_t &);
byte_vector_t read_i2c(boost::uint16_t, size_t);
@@ -97,7 +99,7 @@ public:
double get_codec_rate(unit_t);
private:
- wb_iface::sptr _wb_iface;
+ timed_wb_iface::sptr _wb_iface;
i2c_iface::sptr _i2c_iface;
spi_iface::sptr _spi_iface;
e100_clock_ctrl::sptr _clock;
@@ -109,7 +111,7 @@ private:
* Make Function
**********************************************************************/
dboard_iface::sptr make_e100_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
i2c_iface::sptr i2c_iface,
spi_iface::sptr spi_iface,
e100_clock_ctrl::sptr clock,
@@ -256,3 +258,13 @@ double e100_dboard_iface::read_aux_adc(dboard_iface::unit_t unit, aux_adc_t whic
;
return _codec->read_aux_adc(unit_to_which_to_aux_adc[unit][which]);
}
+
+uhd::time_spec_t e100_dboard_iface::get_command_time()
+{
+ return _wb_iface->get_time();
+}
+
+void e100_dboard_iface::set_command_time(const uhd::time_spec_t& t)
+{
+ _wb_iface->set_time(t);
+}
diff --git a/host/lib/usrp/e100/e100_impl.hpp b/host/lib/usrp/e100/e100_impl.hpp
index 0838bd8c4..4efc21427 100644
--- a/host/lib/usrp/e100/e100_impl.hpp
+++ b/host/lib/usrp/e100/e100_impl.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2012,2014 Ettus Research LLC
+// Copyright 2010-2012,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
@@ -61,7 +61,7 @@ extern void e100_load_fpga(const std::string &bin_file);
//! Make an e100 dboard interface
uhd::usrp::dboard_iface::sptr make_e100_dboard_iface(
- uhd::wb_iface::sptr wb_iface,
+ uhd::timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
e100_clock_ctrl::sptr clock,
diff --git a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
index c78946a6c..d3efdb812 100644
--- a/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
+++ b/host/lib/usrp/e300/e300_remote_codec_ctrl.cpp
@@ -245,7 +245,7 @@ private:
}
if (_args.action != _retval.action)
- throw std::runtime_error("e300_remote_codec_ctrl_impl trancation failed.");
+ throw std::runtime_error("e300_remote_codec_ctrl_impl transaction failed.");
}
void _clear() {
diff --git a/host/lib/usrp/usrp2/dboard_iface.cpp b/host/lib/usrp/usrp2/dboard_iface.cpp
index 8f2d0f0dc..7bb69c7b7 100644
--- a/host/lib/usrp/usrp2/dboard_iface.cpp
+++ b/host/lib/usrp/usrp2/dboard_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2012 Ettus Research LLC
+// Copyright 2010-2012,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
@@ -19,6 +19,7 @@
#include <uhd/types/serial.hpp>
#include "clock_ctrl.hpp"
#include "usrp2_regs.hpp" //wishbone address constants
+#include "usrp2_fifo_ctrl.hpp"
#include <uhd/usrp/dboard_iface.hpp>
#include <uhd/types/dict.hpp>
#include <uhd/exception.hpp>
@@ -36,7 +37,7 @@ using namespace boost::assign;
class usrp2_dboard_iface : public dboard_iface{
public:
usrp2_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
usrp2_clock_ctrl::sptr clock_ctrl
@@ -59,6 +60,8 @@ public:
void _set_gpio_out(unit_t, boost::uint16_t);
void set_gpio_debug(unit_t, int);
boost::uint16_t read_gpio(unit_t);
+ void set_command_time(const uhd::time_spec_t& t);
+ uhd::time_spec_t get_command_time(void);
void write_i2c(boost::uint16_t, const byte_vector_t &);
byte_vector_t read_i2c(boost::uint16_t, size_t);
@@ -84,6 +87,7 @@ public:
);
private:
+ timed_wb_iface::sptr _wb_iface;
uhd::i2c_iface::sptr _i2c_iface;
uhd::spi_iface::sptr _spi_iface;
usrp2_clock_ctrl::sptr _clock_ctrl;
@@ -98,7 +102,7 @@ private:
* Make Function
**********************************************************************/
dboard_iface::sptr make_usrp2_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
usrp2_clock_ctrl::sptr clock_ctrl
@@ -110,11 +114,12 @@ dboard_iface::sptr make_usrp2_dboard_iface(
* Structors
**********************************************************************/
usrp2_dboard_iface::usrp2_dboard_iface(
- wb_iface::sptr wb_iface,
+ timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
usrp2_clock_ctrl::sptr clock_ctrl
):
+ _wb_iface(wb_iface),
_i2c_iface(i2c_iface),
_spi_iface(spi_iface),
_clock_ctrl(clock_ctrl)
@@ -246,7 +251,7 @@ void usrp2_dboard_iface::_write_aux_dac(unit_t unit){
(UNIT_TX, SPI_SS_TX_DAC)
;
_spi_iface->write_spi(
- unit_to_spi_dac[unit], spi_config_t::EDGE_FALL,
+ unit_to_spi_dac[unit], spi_config_t::EDGE_FALL,
_dac_regs[unit].get_reg(), 24
);
}
@@ -305,3 +310,13 @@ double usrp2_dboard_iface::read_aux_adc(unit_t unit, aux_adc_t which){
//convert to voltage and return
return 3.3*ad7922_regs.result/4095;
}
+
+uhd::time_spec_t usrp2_dboard_iface::get_command_time()
+{
+ return _wb_iface->get_time();
+}
+
+void usrp2_dboard_iface::set_command_time(const uhd::time_spec_t& t)
+{
+ _wb_iface->set_time(t);
+}
diff --git a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
index 9e8687b94..0276a7a66 100644
--- a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
+++ b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp
@@ -155,6 +155,12 @@ public:
if (_use_time) _timeout = MASSIVE_TIMEOUT; //permanently sets larger timeout
}
+ uhd::time_spec_t get_time()
+ {
+ boost::mutex::scoped_lock lock(_mutex);
+ return _time;
+ }
+
void set_tick_rate(const double rate){
boost::mutex::scoped_lock lock(_mutex);
_tick_rate = rate;
diff --git a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.hpp b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.hpp
index 13dfb5b46..5bc7f6676 100644
--- a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.hpp
@@ -1,5 +1,5 @@
//
-// Copyright 2012 Ettus Research LLC
+// Copyright 2012,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
@@ -30,7 +30,7 @@
* The usrp2 FIFO control class:
* Provide high-speed peek/poke interface.
*/
-class usrp2_fifo_ctrl : public uhd::wb_iface, public uhd::spi_iface
+class usrp2_fifo_ctrl : public uhd::timed_wb_iface, public uhd::spi_iface
{
public:
typedef boost::shared_ptr<usrp2_fifo_ctrl> sptr;
@@ -38,9 +38,6 @@ public:
//! Make a new FIFO control object
static sptr make(uhd::transport::zero_copy_if::sptr xport);
- //! Set the command time that will activate
- virtual void set_time(const uhd::time_spec_t &time) = 0;
-
//! Set the tick rate (converting time into ticks)
virtual void set_tick_rate(const double rate) = 0;
};
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 3ffbf9aac..1d41173f8 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2010-2012,2014 Ettus Research LLC
+// Copyright 2010-2012,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
@@ -399,6 +399,16 @@ public:
}
}
+ void set_time(const time_spec_t&)
+ {
+ throw uhd::not_implemented_error("Timed commands not supported");
+ }
+
+ time_spec_t get_time(void)
+ {
+ return (0.0);
+ }
+
private:
//this lovely lady makes it all possible
udp_simple::sptr _ctrl_transport;
diff --git a/host/lib/usrp/usrp2/usrp2_iface.hpp b/host/lib/usrp/usrp2/usrp2_iface.hpp
index a01f2ccfa..833016b7c 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.hpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.hpp
@@ -33,7 +33,7 @@
* Provides a set of functions to implementation layer.
* Including spi, peek, poke, control...
*/
-class usrp2_iface : public uhd::wb_iface, public uhd::spi_iface, public uhd::i2c_iface
+class usrp2_iface : public uhd::timed_wb_iface, public uhd::spi_iface, public uhd::i2c_iface
{
public:
typedef boost::shared_ptr<usrp2_iface> sptr;
diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp
index fac4b3907..701403029 100644
--- a/host/lib/usrp/usrp2/usrp2_impl.hpp
+++ b/host/lib/usrp/usrp2/usrp2_impl.hpp
@@ -57,7 +57,7 @@ static const std::string USRP2_EEPROM_MAP_KEY = "N100";
//! Make a usrp2 dboard interface.
uhd::usrp::dboard_iface::sptr make_usrp2_dboard_iface(
- uhd::wb_iface::sptr wb_iface,
+ uhd::timed_wb_iface::sptr wb_iface,
uhd::i2c_iface::sptr i2c_iface,
uhd::spi_iface::sptr spi_iface,
usrp2_clock_ctrl::sptr clk_ctrl
@@ -83,7 +83,7 @@ private:
usrp2_iface::sptr iface;
usrp2_fifo_ctrl::sptr fifo_ctrl;
uhd::spi_iface::sptr spiface;
- uhd::wb_iface::sptr wbiface;
+ uhd::timed_wb_iface::sptr wbiface;
usrp2_clock_ctrl::sptr clock;
usrp2_codec_ctrl::sptr codec;
uhd::gps_ctrl::sptr gps;
diff --git a/host/lib/usrp/x300/x300_clock_ctrl.cpp b/host/lib/usrp/x300/x300_clock_ctrl.cpp
index 22eba3eb3..3aebfea68 100644
--- a/host/lib/usrp/x300/x300_clock_ctrl.cpp
+++ b/host/lib/usrp/x300/x300_clock_ctrl.cpp
@@ -190,7 +190,7 @@ void set_master_clock_rate(double clock_rate) {
// PLL1 - 2 MHz compare frequency
_lmk04816_regs.PLL1_N_28 = 100;
_lmk04816_regs.PLL1_R_27 = 5;
- _lmk04816_regs.PLL1_CP_GAIN_27 = lmk04816_regs_t::PLL1_CP_GAIN_27_100UA;
+ _lmk04816_regs.PLL1_CP_GAIN_27 = lmk04816_regs_t::PLL1_CP_GAIN_27_1600UA;
// PLL2 - 96 MHz compare frequency
_lmk04816_regs.PLL2_N_30 = 5;
diff --git a/host/lib/usrp/x300/x300_dboard_iface.cpp b/host/lib/usrp/x300/x300_dboard_iface.cpp
index eff5183e0..c286e805a 100644
--- a/host/lib/usrp/x300/x300_dboard_iface.cpp
+++ b/host/lib/usrp/x300/x300_dboard_iface.cpp
@@ -1,5 +1,5 @@
//
-// Copyright 2013 Ettus Research LLC
+// Copyright 2013,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
@@ -50,6 +50,9 @@ public:
void _set_gpio_ddr(unit_t, boost::uint16_t);
void _set_gpio_out(unit_t, boost::uint16_t);
+ void set_command_time(const uhd::time_spec_t& t);
+ uhd::time_spec_t get_command_time(void);
+
void set_gpio_debug(unit_t, int);
boost::uint16_t read_gpio(unit_t);
@@ -331,3 +334,13 @@ double x300_dboard_iface::read_aux_adc(unit_t unit, aux_adc_t which)
//convert to voltage and return
return 3.3*ad7922_regs.result/4095;
}
+
+uhd::time_spec_t x300_dboard_iface::get_command_time()
+{
+ return _config.cmd_time_ctrl->get_time();
+}
+
+void x300_dboard_iface::set_command_time(const uhd::time_spec_t& t)
+{
+ _config.cmd_time_ctrl->set_time(t);
+}
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp
index 641adc048..cab2ec491 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -1013,6 +1013,7 @@ void x300_impl::setup_radio(const size_t mb_i, const std::string &slot_name)
db_config.which_rx_clk = (slot_name == "A")? X300_CLOCK_WHICH_DB0_RX : X300_CLOCK_WHICH_DB1_RX;
db_config.which_tx_clk = (slot_name == "A")? X300_CLOCK_WHICH_DB0_TX : X300_CLOCK_WHICH_DB1_TX;
db_config.dboard_slot = (slot_name == "A")? 0 : 1;
+ db_config.cmd_time_ctrl = perif.ctrl;
_dboard_ifaces[db_path] = x300_make_dboard_iface(db_config);
//create a new dboard manager
diff --git a/host/lib/usrp/x300/x300_impl.hpp b/host/lib/usrp/x300/x300_impl.hpp
index 9ad060c85..9042ad2ca 100644
--- a/host/lib/usrp/x300/x300_impl.hpp
+++ b/host/lib/usrp/x300/x300_impl.hpp
@@ -131,6 +131,7 @@ struct x300_dboard_iface_config_t
x300_clock_which_t which_rx_clk;
x300_clock_which_t which_tx_clk;
boost::uint8_t dboard_slot;
+ uhd::timed_wb_iface::sptr cmd_time_ctrl;
};
uhd::usrp::dboard_iface::sptr x300_make_dboard_iface(const x300_dboard_iface_config_t &);