diff options
Diffstat (limited to 'host/lib/usrp')
| -rw-r--r-- | host/lib/usrp/usrp1/CMakeLists.txt | 56 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/codec_ctrl.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/codec_ctrl.hpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/codec_impl.cpp | 33 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/dboard_iface.cpp | 7 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/dboard_impl.cpp | 14 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/mboard_impl.cpp | 12 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.cpp | 5 | 
8 files changed, 90 insertions, 61 deletions
| diff --git a/host/lib/usrp/usrp1/CMakeLists.txt b/host/lib/usrp/usrp1/CMakeLists.txt index eb7bd4b06..229a4ce63 100644 --- a/host/lib/usrp/usrp1/CMakeLists.txt +++ b/host/lib/usrp/usrp1/CMakeLists.txt @@ -17,23 +17,41 @@  #This file will be included by cmake, use absolute paths! -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/../firmware/fx2/include) +######################################################################## +# Conditionally configure the USRP1 support +######################################################################## +MESSAGE(STATUS "Configuring usrp1 support...") -LIBUHD_APPEND_SOURCES( -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/clock_ctrl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/clock_ctrl.hpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_ctrl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_ctrl.hpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dboard_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dboard_iface.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dsp_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/io_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/mboard_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_iface.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_iface.hpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_impl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_impl.hpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_ctrl.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_ctrl.hpp -) +IF(HAVE_USB_SUPPORT) +    MESSAGE(STATUS "Has USB support - found") +ELSE(HAVE_USB_SUPPORT) +    MESSAGE(STATUS "Has USB support - not found") +ENDIF(HAVE_USB_SUPPORT) + +#TODO check for usrp1 enable/disable option flag + +IF(HAVE_USB_SUPPORT) +    MESSAGE(STATUS "  Building usrp1 support.") +    INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/../firmware/fx2/include) + +    LIBUHD_APPEND_SOURCES( +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/clock_ctrl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/clock_ctrl.hpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_ctrl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_ctrl.hpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/codec_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dboard_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dboard_iface.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/dsp_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/io_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/mboard_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_iface.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_iface.hpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_impl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_impl.hpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_ctrl.cpp +        ${CMAKE_SOURCE_DIR}/lib/usrp/usrp1/usrp1_ctrl.hpp +    ) +ELSE(HAVE_USB_SUPPORT) +    MESSAGE(STATUS "  Skipping usrp1 support.") +ENDIF(HAVE_USB_SUPPORT) diff --git a/host/lib/usrp/usrp1/codec_ctrl.cpp b/host/lib/usrp/usrp1/codec_ctrl.cpp index 866650c2c..d0576a769 100644 --- a/host/lib/usrp/usrp1/codec_ctrl.cpp +++ b/host/lib/usrp/usrp1/codec_ctrl.cpp @@ -25,12 +25,12 @@  #include <uhd/utils/algorithm.hpp>  #include <uhd/utils/byteswap.hpp>  #include <boost/cstdint.hpp> +#include <boost/format.hpp>  #include <boost/tuple/tuple.hpp>  #include <boost/math/special_functions/round.hpp>  #include <boost/assign/list_of.hpp>  #include <iostream>  #include <iomanip> -#include <cstdio>  using namespace uhd; @@ -335,9 +335,9 @@ unsigned int usrp1_codec_ctrl_impl::compute_freq_control_word_9862(      int v = (int) rint (fabs (target_freq) / master_freq * pow (2.0, 24.0));      *actual_freq = v * master_freq / pow (2.0, 24.0) * sign; -    fprintf(stdout, -       "compute_freq_control_word_9862: target = %g  actual = %g  delta = %g  v = %8d\n", -       target_freq, *actual_freq, *actual_freq - target_freq, v); +    std::cout << boost::format( +       "compute_freq_control_word_9862: target = %g  actual = %g  delta = %g  v = %8d\n" +    ) % target_freq % *actual_freq % (*actual_freq - target_freq) % v;      return (unsigned int) v;  } diff --git a/host/lib/usrp/usrp1/codec_ctrl.hpp b/host/lib/usrp/usrp1/codec_ctrl.hpp index 51e29345a..0605e3228 100644 --- a/host/lib/usrp/usrp1/codec_ctrl.hpp +++ b/host/lib/usrp/usrp1/codec_ctrl.hpp @@ -19,6 +19,7 @@  #define INCLUDED_USRP1_CODEC_CTRL_HPP  #include "usrp1_iface.hpp" +#include <uhd/types/ranges.hpp>  #include <boost/shared_ptr.hpp>  #include <boost/utility.hpp> @@ -31,6 +32,9 @@ class usrp1_codec_ctrl : boost::noncopyable{  public:      typedef boost::shared_ptr<usrp1_codec_ctrl> sptr; +    static const uhd::gain_range_t tx_pga_gain_range; +    static const uhd::gain_range_t rx_pga_gain_range; +      /*!       * Make a new clock control object.       * \param iface the usrp1 iface object @@ -70,6 +74,18 @@ public:       */      virtual void write_aux_dac(aux_dac_t which, float volts) = 0; +    //! Set the TX PGA gain +    virtual void set_tx_pga_gain(float gain) = 0; + +    //! Get the TX PGA gain +    virtual float get_tx_pga_gain(void) = 0; + +    //! Set the RX PGA gain ('A' or 'B') +    virtual void set_rx_pga_gain(float gain, char which) = 0; + +    //! Get the RX PGA gain ('A' or 'B') +    virtual float get_rx_pga_gain(char which) = 0; +      virtual bool set_duc_freq(double freq) = 0;  }; diff --git a/host/lib/usrp/usrp1/codec_impl.cpp b/host/lib/usrp/usrp1/codec_impl.cpp index 9253c06ba..7bf5631fb 100644 --- a/host/lib/usrp/usrp1/codec_impl.cpp +++ b/host/lib/usrp/usrp1/codec_impl.cpp @@ -16,6 +16,7 @@  //  #include "usrp1_impl.hpp" +#include <uhd/utils/assert.hpp>  #include <uhd/usrp/codec_props.hpp>  #include <boost/bind.hpp> @@ -44,8 +45,7 @@ static const std::string ad9862_pga_gain_name = "ad9862 pga";  void usrp1_impl::rx_codec_get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<codec_prop_t>()) { @@ -62,17 +62,17 @@ void usrp1_impl::rx_codec_get(const wax::obj &key_, wax::obj &val)          return;      case CODEC_PROP_GAIN_RANGE: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          val = usrp1_codec_ctrl::rx_pga_gain_range;          return;      case CODEC_PROP_GAIN_I: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          val = _codec_ctrl->get_rx_pga_gain('A');          return;      case CODEC_PROP_GAIN_Q: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          val = _codec_ctrl->get_rx_pga_gain('B');          return; @@ -80,20 +80,19 @@ void usrp1_impl::rx_codec_get(const wax::obj &key_, wax::obj &val)      }  } -void usrp1_impl::rx_codec_set(const wax::obj &, const wax::obj &) +void usrp1_impl::rx_codec_set(const wax::obj &key_, const wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the set request conditioned on the key      switch(key.as<codec_prop_t>()) {      case CODEC_PROP_GAIN_I: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          _codec_ctrl->set_rx_pga_gain(val.as<float>(), 'A');          return;      case CODEC_PROP_GAIN_Q: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          _codec_ctrl->set_rx_pga_gain(val.as<float>(), 'B');          return; @@ -106,8 +105,7 @@ void usrp1_impl::rx_codec_set(const wax::obj &, const wax::obj &)   **********************************************************************/  void usrp1_impl::tx_codec_get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<codec_prop_t>()) { @@ -124,13 +122,13 @@ void usrp1_impl::tx_codec_get(const wax::obj &key_, wax::obj &val)          return;      case CODEC_PROP_GAIN_RANGE: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          val = usrp1_codec_ctrl::tx_pga_gain_range;          return;      case CODEC_PROP_GAIN_I: //only one gain for I and Q      case CODEC_PROP_GAIN_Q: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          val = _codec_ctrl->get_tx_pga_gain();          return; @@ -138,16 +136,15 @@ void usrp1_impl::tx_codec_get(const wax::obj &key_, wax::obj &val)      }  } -void usrp1_impl::tx_codec_set(const wax::obj &, const wax::obj &) +void usrp1_impl::tx_codec_set(const wax::obj &key_, const wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the set request conditioned on the key      switch(key.as<codec_prop_t>()){      case CODEC_PROP_GAIN_I: //only one gain for I and Q      case CODEC_PROP_GAIN_Q: -        UHD_ASSERT_THROW(name == ad9862_pga_gain_name); +        UHD_ASSERT_THROW(key.name == ad9862_pga_gain_name);          _codec_ctrl->set_tx_pga_gain(val.as<float>());          return; diff --git a/host/lib/usrp/usrp1/dboard_iface.cpp b/host/lib/usrp/usrp1/dboard_iface.cpp index 11ad3fe8a..ef6a1e67b 100644 --- a/host/lib/usrp/usrp1/dboard_iface.cpp +++ b/host/lib/usrp/usrp1/dboard_iface.cpp @@ -51,9 +51,12 @@ public:          /* NOP */      } -    std::string get_mboard_name() +    special_props_t get_special_props()      { -        return "usrp1"; +        special_props_t props; +        props.soft_clock_divider = true; +        props.mangle_i2c_addrs = false; //TODO true on side B +        return props;      }      void write_aux_dac(unit_t, aux_dac_t, float); diff --git a/host/lib/usrp/usrp1/dboard_impl.cpp b/host/lib/usrp/usrp1/dboard_impl.cpp index 4f2836ea9..9df87432d 100644 --- a/host/lib/usrp/usrp1/dboard_impl.cpp +++ b/host/lib/usrp/usrp1/dboard_impl.cpp @@ -82,8 +82,7 @@ void usrp1_impl::dboard_init(void)   **********************************************************************/  void usrp1_impl::rx_dboard_get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<dboard_prop_t>()){ @@ -92,7 +91,7 @@ void usrp1_impl::rx_dboard_get(const wax::obj &key_, wax::obj &val)          return;      case DBOARD_PROP_SUBDEV: -        val = _dboard_manager->get_rx_subdev(name); +        val = _dboard_manager->get_rx_subdev(key.name);          return;      case DBOARD_PROP_SUBDEV_NAMES: @@ -112,7 +111,7 @@ void usrp1_impl::rx_dboard_get(const wax::obj &key_, wax::obj &val)          return;      case DBOARD_PROP_GAIN_GROUP: -        val = make_gain_group(_dboard_manager->get_rx_subdev(name), +        val = make_gain_group(_dboard_manager->get_rx_subdev(key.name),                                _rx_codec_proxy->get_link());          return; @@ -142,8 +141,7 @@ void usrp1_impl::rx_dboard_set(const wax::obj &key, const wax::obj &val)   **********************************************************************/  void usrp1_impl::tx_dboard_get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<dboard_prop_t>()){ @@ -152,7 +150,7 @@ void usrp1_impl::tx_dboard_get(const wax::obj &key_, wax::obj &val)          return;      case DBOARD_PROP_SUBDEV: -        val = _dboard_manager->get_tx_subdev(name); +        val = _dboard_manager->get_tx_subdev(key.name);          return;      case DBOARD_PROP_SUBDEV_NAMES: @@ -172,7 +170,7 @@ void usrp1_impl::tx_dboard_get(const wax::obj &key_, wax::obj &val)          return;      case DBOARD_PROP_GAIN_GROUP: -        val = make_gain_group(_dboard_manager->get_tx_subdev(name), +        val = make_gain_group(_dboard_manager->get_tx_subdev(key.name),                                _tx_codec_proxy->get_link());          return; diff --git a/host/lib/usrp/usrp1/mboard_impl.cpp b/host/lib/usrp/usrp1/mboard_impl.cpp index ee1ba305b..2514072e0 100644 --- a/host/lib/usrp/usrp1/mboard_impl.cpp +++ b/host/lib/usrp/usrp1/mboard_impl.cpp @@ -111,9 +111,7 @@ void usrp1_impl::issue_stream_cmd(const stream_cmd_t &stream_cmd)   **********************************************************************/  void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; -    std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<mboard_prop_t>()){ @@ -126,7 +124,7 @@ void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val)          return;      case MBOARD_PROP_RX_DBOARD: -        UHD_ASSERT_THROW(name == ""); +        UHD_ASSERT_THROW(key.name == "");          val = _rx_dboard_proxy->get_link();          return; @@ -135,7 +133,7 @@ void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val)          return;      case MBOARD_PROP_TX_DBOARD: -        UHD_ASSERT_THROW(name == ""); +        UHD_ASSERT_THROW(key.name == "");          val = _tx_dboard_proxy->get_link();          return; @@ -144,7 +142,7 @@ void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val)          return;      case MBOARD_PROP_RX_DSP: -        UHD_ASSERT_THROW(name == ""); +        UHD_ASSERT_THROW(key.name == "");          val = _rx_ddc_proxy->get_link();          return; @@ -153,7 +151,7 @@ void usrp1_impl::mboard_get(const wax::obj &key_, wax::obj &val)          return;      case MBOARD_PROP_TX_DSP: -        UHD_ASSERT_THROW(name == ""); +        UHD_ASSERT_THROW(key.name == "");          val = _tx_duc_proxy->get_link();          return; diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index 4cb286354..1435b981c 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -165,8 +165,7 @@ usrp1_impl::~usrp1_impl(void){   **********************************************************************/  void usrp1_impl::get(const wax::obj &key_, wax::obj &val)  { -    wax::obj key; std::string name; -    boost::tie(key, name) = extract_named_prop(key_); +    named_prop_t key = named_prop_t::extract(key_);      //handle the get request conditioned on the key      switch(key.as<device_prop_t>()){ @@ -175,7 +174,7 @@ void usrp1_impl::get(const wax::obj &key_, wax::obj &val)          return;      case DEVICE_PROP_MBOARD: -        UHD_ASSERT_THROW(name == ""); +        UHD_ASSERT_THROW(key.name == "");          val = _mboard_proxy->get_link();          return; | 
