diff options
| -rw-r--r-- | host/include/uhd/simple_device.hpp | 4 | ||||
| -rw-r--r-- | host/include/uhd/usrp/dboard_base.hpp | 5 | ||||
| -rw-r--r-- | host/include/uhd/usrp/dboard_id.hpp | 9 | ||||
| -rw-r--r-- | host/include/uhd/usrp/dboard_manager.hpp | 2 | ||||
| -rw-r--r-- | host/include/uhd/utils.hpp | 5 | ||||
| -rw-r--r-- | host/lib/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/lib/simple_device.cpp | 14 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/basic.cpp | 282 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/dboards.hpp | 53 | ||||
| -rw-r--r-- | host/lib/usrp/dboard_id.cpp | 34 | ||||
| -rw-r--r-- | host/lib/usrp/dboard_manager.cpp | 40 | 
11 files changed, 307 insertions, 142 deletions
| diff --git a/host/include/uhd/simple_device.hpp b/host/include/uhd/simple_device.hpp index 64ec85a5c..69f13a8b5 100644 --- a/host/include/uhd/simple_device.hpp +++ b/host/include/uhd/simple_device.hpp @@ -70,7 +70,7 @@ public:      virtual double get_rx_rate(void) = 0;      virtual std::vector<double> get_rx_rates(void) = 0; -    virtual tune_result_t set_rx_freq(double target_freq, double lo_offset) = 0; +    virtual tune_result_t set_rx_freq(double freq) = 0;      virtual double get_rx_freq_min(void) = 0;      virtual double get_rx_freq_max(void) = 0; @@ -91,7 +91,7 @@ public:      virtual double get_tx_rate(void) = 0;      virtual std::vector<double> get_tx_rates(void) = 0; -    virtual tune_result_t set_tx_freq(double target_freq, double lo_offset) = 0; +    virtual tune_result_t set_tx_freq(double freq) = 0;      virtual double get_tx_freq_min(void) = 0;      virtual double get_tx_freq_max(void) = 0; diff --git a/host/include/uhd/usrp/dboard_base.hpp b/host/include/uhd/usrp/dboard_base.hpp index b5c0d40ed..9048344ac 100644 --- a/host/include/uhd/usrp/dboard_base.hpp +++ b/host/include/uhd/usrp/dboard_base.hpp @@ -56,9 +56,9 @@ protected:      dboard_id_t get_tx_id(void);  private: -    std::string        _subdev_name; +    std::string               _subdev_name;      dboard_interface::sptr    _dboard_interface; -    dboard_id_t        _rx_id, _tx_id; +    dboard_id_t               _rx_id, _tx_id;  };  /*! @@ -71,6 +71,7 @@ public:       * Create a new xcvr dboard object, override in subclasses.       */      xcvr_dboard_base(ctor_args_t const&); +      virtual ~xcvr_dboard_base(void);  }; diff --git a/host/include/uhd/usrp/dboard_id.hpp b/host/include/uhd/usrp/dboard_id.hpp index 65e3d5707..34406863d 100644 --- a/host/include/uhd/usrp/dboard_id.hpp +++ b/host/include/uhd/usrp/dboard_id.hpp @@ -16,17 +16,16 @@  //  #include <string> +#include <stdint.h>  #ifndef INCLUDED_UHD_USRP_DBOARD_ID_HPP  #define INCLUDED_UHD_USRP_DBOARD_ID_HPP  namespace uhd{ namespace usrp{ -enum dboard_id_t{ -    ID_NONE     = 0xffff, -    ID_BASIC_TX = 0x0000, -    ID_BASIC_RX = 0x0001 -}; +typedef uint16_t dboard_id_t; + +static const dboard_id_t ID_NONE = 0xffff;  namespace dboard_id{      std::string to_string(const dboard_id_t &id); diff --git a/host/include/uhd/usrp/dboard_manager.hpp b/host/include/uhd/usrp/dboard_manager.hpp index 042947ac4..cf69675fc 100644 --- a/host/include/uhd/usrp/dboard_manager.hpp +++ b/host/include/uhd/usrp/dboard_manager.hpp @@ -44,11 +44,13 @@ public:       *       * \param dboard_id the dboard id (rx or tx)       * \param dboard_ctor the dboard constructor function pointer +     * \param name the canonical name for the dboard represented       * \param subdev_names the names of the subdevs on this dboard       */      static void register_subdevs(          dboard_id_t dboard_id,          dboard_ctor_t dboard_ctor, +        const std::string &name,          const prop_names_t &subdev_names      ); diff --git a/host/include/uhd/utils.hpp b/host/include/uhd/utils.hpp index 25a7b5abd..e4cfd098b 100644 --- a/host/include/uhd/utils.hpp +++ b/host/include/uhd/utils.hpp @@ -24,6 +24,11 @@  #include <boost/current_function.hpp>  /*! + * Defines a static code block that will be called before main() + */ +#define STATIC_BLOCK(_name, _code) struct _name{_name(void){_code}} _name + +/*!   * Useful templated functions and classes that I like to pretend are part of stl   */  namespace std{ diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt index b141d67bb..1d2c5471b 100644 --- a/host/lib/CMakeLists.txt +++ b/host/lib/CMakeLists.txt @@ -30,7 +30,6 @@ SET(libuhd_sources      transport/vrt.cpp      usrp/dboard/basic.cpp      usrp/dboard_base.cpp -    usrp/dboard_id.cpp      usrp/dboard_interface.cpp      usrp/dboard_manager.cpp      usrp/usrp2/dboard_impl.cpp diff --git a/host/lib/simple_device.cpp b/host/lib/simple_device.cpp index 63a17c52d..76f3c1262 100644 --- a/host/lib/simple_device.cpp +++ b/host/lib/simple_device.cpp @@ -179,7 +179,12 @@ public:          return get_xx_rates(_rx_ddc[std::string("decims")], _rx_ddc[std::string("rate")]);      } -    tune_result_t set_rx_freq(double target_freq, double lo_offset){ +    tune_result_t set_rx_freq(double target_freq){ +        double lo_offset = 0.0; +        //if the local oscillator will be in the passband, use an offset +        if (wax::cast<bool>(_rx_subdev[SUBDEV_PROP_LO_INTERFERES])){ +            lo_offset = get_rx_rate()*2.0; +        }          return tune(target_freq, lo_offset, _rx_subdev, _rx_ddc, false/* not tx */);      } @@ -242,7 +247,12 @@ public:          return get_xx_rates(_tx_duc[std::string("interps")], _tx_duc[std::string("rate")]);      } -    tune_result_t set_tx_freq(double target_freq, double lo_offset){ +    tune_result_t set_tx_freq(double target_freq){ +        double lo_offset = 0.0; +        //if the local oscillator will be in the passband, use an offset +        if (wax::cast<bool>(_tx_subdev[SUBDEV_PROP_LO_INTERFERES])){ +            lo_offset = get_tx_rate()*2.0; +        }          return tune(target_freq, lo_offset, _tx_subdev, _tx_duc, true/* is tx */);      } diff --git a/host/lib/usrp/dboard/basic.cpp b/host/lib/usrp/dboard/basic.cpp index f39ebff2f..5e245a8cf 100644 --- a/host/lib/usrp/dboard/basic.cpp +++ b/host/lib/usrp/dboard/basic.cpp @@ -15,42 +15,294 @@  // along with this program.  If not, see <http://www.gnu.org/licenses/>.  // -#include "dboards.hpp" +#include <uhd/utils.hpp> +#include <uhd/props.hpp> +#include <uhd/usrp/dboard_base.hpp> +#include <uhd/usrp/dboard_manager.hpp> +#include <boost/assign/list_of.hpp> +#include <boost/format.hpp> + +using namespace uhd; +using namespace uhd::usrp; +using namespace boost::assign;  /*********************************************************************** - * Basic RX dboard + * The basic and lf boards: + *   They share a common class because only the frequency bounds differ.   **********************************************************************/ -basic_rx::basic_rx(ctor_args_t const& args) : rx_dboard_base(args){ -    /* NOP */ +class basic_rx : public rx_dboard_base{ +public: +    basic_rx(ctor_args_t const& args, freq_t max_freq); +    ~basic_rx(void); + +    void rx_get(const wax::obj &key, wax::obj &val); +    void rx_set(const wax::obj &key, const wax::obj &val); + +private: +    freq_t _max_freq; +}; + +class basic_tx : public tx_dboard_base{ +public: +    basic_tx(ctor_args_t const& args, freq_t max_freq); +    ~basic_tx(void); + +    void tx_get(const wax::obj &key, wax::obj &val); +    void tx_set(const wax::obj &key, const wax::obj &val); + +private: +    freq_t _max_freq; +}; + +/*********************************************************************** + * Register the basic and LF dboards + **********************************************************************/ +static dboard_base::sptr make_basic_rx(dboard_base::ctor_args_t const& args){ +    return dboard_base::sptr(new basic_rx(args, 90e9)); +} + +static dboard_base::sptr make_basic_tx(dboard_base::ctor_args_t const& args){ +    return dboard_base::sptr(new basic_tx(args, 90e9)); +} + +static dboard_base::sptr make_lf_rx(dboard_base::ctor_args_t const& args){ +    return dboard_base::sptr(new basic_rx(args, 32e6)); +} + +static dboard_base::sptr make_lf_tx(dboard_base::ctor_args_t const& args){ +    return dboard_base::sptr(new basic_tx(args, 32e6)); +} + +STATIC_BLOCK(reg_dboards, { +    dboard_manager::register_subdevs(0x0000, &make_basic_tx, "Basic TX", list_of("")); +    dboard_manager::register_subdevs(0x0001, &make_basic_rx, "Basic RX", list_of("a")("b")("ab")); +    dboard_manager::register_subdevs(0x000e, &make_lf_tx,    "LF TX",    list_of("")); +    dboard_manager::register_subdevs(0x000f, &make_lf_rx,    "LF RX",    list_of("a")("b")("ab")); +}); + +/*********************************************************************** + * Basic and LF RX dboard + **********************************************************************/ +basic_rx::basic_rx(ctor_args_t const& args, freq_t max_freq) : rx_dboard_base(args){ +    _max_freq = max_freq; +    // set the gpios to safe values (all inputs) +    get_interface()->set_gpio_ddr(dboard_interface::GPIO_RX_BANK, 0x0000, 0xffff);  }  basic_rx::~basic_rx(void){      /* NOP */  } -void basic_rx::rx_get(const wax::obj &, wax::obj &){ -    /* TODO */ +void basic_rx::rx_get(const wax::obj &key_, wax::obj &val){ +    wax::obj key; std::string name; +    boost::tie(key, name) = extract_named_prop(key_); + +    //handle the get request conditioned on the key +    switch(wax::cast<subdev_prop_t>(key)){ +    case SUBDEV_PROP_NAME: +        val = std::string(str(boost::format("%s:%s") +            % dboard_id::to_string(get_rx_id()) +            % get_subdev_name() +        )); +        return; + +    case SUBDEV_PROP_OTHERS: +        val = prop_names_t(); //empty +        return; + +    case SUBDEV_PROP_GAIN: +    case SUBDEV_PROP_GAIN_MAX: +    case SUBDEV_PROP_GAIN_MIN: +    case SUBDEV_PROP_GAIN_STEP: +        val = gain_t(0); +        return; + +    case SUBDEV_PROP_GAIN_NAMES: +        val = prop_names_t(); //empty +        return; + +    case SUBDEV_PROP_FREQ: +        val = freq_t(0); +        return; + +    case SUBDEV_PROP_FREQ_MAX: +        val = +_max_freq; +        return; + +    case SUBDEV_PROP_FREQ_MIN: +        val = -_max_freq; +        return; + +    case SUBDEV_PROP_ANTENNA: +        val = std::string(""); +        return; + +    case SUBDEV_PROP_ANTENNA_NAMES: +        val = prop_names_t(1, ""); //vector of 1 empty string +        return; + +    case SUBDEV_PROP_ENABLED: +        val = true; //always enabled +        return; + +    case SUBDEV_PROP_QUADRATURE: +        val = (get_subdev_name() == "ab"); //only quadrature in ab mode +        return; + +    case SUBDEV_PROP_IQ_SWAPPED: +    case SUBDEV_PROP_SPECTRUM_INVERTED: +    case SUBDEV_PROP_LO_INTERFERES: +        val = false; +        return; +    }  } -void basic_rx::rx_set(const wax::obj &, const wax::obj &){ -    /* TODO */ +void basic_rx::rx_set(const wax::obj &key_, const wax::obj &val){ +    wax::obj key; std::string name; +    boost::tie(key, name) = extract_named_prop(key_); + +    //handle the get request conditioned on the key +    switch(wax::cast<subdev_prop_t>(key)){ + +    case SUBDEV_PROP_GAIN: +        ASSERT_THROW(wax::cast<gain_t>(val) == gain_t(0)); +        return; + +    case SUBDEV_PROP_ANTENNA: +        ASSERT_THROW(wax::cast<std::string>(val) == std::string("")); +        return; + +    case SUBDEV_PROP_ENABLED: +        return; // it wont do you much good, but you can set it + +    case SUBDEV_PROP_NAME: +    case SUBDEV_PROP_OTHERS: +    case SUBDEV_PROP_GAIN_MAX: +    case SUBDEV_PROP_GAIN_MIN: +    case SUBDEV_PROP_GAIN_STEP: +    case SUBDEV_PROP_GAIN_NAMES: +    case SUBDEV_PROP_FREQ: +    case SUBDEV_PROP_FREQ_MAX: +    case SUBDEV_PROP_FREQ_MIN: +    case SUBDEV_PROP_ANTENNA_NAMES: +    case SUBDEV_PROP_QUADRATURE: +    case SUBDEV_PROP_IQ_SWAPPED: +    case SUBDEV_PROP_SPECTRUM_INVERTED: +    case SUBDEV_PROP_LO_INTERFERES: +        throw std::runtime_error(str(boost::format( +            "Error: trying to set read-only property on %s subdev" +        ) % dboard_id::to_string(get_rx_id()))); +    }  }  /*********************************************************************** - * Basic TX dboard + * Basic and LF TX dboard   **********************************************************************/ -basic_tx::basic_tx(ctor_args_t const& args) : tx_dboard_base(args){ -    /* NOP */ +basic_tx::basic_tx(ctor_args_t const& args, freq_t max_freq) : tx_dboard_base(args){ +    _max_freq = max_freq; +    // set the gpios to safe values (all inputs) +    get_interface()->set_gpio_ddr(dboard_interface::GPIO_TX_BANK, 0x0000, 0xffff);  }  basic_tx::~basic_tx(void){      /* NOP */  } -void basic_tx::tx_get(const wax::obj &, wax::obj &){ -    /* TODO */ +void basic_tx::tx_get(const wax::obj &key_, wax::obj &val){ +    wax::obj key; std::string name; +    boost::tie(key, name) = extract_named_prop(key_); + +    //handle the get request conditioned on the key +    switch(wax::cast<subdev_prop_t>(key)){ +    case SUBDEV_PROP_NAME: +        val = dboard_id::to_string(get_tx_id()); +        return; + +    case SUBDEV_PROP_OTHERS: +        val = prop_names_t(); //empty +        return; + +    case SUBDEV_PROP_GAIN: +    case SUBDEV_PROP_GAIN_MAX: +    case SUBDEV_PROP_GAIN_MIN: +    case SUBDEV_PROP_GAIN_STEP: +        val = gain_t(0); +        return; + +    case SUBDEV_PROP_GAIN_NAMES: +        val = prop_names_t(); //empty +        return; + +    case SUBDEV_PROP_FREQ: +        val = freq_t(0); +        return; + +    case SUBDEV_PROP_FREQ_MAX: +        val = +_max_freq; +        return; + +    case SUBDEV_PROP_FREQ_MIN: +        val = -_max_freq; +        return; + +    case SUBDEV_PROP_ANTENNA: +        val = std::string(""); +        return; + +    case SUBDEV_PROP_ANTENNA_NAMES: +        val = prop_names_t(1, ""); //vector of 1 empty string +        return; + +    case SUBDEV_PROP_ENABLED: +        val = true; //always enabled +        return; + +    case SUBDEV_PROP_QUADRATURE: +        val = true; +        return; + +    case SUBDEV_PROP_IQ_SWAPPED: +    case SUBDEV_PROP_SPECTRUM_INVERTED: +    case SUBDEV_PROP_LO_INTERFERES: +        val = false; +        return; +    }  } -void basic_tx::tx_set(const wax::obj &, const wax::obj &){ -    /* TODO */ +void basic_tx::tx_set(const wax::obj &key_, const wax::obj &val){ +    wax::obj key; std::string name; +    boost::tie(key, name) = extract_named_prop(key_); + +    //handle the get request conditioned on the key +    switch(wax::cast<subdev_prop_t>(key)){ + +    case SUBDEV_PROP_GAIN: +        ASSERT_THROW(wax::cast<gain_t>(val) == gain_t(0)); +        return; + +    case SUBDEV_PROP_ANTENNA: +        ASSERT_THROW(wax::cast<std::string>(val) == std::string("")); +        return; + +    case SUBDEV_PROP_ENABLED: +        return; // it wont do you much good, but you can set it + +    case SUBDEV_PROP_NAME: +    case SUBDEV_PROP_OTHERS: +    case SUBDEV_PROP_GAIN_MAX: +    case SUBDEV_PROP_GAIN_MIN: +    case SUBDEV_PROP_GAIN_STEP: +    case SUBDEV_PROP_GAIN_NAMES: +    case SUBDEV_PROP_FREQ: +    case SUBDEV_PROP_FREQ_MAX: +    case SUBDEV_PROP_FREQ_MIN: +    case SUBDEV_PROP_ANTENNA_NAMES: +    case SUBDEV_PROP_QUADRATURE: +    case SUBDEV_PROP_IQ_SWAPPED: +    case SUBDEV_PROP_SPECTRUM_INVERTED: +    case SUBDEV_PROP_LO_INTERFERES: +        throw std::runtime_error(str(boost::format( +            "Error: trying to set read-only property on %s subdev" +        ) % dboard_id::to_string(get_tx_id()))); +    }  } diff --git a/host/lib/usrp/dboard/dboards.hpp b/host/lib/usrp/dboard/dboards.hpp deleted file mode 100644 index 79b90d593..000000000 --- a/host/lib/usrp/dboard/dboards.hpp +++ /dev/null @@ -1,53 +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_LOCAL_DBOARDS_HPP -#define INCLUDED_LOCAL_DBOARDS_HPP - -#include <uhd/usrp/dboard_base.hpp> - -using namespace uhd::usrp; - -/*********************************************************************** - * The basic boards: - **********************************************************************/ -class basic_rx : public rx_dboard_base{ -public: -    static dboard_base::sptr make(ctor_args_t const& args){ -        return dboard_base::sptr(new basic_rx(args)); -    } -    basic_rx(ctor_args_t const& args); -    ~basic_rx(void); - -    void rx_get(const wax::obj &key, wax::obj &val); -    void rx_set(const wax::obj &key, const wax::obj &val); -}; - -class basic_tx : public tx_dboard_base{ -public: -    static dboard_base::sptr make(ctor_args_t const& args){ -        return dboard_base::sptr(new basic_tx(args)); -    } -    basic_tx(ctor_args_t const& args); -    ~basic_tx(void); - -    void tx_get(const wax::obj &key, wax::obj &val); -    void tx_set(const wax::obj &key, const wax::obj &val); - -}; - -#endif /* INCLUDED_LOCAL_DBOARDS_HPP */ diff --git a/host/lib/usrp/dboard_id.cpp b/host/lib/usrp/dboard_id.cpp deleted file mode 100644 index d2ef7cd7d..000000000 --- a/host/lib/usrp/dboard_id.cpp +++ /dev/null @@ -1,34 +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/>. -// - -#include <uhd/usrp/dboard_id.hpp> -#include <boost/format.hpp> -#include <uhd/dict.hpp> - -using namespace uhd::usrp; - -std::string dboard_id::to_string(const dboard_id_t &id){ -    //map the dboard ids to string representations -    uhd::dict<dboard_id_t, std::string> id_to_str; -    id_to_str[ID_NONE]     = "none"; -    id_to_str[ID_BASIC_TX] = "basic tx"; -    id_to_str[ID_BASIC_RX] = "basic rx"; - -    //get the string representation -    std::string name = (id_to_str.has_key(id))? id_to_str[id] : "unknown"; -    return str(boost::format("%s (0x%.4x)") % name % id); -} diff --git a/host/lib/usrp/dboard_manager.cpp b/host/lib/usrp/dboard_manager.cpp index cce239f3e..57b449175 100644 --- a/host/lib/usrp/dboard_manager.cpp +++ b/host/lib/usrp/dboard_manager.cpp @@ -18,36 +18,12 @@  #include <uhd/usrp/dboard_manager.hpp>  #include <uhd/utils.hpp>  #include <uhd/dict.hpp> -#include <boost/assign/list_of.hpp>  #include <boost/tuple/tuple.hpp>  #include <boost/format.hpp>  #include <boost/foreach.hpp> -#include "dboard/dboards.hpp"  using namespace uhd;  using namespace uhd::usrp; -using namespace boost::assign; - -/*********************************************************************** - * register internal dboards - * - * Register internal/known dboards located in this build tree. - * Each board should have entries below mapping an id to a constructor. - * The xcvr type boards should register both rx and tx sides. - * - * This function will be called before new boards are registered. - * This allows for internal boards to be externally overridden. - * This function will also be called when creating a new dboard_manager - * to ensure that the maps are filled with the entries below. - **********************************************************************/ -static void register_internal_dboards(void){ -    //ensure that this function can only be called once per instance -    static bool called = false; -    if (called) return; called = true; -    //register the known dboards (dboard id, constructor, subdev names) -    dboard_manager::register_subdevs(ID_BASIC_TX, &basic_tx::make, list_of("")); -    dboard_manager::register_subdevs(ID_BASIC_RX, &basic_rx::make, list_of("a")("b")("ab")); -}  /***********************************************************************   * storage and registering for dboards @@ -57,15 +33,24 @@ typedef boost::tuple<dboard_manager::dboard_ctor_t, prop_names_t> args_t;  //map a dboard id to a dboard constructor  static uhd::dict<dboard_id_t, args_t> id_to_args_map; +//map a dboard id to a canonical name +static uhd::dict<dboard_id_t, std::string> id_to_str; +  void dboard_manager::register_subdevs(      dboard_id_t dboard_id,      dboard_ctor_t dboard_ctor, +    const std::string &name,      const prop_names_t &subdev_names  ){ -    register_internal_dboards(); //always call first +    id_to_str[dboard_id] = name;      id_to_args_map[dboard_id] = args_t(dboard_ctor, subdev_names);  } +std::string dboard_id::to_string(const dboard_id_t &id){ +    std::string name = (id_to_str.has_key(id))? id_to_str[id] : "unknown"; +    return str(boost::format("%s (0x%.4x)") % name % id); +} +  /***********************************************************************   * dboard manager implementation class   **********************************************************************/ @@ -160,12 +145,12 @@ static args_t get_dboard_args(  ){      //special case, its rx and the none id (0xffff)      if (xx_type == "rx" and dboard_id == ID_NONE){ -        return args_t(&basic_rx::make, list_of("ab")); +        return get_dboard_args(0x0001, xx_type);      }      //special case, its tx and the none id (0xffff)      if (xx_type == "tx" and dboard_id == ID_NONE){ -        return args_t(&basic_tx::make, list_of("")); +        return get_dboard_args(0x0000, xx_type);      }      //verify that there is a registered constructor for this id @@ -185,7 +170,6 @@ dboard_manager_impl::dboard_manager_impl(      dboard_id_t tx_dboard_id,      dboard_interface::sptr interface  ){ -    register_internal_dboards(); //always call first      _interface = interface;      dboard_ctor_t rx_dboard_ctor; prop_names_t rx_subdevs; | 
