diff options
| -rw-r--r-- | host/lib/usrp/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 24 | ||||
| -rw-r--r-- | host/lib/usrp/single_usrp.cpp | 24 | ||||
| -rw-r--r-- | host/lib/usrp/wrapper_utils.hpp | 66 | 
4 files changed, 97 insertions, 18 deletions
| diff --git a/host/lib/usrp/CMakeLists.txt b/host/lib/usrp/CMakeLists.txt index d8898caff..906a5ff29 100644 --- a/host/lib/usrp/CMakeLists.txt +++ b/host/lib/usrp/CMakeLists.txt @@ -30,6 +30,7 @@ LIBUHD_APPEND_SOURCES(      ${CMAKE_SOURCE_DIR}/lib/usrp/single_usrp.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/subdev_spec.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/tune_helper.cpp +    ${CMAKE_SOURCE_DIR}/lib/usrp/wrapper_utils.hpp  )  INCLUDE(${CMAKE_SOURCE_DIR}/lib/usrp/dboard/CMakeLists.txt) diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index d0fc5c0f6..7f7ea77b0 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -15,6 +15,7 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // +#include "wrapper_utils.hpp"  #include <uhd/usrp/multi_usrp.hpp>  #include <uhd/usrp/tune_helper.hpp>  #include <uhd/utils/assert.hpp> @@ -34,11 +35,6 @@  using namespace uhd;  using namespace uhd::usrp; -static inline freq_range_t add_dsp_shift(const freq_range_t &range, wax::obj dsp){ -    double codec_rate = dsp[DSP_PROP_CODEC_RATE].as<double>(); -    return freq_range_t(range.min - codec_rate/2.0, range.max + codec_rate/2.0); -} -  /***********************************************************************   * Simple USRP Implementation   **********************************************************************/ @@ -211,6 +207,7 @@ public:          for (size_t m = 0; m < get_num_mboards(); m++){              _rx_dsp(m)[DSP_PROP_HOST_RATE] = rate;          } +        do_samp_rate_warning_message(rate, get_rx_rate(), "RX");      }      double get_rx_rate(void){ @@ -219,12 +216,16 @@ public:      tune_result_t set_rx_freq(double target_freq, size_t chan){          size_t nchan = get_rx_num_channels(); -        return tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(nchan/chan), nchan%chan, target_freq); +        tune_result_t r = tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(nchan/chan), nchan%chan, target_freq); +        do_tune_freq_warning_message(target_freq, get_rx_freq(chan), "RX"); +        return r;      }      tune_result_t set_rx_freq(double target_freq, double lo_off, size_t chan){          size_t nchan = get_rx_num_channels(); -        return tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(nchan/chan), nchan%chan, target_freq, lo_off); +        tune_result_t r = tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(nchan/chan), nchan%chan, target_freq, lo_off); +        do_tune_freq_warning_message(target_freq, get_rx_freq(chan), "RX"); +        return r;      }      double get_rx_freq(size_t chan){ @@ -312,6 +313,7 @@ public:          for (size_t m = 0; m < get_num_mboards(); m++){              _tx_dsp(m)[DSP_PROP_HOST_RATE] = rate;          } +        do_samp_rate_warning_message(rate, get_tx_rate(), "TX");      }      double get_tx_rate(void){ @@ -320,12 +322,16 @@ public:      tune_result_t set_tx_freq(double target_freq, size_t chan){          size_t nchan = get_tx_num_channels(); -        return tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(nchan/chan), nchan%chan, target_freq); +        tune_result_t r = tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(nchan/chan), nchan%chan, target_freq); +        do_tune_freq_warning_message(target_freq, get_tx_freq(chan), "TX"); +        return r;      }      tune_result_t set_tx_freq(double target_freq, double lo_off, size_t chan){          size_t nchan = get_tx_num_channels(); -        return tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(nchan/chan), nchan%chan, target_freq, lo_off); +        tune_result_t r = tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(nchan/chan), nchan%chan, target_freq, lo_off); +        do_tune_freq_warning_message(target_freq, get_tx_freq(chan), "TX"); +        return r;      }      double get_tx_freq(size_t chan){ diff --git a/host/lib/usrp/single_usrp.cpp b/host/lib/usrp/single_usrp.cpp index fba04cd60..7a4df3eb5 100644 --- a/host/lib/usrp/single_usrp.cpp +++ b/host/lib/usrp/single_usrp.cpp @@ -15,6 +15,7 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // +#include "wrapper_utils.hpp"  #include <uhd/usrp/single_usrp.hpp>  #include <uhd/usrp/tune_helper.hpp>  #include <uhd/utils/assert.hpp> @@ -32,11 +33,6 @@  using namespace uhd;  using namespace uhd::usrp; -static inline freq_range_t add_dsp_shift(const freq_range_t &range, wax::obj dsp){ -    double codec_rate = dsp[DSP_PROP_CODEC_RATE].as<double>(); -    return freq_range_t(range.min - codec_rate/2.0, range.max + codec_rate/2.0); -} -  /***********************************************************************   * Simple USRP Implementation   **********************************************************************/ @@ -141,6 +137,7 @@ public:      void set_rx_rate(double rate){          _rx_dsp()[DSP_PROP_HOST_RATE] = rate; +        do_samp_rate_warning_message(rate, get_rx_rate(), "RX");      }      double get_rx_rate(void){ @@ -148,11 +145,15 @@ public:      }      tune_result_t set_rx_freq(double target_freq, size_t chan){ -        return tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(), chan, target_freq); +        tune_result_t r = tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(), chan, target_freq); +        do_tune_freq_warning_message(target_freq, get_rx_freq(chan), "RX"); +        return r;      }      tune_result_t set_rx_freq(double target_freq, double lo_off, size_t chan){ -        return tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(), chan, target_freq, lo_off); +        tune_result_t r = tune_rx_subdev_and_dsp(_rx_subdev(chan), _rx_dsp(), chan, target_freq, lo_off); +        do_tune_freq_warning_message(target_freq, get_rx_freq(chan), "RX"); +        return r;      }      double get_rx_freq(size_t chan){ @@ -220,6 +221,7 @@ public:      void set_tx_rate(double rate){          _tx_dsp()[DSP_PROP_HOST_RATE] = rate; +        do_samp_rate_warning_message(rate, get_tx_rate(), "TX");      }      double get_tx_rate(void){ @@ -227,11 +229,15 @@ public:      }      tune_result_t set_tx_freq(double target_freq, size_t chan){ -        return tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(), chan, target_freq); +        tune_result_t r = tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(), chan, target_freq); +        do_tune_freq_warning_message(target_freq, get_tx_freq(chan), "TX"); +        return r;      }      tune_result_t set_tx_freq(double target_freq, double lo_off, size_t chan){ -        return tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(), chan, target_freq, lo_off); +        tune_result_t r = tune_tx_subdev_and_dsp(_tx_subdev(chan), _tx_dsp(), chan, target_freq, lo_off); +        do_tune_freq_warning_message(target_freq, get_tx_freq(chan), "TX"); +        return r;      }      double get_tx_freq(size_t chan){ diff --git a/host/lib/usrp/wrapper_utils.hpp b/host/lib/usrp/wrapper_utils.hpp new file mode 100644 index 000000000..aee230fc0 --- /dev/null +++ b/host/lib/usrp/wrapper_utils.hpp @@ -0,0 +1,66 @@ +// +// Copyright 2010 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 +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. +// + +#ifndef INCLUDED_LIBUHD_USRP_WRAPPER_UTILS_HPP +#define INCLUDED_LIBUHD_USRP_WRAPPER_UTILS_HPP + +#include <uhd/wax.hpp> +#include <uhd/types/ranges.hpp> +#include <uhd/usrp/dsp_props.hpp> +#include <uhd/utils/warning.hpp> +#include <boost/format.hpp> +#include <cmath> + +static inline uhd::freq_range_t add_dsp_shift( +    const uhd::freq_range_t &range, +    wax::obj dsp +){ +    double codec_rate = dsp[uhd::usrp::DSP_PROP_CODEC_RATE].as<double>(); +    return uhd::freq_range_t(range.min - codec_rate/2.0, range.max + codec_rate/2.0); +} + +static inline void do_samp_rate_warning_message( +    double target_rate, +    double actual_rate, +    const std::string &xx +){ +    static const double max_allowed_error = 1.0; //Sps +    if (std::abs(target_rate - actual_rate) > max_allowed_error){ +        uhd::print_warning(str(boost::format( +            "The hardware does not support the requested %s sample rate:\n" +            "Target sample rate: %f MSps\n" +            "Actual sample rate: %f MSps\n" +        ) % xx % (target_rate/1e6) % (actual_rate/1e6))); +    } +} + +static inline void do_tune_freq_warning_message( +    double target_freq, +    double actual_freq, +    const std::string &xx +){ +    static const double max_allowed_error = 1.0; //Hz +    if (std::abs(target_freq - actual_freq) > max_allowed_error){ +        uhd::print_warning(str(boost::format( +            "The hardware does not support the requested %s frequency:\n" +            "Target frequency: %f MHz\n" +            "Actual frequency: %f MHz\n" +        ) % xx % (target_freq/1e6) % (actual_freq/1e6))); +    } +} + +#endif /* INCLUDED_LIBUHD_USRP_WRAPPER_UTILS_HPP */ | 
