diff options
-rw-r--r-- | include/usrp_uhd.hpp | 36 | ||||
-rw-r--r-- | include/usrp_uhd/Makefile.am | 1 | ||||
-rw-r--r-- | include/usrp_uhd/device.hpp | 74 | ||||
-rw-r--r-- | lib/Makefile.am | 1 | ||||
-rw-r--r-- | lib/device.cpp | 43 | ||||
-rw-r--r-- | lib/usrp_uhd.cpp | 3 |
6 files changed, 122 insertions, 36 deletions
diff --git a/include/usrp_uhd.hpp b/include/usrp_uhd.hpp index 1cbd064b7..deaf6e0c6 100644 --- a/include/usrp_uhd.hpp +++ b/include/usrp_uhd.hpp @@ -5,39 +5,7 @@ #ifndef INCLUDED_USRP_UHD_HPP #define INCLUDED_USRP_UHD_HPP -#include <usrp_uhd/device_addr.hpp> -#include <usrp_uhd/wax.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/function.hpp> -#include <vector> -#include <sys/uio.h> - -namespace usrp_uhd{ - - class usrp_uhd{ - - public: - typedef boost::shared_ptr<usrp_uhd> sptr; - typedef boost::function<bool(void *data, size_t len)> recv_hdlr_t; - usrp_uhd(device_addr_t device_addr); - ~usrp_uhd(void); - - //the io interface - void send(const std::vector<iovec> &iovs); - void send(void* data, size_t len); //wrapper - void recv(const recv_hdlr_t &recv_hdlr); - void recv(void* &data, size_t &len); //wrapper - - //connect dsps and subdevs - void connect(const wax::type &src, const wax::type &sink); - - //the properties interface - wax::proxy props(void); - - private: - wax::type d_mboard; - }; - -} //namespace usrp_uhd +//include convenience headers +#include <usrp_uhd/device.hpp> #endif /* INCLUDED_USRP_UHD_HPP */ diff --git a/include/usrp_uhd/Makefile.am b/include/usrp_uhd/Makefile.am index 9d12f2097..02a129484 100644 --- a/include/usrp_uhd/Makefile.am +++ b/include/usrp_uhd/Makefile.am @@ -8,5 +8,6 @@ SUBDIRS = usrp quadradio this_includedir = $(includedir)/usrp_uhd this_include_HEADERS = \ + device.hpp \ device_addr.hpp \ wax.hpp diff --git a/include/usrp_uhd/device.hpp b/include/usrp_uhd/device.hpp new file mode 100644 index 000000000..9d70b9ac3 --- /dev/null +++ b/include/usrp_uhd/device.hpp @@ -0,0 +1,74 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#ifndef INCLUDED_USRP_UHD_DEVICE_HPP +#define INCLUDED_USRP_UHD_DEVICE_HPP + +#include <usrp_uhd/device_addr.hpp> +#include <usrp_uhd/wax.hpp> +#include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <vector> +#include <sys/uio.h> + +namespace usrp_uhd{ + +/*! + * The usrp device interface represents the usrp hardware. + * The api allows for discovery, configuration, and streaming. + */ +class device{ + +public: + typedef boost::shared_ptr<device> sptr; + typedef boost::function<bool(void *data, size_t len)> recv_hdlr_t; + + /*! + * \brief Discover usrp devices attached to the host. + * + * The hint device address should be used to narrow down the search + * to particular transport types and/or transport arguments. + * + * \param hint a partially (or fully) filled in device address + * \return a vector of device addresses for all usrps on the system + */ + static std::vector<device_addr_t> discover(const device_addr_t& hint); + + /*! + * \brief Create a new usrp device from the device address hint. + * + * The make routine will call discover and pick one of the results. + * By default, the first result will be used to create a new device. + * Use the which parameter as an index into the list of results. + * + * \param hint a partially (or fully) filled in device address + * \param which which address to use when multiple are discovered + * \return a shared pointer to a new device instance + */ + static sptr make(const device_addr_t& hint, size_t which = 0); + + /*! + * Deconstructor: called automatically by the shared pointer. + */ + ~device(void); + + //the io interface + void send_raw(const std::vector<iovec> &iovs); + void recv_raw(const recv_hdlr_t &recv_hdlr); + + //connect dsps and subdevs + void connect(const wax::type &src, const wax::type &sink); + + //the properties interface + wax::proxy props(void); + +private: + device(const device_addr_t& hint); + + wax::type d_mboard; +}; + +} //namespace usrp_uhd + +#endif /* INCLUDED_USRP_UHD_DEVICE_HPP */ diff --git a/lib/Makefile.am b/lib/Makefile.am index 6146f4025..a4b053b0a 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -11,6 +11,7 @@ AM_CPPFLAGS = $(GENERAL_CPPFLAGS) lib_LTLIBRARIES = libusrp_uhd.la libusrp_uhd_la_SOURCES = \ + device.cpp \ device_addr.cpp \ usrp_uhd.cpp \ wax.cpp diff --git a/lib/device.cpp b/lib/device.cpp new file mode 100644 index 000000000..fe655ec7a --- /dev/null +++ b/lib/device.cpp @@ -0,0 +1,43 @@ +// +// Copyright 2010 Ettus Research LLC +// + +#include <usrp_uhd/device.hpp> +#include <boost/format.hpp> + +using namespace usrp_uhd; + +std::vector<device_addr_t> device::discover(const device_addr_t& hint){ + std::vector<device_addr_t> device_addrs; + if (hint.type == DEVICE_ADDR_TYPE_VIRTUAL){ + //TODO device_addrs.push_back(...); + } + return device_addrs; +} + +device::sptr device::make(const device_addr_t& hint, size_t which){ + std::vector<device_addr_t> device_addrs = discover(hint); + //check that we found any devices + if (device_addrs.size() == 0){ + throw std::runtime_error(str( + boost::format("No devices found for %s") % hint.to_string() + )); + } + //check that the which index is valid + if (device_addrs.size() <= which){ + throw std::runtime_error(str( + boost::format("No device at index %d for %s") + % which % hint.to_string() + )); + } + //create the new device with the discovered address + return sptr(new device(device_addrs.at(which))); +} + +device::device(const device_addr_t&){ + /* NOP */ +} + +device::~device(void){ + /* NOP */ +} diff --git a/lib/usrp_uhd.cpp b/lib/usrp_uhd.cpp index 7d1e62a13..7591d3bea 100644 --- a/lib/usrp_uhd.cpp +++ b/lib/usrp_uhd.cpp @@ -4,5 +4,4 @@ #include <usrp_uhd.hpp> -usrp_uhd::usrp_uhd::usrp_uhd(device_addr_t){} -usrp_uhd::usrp_uhd::~usrp_uhd(void){} +//nothing here, just includes the header so the compiler can check |