summaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
Diffstat (limited to 'host')
-rw-r--r--host/lib/usrp/multi_usrp.cpp62
-rw-r--r--host/lib/utils/gain_group.cpp6
2 files changed, 59 insertions, 9 deletions
diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp
index 26ce1ccdd..4bd7d1bfe 100644
--- a/host/lib/usrp/multi_usrp.cpp
+++ b/host/lib/usrp/multi_usrp.cpp
@@ -35,6 +35,14 @@ using namespace uhd::usrp;
const std::string multi_usrp::ALL_GAINS = "";
+UHD_INLINE std::string string_vector_to_string(std::vector<std::string> values, std::string delimeter = std::string(" "))
+{
+ std::string out = "";
+ for (std::vector<std::string>::iterator iter = values.begin(); iter != values.end(); iter++)
+ out += delimeter + *iter;
+ return out;
+}
+
/***********************************************************************
* Helper methods
**********************************************************************/
@@ -620,15 +628,36 @@ public:
}
void set_rx_gain(double gain, const std::string &name, size_t chan){
- return rx_gain_group(chan)->set_value(gain, name);
+ try {
+ return rx_gain_group(chan)->set_value(gain, name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
double get_rx_gain(const std::string &name, size_t chan){
- return rx_gain_group(chan)->get_value(name);
+ try {
+ return rx_gain_group(chan)->get_value(name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
gain_range_t get_rx_gain_range(const std::string &name, size_t chan){
- return rx_gain_group(chan)->get_range(name);
+ try {
+ return rx_gain_group(chan)->get_range(name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
std::vector<std::string> get_rx_gain_names(size_t chan){
@@ -789,15 +818,36 @@ public:
}
void set_tx_gain(double gain, const std::string &name, size_t chan){
- return tx_gain_group(chan)->set_value(gain, name);
+ try {
+ return tx_gain_group(chan)->set_value(gain, name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
double get_tx_gain(const std::string &name, size_t chan){
- return tx_gain_group(chan)->get_value(name);
+ try {
+ return tx_gain_group(chan)->get_value(name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
gain_range_t get_tx_gain_range(const std::string &name, size_t chan){
- return tx_gain_group(chan)->get_range(name);
+ try {
+ return tx_gain_group(chan)->get_range(name);
+ } catch (uhd::key_error &e) {
+ std::stringstream err;
+ err << __FUNCTION__ << "(\"" << name << "\"): gain not found.\n" <<
+ "Available gains: " << string_vector_to_string(get_rx_gain_names(chan)) << std::endl;
+ throw uhd::exception::runtime_error(err.str());
+ }
}
std::vector<std::string> get_tx_gain_names(size_t chan){
diff --git a/host/lib/utils/gain_group.cpp b/host/lib/utils/gain_group.cpp
index 85f4977a6..d422b3d52 100644
--- a/host/lib/utils/gain_group.cpp
+++ b/host/lib/utils/gain_group.cpp
@@ -64,7 +64,7 @@ public:
}
gain_range_t get_range(const std::string &name){
- if (not name.empty()) return _name_to_fcns[name].get_range();
+ if (not name.empty()) return _name_to_fcns.get(name).get_range();
double overall_min = 0, overall_max = 0, overall_step = 0;
BOOST_FOREACH(const gain_fcns_t &fcns, get_all_fcns()){
@@ -79,7 +79,7 @@ public:
}
double get_value(const std::string &name){
- if (not name.empty()) return _name_to_fcns[name].get_value();
+ if (not name.empty()) return _name_to_fcns.get(name).get_value();
double overall_gain = 0;
BOOST_FOREACH(const gain_fcns_t &fcns, get_all_fcns()){
@@ -89,7 +89,7 @@ public:
}
void set_value(double gain, const std::string &name){
- if (not name.empty()) return _name_to_fcns[name].set_value(gain);
+ if (not name.empty()) return _name_to_fcns.get(name).set_value(gain);
std::vector<gain_fcns_t> all_fcns = get_all_fcns();
if (all_fcns.size() == 0) return; //nothing to set!