aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp
diff options
context:
space:
mode:
authormichael-west <michael.west@ettus.com>2015-04-02 10:51:27 -0700
committerMartin Braun <martin.braun@ettus.com>2015-04-03 13:43:23 -0700
commitccf1d5c5e5f5c20ff77f45da3295b9dd5bdb6272 (patch)
tree6bc08220d844d540f2359262e29da659fc57a577 /host/lib/usrp
parentda5311407bdabcb7206f8ffb0b77de32d294f083 (diff)
downloaduhd-ccf1d5c5e5f5c20ff77f45da3295b9dd5bdb6272.tar.gz
uhd-ccf1d5c5e5f5c20ff77f45da3295b9dd5bdb6272.tar.bz2
uhd-ccf1d5c5e5f5c20ff77f45da3295b9dd5bdb6272.zip
uhd: Add ability to get and set command time through dboard_iface.
This creates a wb_iface child class called timed_wb_iface, which adds support for timed commands.
Diffstat (limited to 'host/lib/usrp')
-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/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_iface.cpp12
-rw-r--r--host/lib/usrp/e100/dboard_iface.cpp12
-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_dboard_iface.cpp15
-rw-r--r--host/lib/usrp/x300/x300_impl.cpp3
-rw-r--r--host/lib/usrp/x300/x300_impl.hpp1
17 files changed, 119 insertions, 30 deletions
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/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_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..42d1733ab 100644
--- a/host/lib/usrp/e100/dboard_iface.cpp
+++ b/host/lib/usrp/e100/dboard_iface.cpp
@@ -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);
@@ -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/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_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 2de44a99d..809a56765 100644
--- a/host/lib/usrp/x300/x300_impl.cpp
+++ b/host/lib/usrp/x300/x300_impl.cpp
@@ -1014,6 +1014,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
@@ -1353,7 +1354,7 @@ void x300_impl::set_time_source_out(mboard_members_t &mb, const bool enb)
void x300_impl::update_clock_source(mboard_members_t &mb, const std::string &source)
{
//Optimize for the case when the current source is internal and we are trying
- //to set it to internal. This is the only case where we are guaranteed that
+ //to set it to internal. This is the only case where we are guaranteed that
//the clock has not gone away so we can skip setting the MUX and reseting the LMK.
if (not (mb.current_refclk_src == "internal" and source == "internal")) {
//Update the clock MUX on the motherboard to select the requested source
diff --git a/host/lib/usrp/x300/x300_impl.hpp b/host/lib/usrp/x300/x300_impl.hpp
index 70c5dccb4..342664ece 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 &);