diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/transport/udp_zero_copy_asio.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_basic_and_lf.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_dbsrx.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_rfx.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_tvrx.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_unknown.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_wbx.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/dboard_manager.cpp | 4 | ||||
| -rw-r--r-- | host/lib/usrp/multi_usrp.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/mboard_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.cpp | 2 | ||||
| -rw-r--r-- | host/lib/usrp/wrapper_utils.hpp | 4 | ||||
| -rw-r--r-- | host/lib/utils/thread_priority.cpp | 2 | ||||
| -rw-r--r-- | host/lib/utils/warning.cpp | 59 | 
14 files changed, 77 insertions, 26 deletions
diff --git a/host/lib/transport/udp_zero_copy_asio.cpp b/host/lib/transport/udp_zero_copy_asio.cpp index d84aeefdd..ed29864e9 100644 --- a/host/lib/transport/udp_zero_copy_asio.cpp +++ b/host/lib/transport/udp_zero_copy_asio.cpp @@ -336,7 +336,7 @@ template<typename Opt> static void resize_buff_helper(          else std::cout << boost::format(              "Current %s sock buff size: %d bytes"          ) % name % actual_size << std::endl; -        if (actual_size < target_size) uhd::print_warning(str(boost::format( +        if (actual_size < target_size) uhd::warning::post(str(boost::format(              "The %s buffer is smaller than the requested size.\n"              "The minimum recommended buffer size is %d bytes.\n"              "See the transport application notes on buffer resizing.\n%s" diff --git a/host/lib/usrp/dboard/db_basic_and_lf.cpp b/host/lib/usrp/dboard/db_basic_and_lf.cpp index 5a87f4ecf..4c49b3bff 100644 --- a/host/lib/usrp/dboard/db_basic_and_lf.cpp +++ b/host/lib/usrp/dboard/db_basic_and_lf.cpp @@ -191,7 +191,7 @@ void basic_rx::rx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("%s: No tunable bandwidth, fixed filtered to %0.2fMHz")                  % get_rx_id().to_pp_string() % _max_freq              ) @@ -302,7 +302,7 @@ void basic_tx::tx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("%s: No tunable bandwidth, fixed filtered to %0.2fMHz")                  % get_tx_id().to_pp_string() % _max_freq              ) diff --git a/host/lib/usrp/dboard/db_dbsrx.cpp b/host/lib/usrp/dboard/db_dbsrx.cpp index 10e7f292b..85251bdf9 100644 --- a/host/lib/usrp/dboard/db_dbsrx.cpp +++ b/host/lib/usrp/dboard/db_dbsrx.cpp @@ -175,7 +175,7 @@ UHD_STATIC_BLOCK(reg_dbsrx_dboard){  dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){      //warn user about incorrect DBID on USRP1, requires R193 populated      if (this->get_iface()->get_special_props().soft_clock_divider and this->get_rx_id() == 0x000D) -        uhd::print_warning( +        uhd::warning::post(              str(boost::format(                  "DBSRX: incorrect dbid\n"                  "Expected dbid 0x0002 and R193\n" @@ -186,7 +186,7 @@ dbsrx::dbsrx(ctor_args_t args) : rx_dboard_base(args){      //warn user about incorrect DBID on non-USRP1, requires R194 populated      if (not this->get_iface()->get_special_props().soft_clock_divider and this->get_rx_id() == 0x0002) -        uhd::print_warning( +        uhd::warning::post(              str(boost::format(                  "DBSRX: incorrect dbid\n"                  "Expected dbid 0x000D and R194\n" @@ -342,7 +342,7 @@ void dbsrx::set_lo_freq(double target_freq){          //vtune is too low, try lower frequency vco          if (_max2118_read_regs.adc == 0){              if (_max2118_write_regs.osc_band == 0){ -                uhd::print_warning( +                uhd::warning::post(                      str(boost::format(                          "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"                           ) % int(_max2118_write_regs.osc_band)) @@ -356,7 +356,7 @@ void dbsrx::set_lo_freq(double target_freq){          //vtune is too high, try higher frequency vco          if (_max2118_read_regs.adc == 7){              if (_max2118_write_regs.osc_band == 7){ -                uhd::print_warning( +                uhd::warning::post(                      str(boost::format(                          "DBSRX: Tuning exceeded vco range, _max2118_write_regs.osc_band == %d\n"                           ) % int(_max2118_write_regs.osc_band)) diff --git a/host/lib/usrp/dboard/db_rfx.cpp b/host/lib/usrp/dboard/db_rfx.cpp index 0eeb0bfdf..12e458d8c 100644 --- a/host/lib/usrp/dboard/db_rfx.cpp +++ b/host/lib/usrp/dboard/db_rfx.cpp @@ -487,7 +487,7 @@ void rfx_xcvr::rx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("RFX: No tunable bandwidth, fixed filtered to 40MHz"))          );          return; @@ -584,7 +584,7 @@ void rfx_xcvr::tx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("RFX: No tunable bandwidth, fixed filtered to 40MHz"))          );          return; diff --git a/host/lib/usrp/dboard/db_tvrx.cpp b/host/lib/usrp/dboard/db_tvrx.cpp index c7aecf195..1f3c76556 100644 --- a/host/lib/usrp/dboard/db_tvrx.cpp +++ b/host/lib/usrp/dboard/db_tvrx.cpp @@ -484,7 +484,7 @@ void tvrx::rx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("TVRX: No tunable bandwidth, fixed filtered to 6MHz"))          );          return; diff --git a/host/lib/usrp/dboard/db_unknown.cpp b/host/lib/usrp/dboard/db_unknown.cpp index 11293a1ba..a342471c4 100644 --- a/host/lib/usrp/dboard/db_unknown.cpp +++ b/host/lib/usrp/dboard/db_unknown.cpp @@ -164,7 +164,7 @@ void unknown_rx::rx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("Unknown Daughterboard: No tunable bandwidth, fixed filtered to 0.0MHz"))          );          return; @@ -270,7 +270,7 @@ void unknown_tx::tx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("Unknown Daughterboard: No tunable bandwidth, fixed filtered to 0.0MHz"))          );          return; diff --git a/host/lib/usrp/dboard/db_wbx.cpp b/host/lib/usrp/dboard/db_wbx.cpp index b07f179a3..647f1b975 100644 --- a/host/lib/usrp/dboard/db_wbx.cpp +++ b/host/lib/usrp/dboard/db_wbx.cpp @@ -556,7 +556,7 @@ void wbx_xcvr::rx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("WBX: No tunable bandwidth, fixed filtered to 40MHz"))          );          return; @@ -657,7 +657,7 @@ void wbx_xcvr::tx_set(const wax::obj &key_, const wax::obj &val){          return; //always enabled      case SUBDEV_PROP_BANDWIDTH: -        uhd::print_warning( +        uhd::warning::post(              str(boost::format("WBX: No tunable bandwidth, fixed filtered to 40MHz"))          );          return; diff --git a/host/lib/usrp/dboard_manager.cpp b/host/lib/usrp/dboard_manager.cpp index d73a698ae..5a98bb8eb 100644 --- a/host/lib/usrp/dboard_manager.cpp +++ b/host/lib/usrp/dboard_manager.cpp @@ -189,7 +189,7 @@ static args_t get_dboard_args(      //verify that there is a registered constructor for this id      if (not get_id_to_args_map().has_key(dboard_id)){ -        uhd::print_warning(str(boost::format( +        uhd::warning::post(str(boost::format(              "Unknown dboard ID: %s.\n"          ) % dboard_id.to_pp_string()));          return get_dboard_args(unit, dboard_id, true); @@ -217,7 +217,7 @@ dboard_manager_impl::dboard_manager_impl(      //warn for invalid dboard id xcvr combinations      if (rx_dboard_is_xcvr != this_dboard_is_xcvr or tx_dboard_is_xcvr != this_dboard_is_xcvr){ -        uhd::print_warning(str(boost::format( +        uhd::warning::post(str(boost::format(              "Unknown transceiver board ID combination...\n"              "RX dboard ID: %s\n"              "TX dboard ID: %s\n" diff --git a/host/lib/usrp/multi_usrp.cpp b/host/lib/usrp/multi_usrp.cpp index 8b82502ba..024a6152d 100644 --- a/host/lib/usrp/multi_usrp.cpp +++ b/host/lib/usrp/multi_usrp.cpp @@ -145,7 +145,7 @@ public:              time_spec_t time_0 = _mboard(0)[MBOARD_PROP_TIME_NOW].as<time_spec_t>();              time_spec_t time_i = _mboard(m)[MBOARD_PROP_TIME_NOW].as<time_spec_t>();              if (time_i < time_0 or (time_i - time_0) > time_spec_t(0.01)){ //10 ms: greater than RTT but not too big -                uhd::print_warning(str(boost::format( +                uhd::warning::post(str(boost::format(                      "Detected time deviation between board %d and board 0.\n"                      "Board 0 time is %f seconds.\n"                      "Board %d time is %f seconds.\n" diff --git a/host/lib/usrp/usrp1/mboard_impl.cpp b/host/lib/usrp/usrp1/mboard_impl.cpp index fe3774eb4..669b20efa 100644 --- a/host/lib/usrp/usrp1/mboard_impl.cpp +++ b/host/lib/usrp/usrp1/mboard_impl.cpp @@ -98,7 +98,7 @@ static boost::uint32_t calc_rx_mux(      //    for all quadrature sources: Z = 0      //    for mixed sources: warning + Z = 0      int Z = (num_quads > 0)? 0 : 1; -    if (num_quads != 0 and num_reals != 0) uhd::print_warning( +    if (num_quads != 0 and num_reals != 0) uhd::warning::post(          "Mixing real and quadrature rx subdevices is not supported.\n"          "The Q input to the real source(s) will be non-zero.\n"      ); diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index 276ca86f6..314384e72 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -64,7 +64,7 @@ static device_addrs_t usrp1_find(const device_addr_t &hint)          );      }      catch(...){ -        uhd::print_warning( +        uhd::warning::post(              "Could not locate USRP1 firmware.\n"              "Please install the images package.\n"          ); diff --git a/host/lib/usrp/wrapper_utils.hpp b/host/lib/usrp/wrapper_utils.hpp index aee230fc0..6f9fdbfca 100644 --- a/host/lib/usrp/wrapper_utils.hpp +++ b/host/lib/usrp/wrapper_utils.hpp @@ -40,7 +40,7 @@ static inline void do_samp_rate_warning_message(  ){      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( +        uhd::warning::post(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" @@ -55,7 +55,7 @@ static inline void do_tune_freq_warning_message(  ){      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( +        uhd::warning::post(str(boost::format(              "The hardware does not support the requested %s frequency:\n"              "Target frequency: %f MHz\n"              "Actual frequency: %f MHz\n" diff --git a/host/lib/utils/thread_priority.cpp b/host/lib/utils/thread_priority.cpp index f09d1b1d6..40b74f655 100644 --- a/host/lib/utils/thread_priority.cpp +++ b/host/lib/utils/thread_priority.cpp @@ -26,7 +26,7 @@ bool uhd::set_thread_priority_safe(float priority, bool realtime){          set_thread_priority(priority, realtime);          return true;      }catch(const std::exception &e){ -        uhd::print_warning(str(boost::format( +        uhd::warning::post(str(boost::format(              "%s\n"              "Failed to set thread priority %d (%s):\n"              "Performance may be negatively affected.\n" diff --git a/host/lib/utils/warning.cpp b/host/lib/utils/warning.cpp index 8a7d35a23..05be7ae4d 100644 --- a/host/lib/utils/warning.cpp +++ b/host/lib/utils/warning.cpp @@ -17,16 +17,67 @@  #include <uhd/utils/warning.hpp>  #include <uhd/utils/algorithm.hpp> +#include <uhd/utils/static.hpp> +#include <uhd/types/dict.hpp>  #include <boost/foreach.hpp> +#include <sstream> +#include <stdexcept>  #include <iostream>  #include <vector>  using namespace uhd; -void uhd::print_warning(const std::string &msg){ -    //print the warning message -    std::cerr << std::endl << "Warning:" << std::endl; +/*********************************************************************** + * Registry implementation + **********************************************************************/ +//create the registry for the handlers +typedef uhd::dict<std::string, warning::handler_t> registry_t; +UHD_SINGLETON_FCN(registry_t, get_registry) + +//the default warning handler +static void stderr_warning(const std::string &msg){ +    std::cerr << msg; +} + +//register a default handler +UHD_STATIC_BLOCK(warning_register_default){ +    warning::register_handler("default", &stderr_warning); +} + +/*********************************************************************** + * Post + format + **********************************************************************/ +void warning::post(const std::string &msg){ +    std::stringstream ss; + +    //format the warning message +    ss << std::endl << "Warning:" << std::endl;      BOOST_FOREACH(const std::string &line, std::split_string(msg, "\n")){ -        std::cerr << "    " << line << std::endl; +        ss << "    " << line << std::endl; +    } + +    //post the formatted message +    BOOST_FOREACH(const std::string &name, get_registry().keys()){ +        get_registry()[name](ss.str());      }  } + +/*********************************************************************** + * Registry accessor functions + **********************************************************************/ +void warning::register_handler( +    const std::string &name, const handler_t &handler +){ +    get_registry()[name] = handler; +} + +warning::handler_t warning::unregister_handler(const std::string &name){ +    if (not get_registry().has_key(name)) throw std::runtime_error( +        "The warning registry does not have a handler registered to " + name +    ); +    return get_registry().pop(name); +} + +const std::vector<std::string> warning::registry_names(void){ +    return get_registry().keys(); +}  | 
