From 3b47904f24169904bf65b29091d85ddfc2a7edb4 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 14 Jan 2010 19:02:55 -0800 Subject: Switched dboard ctor arguments with a tuple. Sub-classes only need to pass the single argument, makes implementation cleaner. Added a dboard registry and api for the manager. This way, one could externally register custom dboard from the api. --- include/usrp_uhd/usrp/dboard/base.hpp | 11 ++++++--- include/usrp_uhd/usrp/dboard/manager.hpp | 39 ++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 5 deletions(-) (limited to 'include/usrp_uhd/usrp/dboard') diff --git a/include/usrp_uhd/usrp/dboard/base.hpp b/include/usrp_uhd/usrp/dboard/base.hpp index 86ab7dde6..09cc9b324 100644 --- a/include/usrp_uhd/usrp/dboard/base.hpp +++ b/include/usrp_uhd/usrp/dboard/base.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace usrp_uhd{ namespace usrp{ namespace dboard{ @@ -19,9 +20,13 @@ namespace usrp_uhd{ namespace usrp{ namespace dboard{ class xcvr_base : boost::noncopyable{ public: typedef boost::shared_ptr sptr; + //the constructor args consist of a subdev index and an interface + //derived classes should pass the args into the base class ctor + //but should not have to deal with the internals of the args + typedef boost::tuple ctor_args_t; //structors - xcvr_base(size_t subdev_index, interface::sptr dboard_interface); + xcvr_base(ctor_args_t const&); ~xcvr_base(void); //interface @@ -48,7 +53,7 @@ public: /*! * Create a new rx dboard object, override in subclasses. */ - rx_base(size_t subdev_index, interface::sptr sptr_interface); + rx_base(ctor_args_t const&); virtual ~rx_base(void); @@ -66,7 +71,7 @@ public: /*! * Create a new rx dboard object, override in subclasses. */ - tx_base(size_t subdev_index, interface::sptr sptr_interface); + tx_base(ctor_args_t const&); virtual ~tx_base(void); diff --git a/include/usrp_uhd/usrp/dboard/manager.hpp b/include/usrp_uhd/usrp/dboard/manager.hpp index 29aca83f0..788b8a6eb 100644 --- a/include/usrp_uhd/usrp/dboard/manager.hpp +++ b/include/usrp_uhd/usrp/dboard/manager.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -19,12 +20,46 @@ namespace usrp_uhd{ namespace usrp{ namespace dboard{ * Provide wax::obj access to the subdevs inside. */ class manager : boost::noncopyable{ + +public: + //a dboard can be identified by a 16 bit integer + typedef uint16_t dboard_id_t; + + //dboard constructor (each dboard should have a ::make with this signature) + typedef boost::function dboard_ctor_t; + + /*! + * Register rx subdevices for a given dboard id. + * + * \param dboard_id the rx dboard id + * \param dboard_ctor the dboard constructor function pointer + * \param num_subdevs the number of rx subdevs in this dboard + */ + static void register_rx_subdev( + dboard_id_t dboard_id, + dboard_ctor_t dboard_ctor, + size_t num_subdevs + ); + + /*! + * Register tx subdevices for a given dboard id. + * + * \param dboard_id the tx dboard id + * \param dboard_ctor the dboard constructor function pointer + * \param num_subdevs the number of tx subdevs in this dboard + */ + static void register_tx_subdev( + dboard_id_t dboard_id, + dboard_ctor_t dboard_ctor, + size_t num_subdevs + ); + public: typedef boost::shared_ptr sptr; //structors manager( - uint16_t rx_dboard_id, - uint16_t tx_dboard_id, + dboard_id_t rx_dboard_id, + dboard_id_t tx_dboard_id, interface::sptr dboard_interface ); ~manager(void); -- cgit v1.2.3