diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/types.cpp | 9 | ||||
| -rw-r--r-- | host/lib/usrp/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/lib/usrp/subdev_spec.cpp | 64 | 
3 files changed, 71 insertions, 3 deletions
| diff --git a/host/lib/types.cpp b/host/lib/types.cpp index 1cfe84832..5c0fb1f42 100644 --- a/host/lib/types.cpp +++ b/host/lib/types.cpp @@ -36,6 +36,7 @@  #include <boost/thread.hpp>  #include <stdexcept>  #include <complex> +#include <sstream>  using namespace uhd; @@ -190,7 +191,7 @@ device_addr_t::device_addr_t(const std::string &args){          std::vector<std::string> key_val;          boost::split(key_val, pair, boost::is_any_of(pair_delim));          if (key_val.size() != 2) throw std::runtime_error("invalid args string: "+args); -        (*this)[trim(key_val[0])] = trim(key_val[1]); +        (*this)[trim(key_val.front())] = trim(key_val.back());      }  } @@ -198,16 +199,18 @@ std::string device_addr_t::to_pp_string(void) const{      if (this->size() == 0) return "Empty Device Address";      std::stringstream ss; +    ss << "Device Address:" << std::endl;      BOOST_FOREACH(std::string key, this->keys()){ -        ss << boost::format("%s: %s") % key % (*this)[key] << std::endl; +        ss << boost::format("    %s: %s") % key % (*this)[key] << std::endl;      }      return ss.str();  }  std::string device_addr_t::to_string(void) const{      std::string args_str; +    size_t count = 0;      BOOST_FOREACH(const std::string &key, this->keys()){ -        args_str += key + pair_delim + (*this)[key] + arg_delim; +        args_str += ((count++)? arg_delim : "") + key + pair_delim + (*this)[key];      }      return args_str;  } diff --git a/host/lib/usrp/CMakeLists.txt b/host/lib/usrp/CMakeLists.txt index 80ac537ee..a403296fa 100644 --- a/host/lib/usrp/CMakeLists.txt +++ b/host/lib/usrp/CMakeLists.txt @@ -25,6 +25,7 @@ LIBUHD_APPEND_SOURCES(      ${CMAKE_SOURCE_DIR}/lib/usrp/dsp_utils.hpp      ${CMAKE_SOURCE_DIR}/lib/usrp/mimo_usrp.cpp      ${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/subdev_spec.cpp b/host/lib/usrp/subdev_spec.cpp new file mode 100644 index 000000000..69ab6a339 --- /dev/null +++ b/host/lib/usrp/subdev_spec.cpp @@ -0,0 +1,64 @@ +// +// 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/subdev_spec.hpp> +#include <boost/algorithm/string.hpp> +#include <boost/format.hpp> +#include <boost/foreach.hpp> +#include <stdexcept> +#include <sstream> + +using namespace uhd; +using namespace uhd::usrp; + +subdev_spec_t::subdev_spec_t(const std::string &markup){ +    std::vector<std::string> pairs; +    boost::split(pairs, markup, boost::is_any_of("\t ")); +    BOOST_FOREACH(const std::string &pair, pairs){ +        if (pair == "") continue; +        std::vector<std::string> db_sd; +        boost::split(db_sd, pair, boost::is_any_of(":")); +        switch(db_sd.size()){ +        case 1: this->push_back(pair_t("", db_sd.front())); break; +        case 2: this->push_back(pair_t(db_sd.front(), db_sd.back())); break; +        default: throw std::runtime_error("invalid subdev-spec markup string: "+markup); +        } +    } +} + +std::string subdev_spec_t::to_pp_string(void) const{ +    if (this->size() == 0) return "Empty Subdevice Specification"; + +    std::stringstream ss; +    size_t count = 0; +    ss << "Subdevice Specification:" << std::endl; +    BOOST_FOREACH(const pair_t &pair, *this){ +        ss << boost::format( +            "    Channel %d: Daughterboard %s, Subdevice %s" +        ) % (count++) % pair.first % pair.second << std::endl; +    } +    return ss.str(); +} + +std::string subdev_spec_t::to_string(void) const{ +    std::string markup; +    size_t count = 0; +    BOOST_FOREACH(const pair_t &pair, *this){ +        markup += ((count++)? " " : "") + pair.first + ":" + pair.second; +    } +    return markup; +} | 
