diff options
| author | Josh Blum <josh@joshknows.com> | 2010-08-15 21:34:16 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-08-15 21:34:16 -0700 | 
| commit | 58519b292b561cbec5eb41c85f85c8c6bd4a06fe (patch) | |
| tree | 23b2bf3e639640364cc29ff5105977c3a4d2cd17 | |
| parent | 7b084e3af206afa20ff5a026ebf5d7e49a755def (diff) | |
| download | uhd-58519b292b561cbec5eb41c85f85c8c6bd4a06fe.tar.gz uhd-58519b292b561cbec5eb41c85f85c8c6bd4a06fe.tar.bz2 uhd-58519b292b561cbec5eb41c85f85c8c6bd4a06fe.zip | |
usrp: moved usrp utils into public include space
| -rw-r--r-- | host/include/uhd/usrp/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | host/include/uhd/usrp/dsp_utils.hpp | 99 | ||||
| -rw-r--r-- | host/include/uhd/usrp/misc_utils.hpp (renamed from host/lib/usrp/misc_utils.hpp) | 12 | ||||
| -rw-r--r-- | host/lib/usrp/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | host/lib/usrp/dsp_utils.cpp | 124 | ||||
| -rw-r--r-- | host/lib/usrp/dsp_utils.hpp | 187 | ||||
| -rw-r--r-- | host/lib/usrp/misc_utils.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/dboard_impl.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/dsp_impl.cpp | 10 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/mboard_impl.cpp | 4 | 
10 files changed, 242 insertions, 205 deletions
| diff --git a/host/include/uhd/usrp/CMakeLists.txt b/host/include/uhd/usrp/CMakeLists.txt index 76ee24e5f..130956f8a 100644 --- a/host/include/uhd/usrp/CMakeLists.txt +++ b/host/include/uhd/usrp/CMakeLists.txt @@ -33,6 +33,8 @@ INSTALL(FILES      dboard_manager.hpp      ### utilities ### +    dsp_utils.hpp +    misc_utils.hpp      subdev_spec.hpp      tune_helper.hpp diff --git a/host/include/uhd/usrp/dsp_utils.hpp b/host/include/uhd/usrp/dsp_utils.hpp new file mode 100644 index 000000000..8ec04dd2f --- /dev/null +++ b/host/include/uhd/usrp/dsp_utils.hpp @@ -0,0 +1,99 @@ +// +// 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_UHD_USRP_DSP_UTILS_HPP +#define INCLUDED_UHD_USRP_DSP_UTILS_HPP + +#include <uhd/config.hpp> +#include <uhd/types/stream_cmd.hpp> +#include <uhd/usrp/subdev_props.hpp> +#include <boost/cstdint.hpp> + +namespace uhd{ namespace usrp{ + +namespace dsp_type1{ + +    /*! +     * Calculate the rx mux word from properties. +     * \param subdev_conn the subdev connection type +     * \return the 32-bit rx mux control word +     */ +    UHD_API boost::uint32_t calc_rx_mux_word(subdev_conn_t subdev_conn); + +    /*! +     * Calculate the tx mux word from properties. +     * \param subdev_conn the subdev connection type +     * \return the 32-bit tx mux control word +     */ +    UHD_API boost::uint32_t calc_tx_mux_word(subdev_conn_t subdev_conn); + +    /*! +     * Calculate the cordic word from the frequency and clock rate. +     * The frequency will be set to the actual (possible) frequency. +     * +     * \param freq the requested frequency in Hz +     * \param codec_rate the dsp codec rate in Hz +     * \return the 32-bit cordic control word +     */ +    UHD_API boost::uint32_t calc_cordic_word_and_update( +        double &freq, double codec_rate +    ); + +    /*! +     * Calculate the CIC filter word from the rate. +     * Check if requested decim/interp rate is: +     *      multiple of 4, enable two halfband filters +     *      multiple of 2, enable one halfband filter +     *      handle remainder in CIC +     * +     * \param rate the requested rate in Sps +     * \return the 32-bit cic filter control word +     */ +    UHD_API boost::uint32_t calc_cic_filter_word(unsigned rate); + +    /*! +     * Calculate the IQ scale factor word from I and Q components. +     * \param i the I component of the scalar +     * \param q the Q component of the scalar +     * \return the 32-bit scale factor control word +     */ +    UHD_API boost::uint32_t calc_iq_scale_word( +        boost::int16_t i, boost::int16_t q +    ); + +    /*! +     * Calculate the IQ scale factor word from the rate. +     * \param rate the requested rate in Sps +     * \return the 32-bit scale factor control word +     */ +    UHD_API boost::uint32_t calc_iq_scale_word(unsigned rate); + +    /*! +     * Calculate the stream command word from the stream command struct. +     * \param stream_cmd the requested stream command with mode, flags, timestamp +     * \param num_samps_continuous number of samples to request in continuous mode +     * \return the 32-bit stream command word +     */ +    UHD_API boost::uint32_t calc_stream_cmd_word( +        const stream_cmd_t &stream_cmd, size_t num_samps_continuous +    ); + +} //namespace dsp_type1 + +}} //namespace + +#endif /* INCLUDED_UHD_USRP_DSP_UTILS_HPP */ diff --git a/host/lib/usrp/misc_utils.hpp b/host/include/uhd/usrp/misc_utils.hpp index e5d3bd849..14db80162 100644 --- a/host/lib/usrp/misc_utils.hpp +++ b/host/include/uhd/usrp/misc_utils.hpp @@ -15,8 +15,8 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // -#ifndef INCLUDED_LIBUHD_USRP_MISC_UTILS_HPP -#define INCLUDED_LIBUHD_USRP_MISC_UTILS_HPP +#ifndef INCLUDED_UHD_USRP_MISC_UTILS_HPP +#define INCLUDED_UHD_USRP_MISC_UTILS_HPP  #include <uhd/config.hpp>  #include <uhd/wax.hpp> @@ -28,7 +28,7 @@ namespace uhd{ namespace usrp{      /*!       * Create a gain group that represents the subdevice and its codec.       */ -    gain_group::sptr make_gain_group(wax::obj subdev, wax::obj codec); +    UHD_API gain_group::sptr make_gain_group(wax::obj subdev, wax::obj codec);      /*!       * Verify the rx subdevice specification. @@ -37,7 +37,7 @@ namespace uhd{ namespace usrp{       * \param mboard the motherboard properties object       * \throw exception when the subdev spec is invalid       */ -    void verify_rx_subdev_spec(subdev_spec_t &subdev_spec, wax::obj mboard); +    UHD_API void verify_rx_subdev_spec(subdev_spec_t &subdev_spec, wax::obj mboard);      /*!       * Verify the tx subdevice specification. @@ -46,9 +46,9 @@ namespace uhd{ namespace usrp{       * \param mboard the motherboard properties object       * \throw exception when the subdev spec is invalid       */ -    void verify_tx_subdev_spec(subdev_spec_t &subdev_spec, wax::obj mboard); +    UHD_API void verify_tx_subdev_spec(subdev_spec_t &subdev_spec, wax::obj mboard);  }} //namespace -#endif /* INCLUDED_LIBUHD_USRP_MISC_UTILS_HPP */ +#endif /* INCLUDED_UHD_USRP_MISC_UTILS_HPP */ diff --git a/host/lib/usrp/CMakeLists.txt b/host/lib/usrp/CMakeLists.txt index d951ab412..2b408e479 100644 --- a/host/lib/usrp/CMakeLists.txt +++ b/host/lib/usrp/CMakeLists.txt @@ -22,10 +22,9 @@ LIBUHD_APPEND_SOURCES(      ${CMAKE_SOURCE_DIR}/lib/usrp/dboard_eeprom.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/dboard_id.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/dboard_manager.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/dsp_utils.hpp +    ${CMAKE_SOURCE_DIR}/lib/usrp/dsp_utils.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/mimo_usrp.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/misc_utils.cpp -    ${CMAKE_SOURCE_DIR}/lib/usrp/misc_utils.hpp      ${CMAKE_SOURCE_DIR}/lib/usrp/simple_usrp.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/subdev_spec.cpp      ${CMAKE_SOURCE_DIR}/lib/usrp/tune_helper.cpp diff --git a/host/lib/usrp/dsp_utils.cpp b/host/lib/usrp/dsp_utils.cpp new file mode 100644 index 000000000..fe1313af1 --- /dev/null +++ b/host/lib/usrp/dsp_utils.cpp @@ -0,0 +1,124 @@ +// +// 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/>. +// + +#include <uhd/usrp/dsp_utils.hpp> +#include <uhd/types/dict.hpp> +#include <uhd/utils/assert.hpp> +#include <boost/assign/list_of.hpp> +#include <boost/tuple/tuple.hpp> +#include <boost/math/special_functions/round.hpp> +#include <cmath> + +using namespace uhd; +using namespace uhd::usrp; + +template <class T> T ceil_log2(T num){ +    return std::ceil(std::log(num)/std::log(T(2))); +} + +boost::uint32_t dsp_type1::calc_rx_mux_word(subdev_conn_t subdev_conn){ +    switch(subdev_conn){ +    case SUBDEV_CONN_COMPLEX_IQ: return (0x1 << 2) | (0x0 << 0); //DDC0Q=ADC1, DDC0I=ADC0 +    case SUBDEV_CONN_COMPLEX_QI: return (0x0 << 2) | (0x1 << 0); //DDC0Q=ADC0, DDC0I=ADC1 +    case SUBDEV_CONN_REAL_I:     return (0x3 << 2) | (0x0 << 0); //DDC0Q=ZERO, DDC0I=ADC0 +    case SUBDEV_CONN_REAL_Q:     return (0x1 << 2) | (0x3 << 0); //DDC0Q=ADC1, DDC0I=ZERO +    default:                     UHD_THROW_INVALID_CODE_PATH(); +    } +} + +boost::uint32_t dsp_type1::calc_tx_mux_word(subdev_conn_t subdev_conn){ +    switch(subdev_conn){ +    case SUBDEV_CONN_COMPLEX_IQ: return (0x1 << 4) | (0x0 << 0); //DAC1=DUC0Q, DAC0=DUC0I +    case SUBDEV_CONN_COMPLEX_QI: return (0x0 << 4) | (0x1 << 0); //DAC1=DUC0I, DAC0=DUC0Q +    case SUBDEV_CONN_REAL_I:     return (0xf << 4) | (0x0 << 0); //DAC1=ZERO,  DAC0=DUC0I +    case SUBDEV_CONN_REAL_Q:     return (0x0 << 4) | (0xf << 0); //DAC1=DUC0I, DAC0=ZERO +    default:                     UHD_THROW_INVALID_CODE_PATH(); +    } +} + +boost::uint32_t dsp_type1::calc_cordic_word_and_update( +    double &freq, +    double codec_rate +){ +    UHD_ASSERT_THROW(std::abs(freq) <= codec_rate/2.0); +    static const double scale_factor = std::pow(2.0, 32); + +    //calculate the freq register word (signed) +    boost::int32_t freq_word = boost::int32_t(boost::math::round((freq / codec_rate) * scale_factor)); + +    //update the actual frequency +    freq = (double(freq_word) / scale_factor) * codec_rate; + +    return boost::uint32_t(freq_word); +} + +boost::uint32_t dsp_type1::calc_cic_filter_word(unsigned rate){ +    int hb0 = 0, hb1 = 0; +    if (not (rate & 0x1)){ +        hb0 = 1; +        rate /= 2; +    } +    if (not (rate & 0x1)){ +        hb1 = 1; +        rate /= 2; +    } +    return (hb1 << 9) | (hb0 << 8) | (rate & 0xff); +} + +boost::uint32_t dsp_type1::calc_iq_scale_word( +    boost::int16_t i, boost::int16_t q +){ +    return (boost::uint32_t(i) << 16) | (boost::uint32_t(q) << 0); +} + +boost::uint32_t dsp_type1::calc_iq_scale_word(unsigned rate){ +    // Calculate CIC interpolation (i.e., without halfband interpolators) +    unsigned tmp_rate = calc_cic_filter_word(rate) & 0xff; + +    // Calculate closest multiplier constant to reverse gain absent scale multipliers +    double rate_cubed = std::pow(double(tmp_rate), 3); +    boost::int16_t scale = boost::math::iround((4096*std::pow(2, ceil_log2(rate_cubed)))/(1.65*rate_cubed)); +    return calc_iq_scale_word(scale, scale); +} + +boost::uint32_t dsp_type1::calc_stream_cmd_word( +    const stream_cmd_t &stream_cmd, size_t num_samps_continuous +){ +    UHD_ASSERT_THROW(stream_cmd.num_samps <= 0x3fffffff); + +    //setup the mode to instruction flags +    typedef boost::tuple<bool, bool, bool> inst_t; +    static const uhd::dict<stream_cmd_t::stream_mode_t, inst_t> mode_to_inst = boost::assign::map_list_of +                                                            //reload, chain, samps +        (stream_cmd_t::STREAM_MODE_START_CONTINUOUS,   inst_t(true,  true,  false)) +        (stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS,    inst_t(false, false, false)) +        (stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE, inst_t(false, false, true)) +        (stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_MORE, inst_t(false, true,  true)) +    ; + +    //setup the instruction flag values +    bool inst_reload, inst_chain, inst_samps; +    boost::tie(inst_reload, inst_chain, inst_samps) = mode_to_inst[stream_cmd.stream_mode]; + +    //calculate the word from flags and length +    boost::uint32_t word = 0; +    word |= boost::uint32_t((stream_cmd.stream_now)? 1 : 0) << 31; +    word |= boost::uint32_t((inst_chain)?            1 : 0) << 30; +    word |= boost::uint32_t((inst_reload)?           1 : 0) << 29; +    word |= (inst_samps)? stream_cmd.num_samps : ((inst_chain)? num_samps_continuous : 1); +    return word; +} diff --git a/host/lib/usrp/dsp_utils.hpp b/host/lib/usrp/dsp_utils.hpp deleted file mode 100644 index ebed12c41..000000000 --- a/host/lib/usrp/dsp_utils.hpp +++ /dev/null @@ -1,187 +0,0 @@ -// -// 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_DSP_UTILS_HPP -#define INCLUDED_LIBUHD_USRP_DSP_UTILS_HPP - -#include <uhd/config.hpp> -#include <uhd/types/dict.hpp> -#include <uhd/utils/assert.hpp> -#include <uhd/types/stream_cmd.hpp> -#include <uhd/usrp/subdev_props.hpp> -#include <boost/cstdint.hpp> -#include <boost/assign/list_of.hpp> -#include <boost/tuple/tuple.hpp> -#include <boost/math/special_functions/round.hpp> - -namespace uhd{ namespace usrp{ - -namespace dsp_type1{ - -    template <class T> T ceil_log2(T num){ -        return std::ceil(std::log(num)/std::log(T(2))); -    } - -    /*! -     * Calculate the rx mux word from properties. -     * \param subdev_conn the subdev connection type -     * \param the 32-bit rx mux control word -     */ -    static inline boost::uint32_t calc_rx_mux_word( -        subdev_conn_t subdev_conn -    ){ -        switch(subdev_conn){ -        case SUBDEV_CONN_COMPLEX_IQ: return (0x1 << 2) | (0x0 << 0); //DDC0Q=ADC1, DDC0I=ADC0 -        case SUBDEV_CONN_COMPLEX_QI: return (0x0 << 2) | (0x1 << 0); //DDC0Q=ADC0, DDC0I=ADC1 -        case SUBDEV_CONN_REAL_I:     return (0x3 << 2) | (0x0 << 0); //DDC0Q=ZERO, DDC0I=ADC0 -        case SUBDEV_CONN_REAL_Q:     return (0x1 << 2) | (0x3 << 0); //DDC0Q=ADC1, DDC0I=ZERO -        default:                     UHD_THROW_INVALID_CODE_PATH(); -        } -    } - -    /*! -     * Calculate the tx mux word from properties. -     * \param subdev_conn the subdev connection type -     * \param the 32-bit tx mux control word -     */ -    static inline boost::uint32_t calc_tx_mux_word( -        subdev_conn_t subdev_conn -    ){ -        switch(subdev_conn){ -        case SUBDEV_CONN_COMPLEX_IQ: return (0x1 << 4) | (0x0 << 0); //DAC1=DUC0Q, DAC0=DUC0I -        case SUBDEV_CONN_COMPLEX_QI: return (0x0 << 4) | (0x1 << 0); //DAC1=DUC0I, DAC0=DUC0Q -        case SUBDEV_CONN_REAL_I:     return (0xf << 4) | (0x0 << 0); //DAC1=ZERO,  DAC0=DUC0I -        case SUBDEV_CONN_REAL_Q:     return (0x0 << 4) | (0xf << 0); //DAC1=DUC0I, DAC0=ZERO -        default:                     UHD_THROW_INVALID_CODE_PATH(); -        } -    } - -    /*! -     * Calculate the cordic word from the frequency and clock rate. -     * The frequency will be set to the actual (possible) frequency. -     * -     * \param freq the requested frequency in Hz -     * \param codec_rate the dsp codec rate in Hz -     * \param the 32-bit cordic control word -     */ -    static inline boost::uint32_t calc_cordic_word_and_update( -        double &freq, -        double codec_rate -    ){ -        UHD_ASSERT_THROW(std::abs(freq) <= codec_rate/2.0); -        static const double scale_factor = std::pow(2.0, 32); - -        //calculate the freq register word (signed) -        boost::int32_t freq_word = boost::int32_t(boost::math::round((freq / codec_rate) * scale_factor)); - -        //update the actual frequency -        freq = (double(freq_word) / scale_factor) * codec_rate; - -        return boost::uint32_t(freq_word); -    } - -    /*! -     * Calculate the CIC filter word from the rate. -     * Check if requested decim/interp rate is: -     *      multiple of 4, enable two halfband filters -     *      multiple of 2, enable one halfband filter -     *      handle remainder in CIC -     * -     * \param rate the requested rate in Sps -     * \return the 32-bit cic filter control word -     */ -    template <typename dsp_rate_type> -    static inline boost::uint32_t calc_cic_filter_word(dsp_rate_type rate){ -        int hb0 = 0, hb1 = 0; -        if (not (rate & 0x1)){ -            hb0 = 1; -            rate /= 2; -        } -        if (not (rate & 0x1)){ -            hb1 = 1; -            rate /= 2; -        } -        return (hb1 << 9) | (hb0 << 8) | (rate & 0xff); -    } - -    /*! -     * Calculate the IQ scale factor word from I and Q components. -     * \param i the I component of the scalar -     * \param q the Q component of the scalar -     * \return the 32-bit scale factor control word -     */ -    static inline boost::uint32_t calc_iq_scale_word( -        boost::int16_t i, boost::int16_t q -    ){ -        return (boost::uint32_t(i) << 16) | (boost::uint32_t(q) << 0); -    } - -    /*! -     * Calculate the IQ scale factor word from the rate. -     * \param rate the requested rate in Sps -     * \return the 32-bit scale factor control word -     */ -    template <typename dsp_rate_type> -    static inline boost::uint32_t calc_iq_scale_word(dsp_rate_type rate){ -        // Calculate CIC interpolation (i.e., without halfband interpolators) -        dsp_rate_type tmp_rate = calc_cic_filter_word(rate) & 0xff; - -        // Calculate closest multiplier constant to reverse gain absent scale multipliers -        double rate_cubed = std::pow(double(tmp_rate), 3); -        boost::int16_t scale = boost::math::iround((4096*std::pow(2, ceil_log2(rate_cubed)))/(1.65*rate_cubed)); -        return calc_iq_scale_word(scale, scale); -    } - -    /*! -     * Calculate the stream command word from the stream command struct. -     * \param stream_cmd the requested stream command with mode, flags, timestamp -     * \param num_samps_continuous number of samples to request in continuous mode -     * \return the 32-bit stream command word -     */ -    static inline boost::uint32_t calc_stream_cmd_word( -        const stream_cmd_t &stream_cmd, size_t num_samps_continuous -    ){ -        UHD_ASSERT_THROW(stream_cmd.num_samps <= 0x3fffffff); - -        //setup the mode to instruction flags -        typedef boost::tuple<bool, bool, bool> inst_t; -        static const uhd::dict<stream_cmd_t::stream_mode_t, inst_t> mode_to_inst = boost::assign::map_list_of -                                                                //reload, chain, samps -            (stream_cmd_t::STREAM_MODE_START_CONTINUOUS,   inst_t(true,  true,  false)) -            (stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS,    inst_t(false, false, false)) -            (stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE, inst_t(false, false, true)) -            (stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_MORE, inst_t(false, true,  true)) -        ; - -        //setup the instruction flag values -        bool inst_reload, inst_chain, inst_samps; -        boost::tie(inst_reload, inst_chain, inst_samps) = mode_to_inst[stream_cmd.stream_mode]; - -        //calculate the word from flags and length -        boost::uint32_t word = 0; -        word |= boost::uint32_t((stream_cmd.stream_now)? 1 : 0) << 31; -        word |= boost::uint32_t((inst_chain)?            1 : 0) << 30; -        word |= boost::uint32_t((inst_reload)?           1 : 0) << 29; -        word |= (inst_samps)? stream_cmd.num_samps : ((inst_chain)? num_samps_continuous : 1); -        return word; -    } - -} //namespace dsp_type1 - -}} //namespace - -#endif /* INCLUDED_LIBUHD_USRP_DSP_UTILS_HPP */ diff --git a/host/lib/usrp/misc_utils.cpp b/host/lib/usrp/misc_utils.cpp index 930314fc2..41239b144 100644 --- a/host/lib/usrp/misc_utils.cpp +++ b/host/lib/usrp/misc_utils.cpp @@ -15,7 +15,7 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // -#include "misc_utils.hpp" +#include <uhd/usrp/misc_utils.hpp>  #include <uhd/utils/assert.hpp>  #include <uhd/utils/gain_group.hpp>  #include <uhd/usrp/dboard_id.hpp> diff --git a/host/lib/usrp/usrp2/dboard_impl.cpp b/host/lib/usrp/usrp2/dboard_impl.cpp index bafeb3f15..99599f11a 100644 --- a/host/lib/usrp/usrp2/dboard_impl.cpp +++ b/host/lib/usrp/usrp2/dboard_impl.cpp @@ -17,8 +17,8 @@  #include "usrp2_impl.hpp"  #include "usrp2_regs.hpp" -#include "../dsp_utils.hpp" -#include "../misc_utils.hpp" +#include <uhd/usrp/misc_utils.hpp> +#include <uhd/usrp/dsp_utils.hpp>  #include <uhd/usrp/subdev_props.hpp>  #include <uhd/usrp/dboard_props.hpp>  #include <uhd/utils/assert.hpp> diff --git a/host/lib/usrp/usrp2/dsp_impl.cpp b/host/lib/usrp/usrp2/dsp_impl.cpp index 7d9cdc441..347ec38af 100644 --- a/host/lib/usrp/usrp2/dsp_impl.cpp +++ b/host/lib/usrp/usrp2/dsp_impl.cpp @@ -17,9 +17,10 @@  #include "usrp2_impl.hpp"  #include "usrp2_regs.hpp" -#include "../dsp_utils.hpp" +#include <uhd/usrp/dsp_utils.hpp>  #include <uhd/usrp/dsp_props.hpp>  #include <boost/bind.hpp> +#include <cmath>  using namespace uhd;  using namespace uhd::usrp; @@ -30,10 +31,9 @@ static const size_t default_interp = 16;  /***********************************************************************   * DDC Helper Methods   **********************************************************************/ -template <class rate_t> static rate_t -pick_closest_rate(double exact_rate, const std::vector<rate_t> &rates){ -    rate_t closest_match = rates.at(0); -    BOOST_FOREACH(rate_t possible_rate, rates){ +static unsigned pick_closest_rate(double exact_rate, const std::vector<unsigned> &rates){ +    unsigned closest_match = rates.front(); +    BOOST_FOREACH(unsigned possible_rate, rates){          if(std::abs(exact_rate - possible_rate) < std::abs(exact_rate - closest_match))              closest_match = possible_rate;      } diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp index d354a943b..e3c5d5ed6 100644 --- a/host/lib/usrp/usrp2/mboard_impl.cpp +++ b/host/lib/usrp/usrp2/mboard_impl.cpp @@ -17,8 +17,8 @@  #include "usrp2_impl.hpp"  #include "usrp2_regs.hpp" -#include "../misc_utils.hpp" -#include "../dsp_utils.hpp" +#include <uhd/usrp/misc_utils.hpp> +#include <uhd/usrp/dsp_utils.hpp>  #include <uhd/usrp/mboard_props.hpp>  #include <uhd/utils/assert.hpp>  #include <uhd/utils/algorithm.hpp> | 
