summaryrefslogtreecommitdiffstats
path: root/include/usrp_uhd
diff options
context:
space:
mode:
Diffstat (limited to 'include/usrp_uhd')
-rw-r--r--include/usrp_uhd/.gitignore2
-rw-r--r--include/usrp_uhd/Makefile.am12
-rw-r--r--include/usrp_uhd/device_addr.hpp90
-rw-r--r--include/usrp_uhd/quadradio/.gitignore2
-rw-r--r--include/usrp_uhd/quadradio/Makefile.am7
-rw-r--r--include/usrp_uhd/usrp/.gitignore2
-rw-r--r--include/usrp_uhd/usrp/Makefile.am7
-rw-r--r--include/usrp_uhd/usrp/dboard/.gitignore2
-rw-r--r--include/usrp_uhd/usrp/dboard/Makefile.am7
-rw-r--r--include/usrp_uhd/usrp/mboard/.gitignore2
-rw-r--r--include/usrp_uhd/usrp/mboard/Makefile.am7
-rw-r--r--include/usrp_uhd/wax.hpp129
12 files changed, 269 insertions, 0 deletions
diff --git a/include/usrp_uhd/.gitignore b/include/usrp_uhd/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/include/usrp_uhd/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/include/usrp_uhd/Makefile.am b/include/usrp_uhd/Makefile.am
new file mode 100644
index 000000000..9d12f2097
--- /dev/null
+++ b/include/usrp_uhd/Makefile.am
@@ -0,0 +1,12 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS = usrp quadradio
+
+this_includedir = $(includedir)/usrp_uhd
+this_include_HEADERS = \
+ device_addr.hpp \
+ wax.hpp
diff --git a/include/usrp_uhd/device_addr.hpp b/include/usrp_uhd/device_addr.hpp
new file mode 100644
index 000000000..f0be44c1f
--- /dev/null
+++ b/include/usrp_uhd/device_addr.hpp
@@ -0,0 +1,90 @@
+//
+// Copyright 2010 Ettus Research LLC
+//
+
+#ifndef INCLUDED_USRP_UHD_DEVICE_ADDR_HPP
+#define INCLUDED_USRP_UHD_DEVICE_ADDR_HPP
+
+#include <string>
+#include <iostream>
+#include <netinet/ether.h>
+#include <arpa/inet.h>
+
+namespace usrp_uhd{
+
+ /*!
+ * Wrapper for an ethernet mac address.
+ * Provides conversion between string and binary formats.
+ */
+ struct mac_addr_t{
+ struct ether_addr mac_addr;
+ mac_addr_t(const std::string &str = "00:00:00:00:00:00");
+ std::string to_string(void) const;
+ };
+
+ /*!
+ * Wrapper for an ipv4 address.
+ * Provides conversion between string and binary formats.
+ */
+ struct ip_addr_t{
+ struct in_addr ip_addr;
+ ip_addr_t(const std::string &str = "0.0.0.0");
+ std::string to_string(void) const;
+ };
+
+ /*!
+ * Possible usrp device interface types.
+ */
+ enum device_addr_type_t{
+ DEVICE_ADDR_TYPE_AUTO,
+ DEVICE_ADDR_TYPE_VIRTUAL,
+ DEVICE_ADDR_TYPE_USB,
+ DEVICE_ADDR_TYPE_ETH,
+ DEVICE_ADDR_TYPE_UDP,
+ DEVICE_ADDR_TYPE_GPMC
+ };
+
+ /*!
+ * Structure to hold properties that identify a usrp device.
+ */
+ struct device_addr_t{
+ device_addr_type_t type;
+ struct{
+ size_t num_rx_dsps;
+ size_t num_tx_dsps;
+ size_t num_dboards;
+ } virtual_args;
+ struct{
+ uint16_t vendor_id;
+ uint16_t product_id;
+ } usb_args;
+ struct{
+ std::string ifc;
+ mac_addr_t mac_addr;
+ } eth_args;
+ struct{
+ ip_addr_t ip_addr;
+ } udp_args;
+ struct{
+ //TODO unknown for now
+ } gpmc_args;
+
+ /*!
+ * \brief Convert a usrp device_addr_t into a string representation
+ */
+ std::string to_string(void) const;
+
+ /*!
+ * \brief Default constructor to initialize the device_addr_t struct
+ */
+ device_addr_t(device_addr_type_t device_addr_type = DEVICE_ADDR_TYPE_AUTO);
+ };
+
+} //namespace usrp_uhd
+
+//ability to use types with stream operators
+std::ostream& operator<<(std::ostream &os, const usrp_uhd::device_addr_t &x);
+std::ostream& operator<<(std::ostream &os, const usrp_uhd::mac_addr_t &x);
+std::ostream& operator<<(std::ostream &os, const usrp_uhd::ip_addr_t &x);
+
+#endif /* INCLUDED_USRP_UHD_DEVICE_ADDR_HPP */
diff --git a/include/usrp_uhd/quadradio/.gitignore b/include/usrp_uhd/quadradio/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/include/usrp_uhd/quadradio/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/include/usrp_uhd/quadradio/Makefile.am b/include/usrp_uhd/quadradio/Makefile.am
new file mode 100644
index 000000000..66fc4dd71
--- /dev/null
+++ b/include/usrp_uhd/quadradio/Makefile.am
@@ -0,0 +1,7 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS =
diff --git a/include/usrp_uhd/usrp/.gitignore b/include/usrp_uhd/usrp/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/include/usrp_uhd/usrp/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/include/usrp_uhd/usrp/Makefile.am b/include/usrp_uhd/usrp/Makefile.am
new file mode 100644
index 000000000..913f80a6d
--- /dev/null
+++ b/include/usrp_uhd/usrp/Makefile.am
@@ -0,0 +1,7 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS = mboard dboard
diff --git a/include/usrp_uhd/usrp/dboard/.gitignore b/include/usrp_uhd/usrp/dboard/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/include/usrp_uhd/usrp/dboard/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/include/usrp_uhd/usrp/dboard/Makefile.am b/include/usrp_uhd/usrp/dboard/Makefile.am
new file mode 100644
index 000000000..66fc4dd71
--- /dev/null
+++ b/include/usrp_uhd/usrp/dboard/Makefile.am
@@ -0,0 +1,7 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS =
diff --git a/include/usrp_uhd/usrp/mboard/.gitignore b/include/usrp_uhd/usrp/mboard/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/include/usrp_uhd/usrp/mboard/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/include/usrp_uhd/usrp/mboard/Makefile.am b/include/usrp_uhd/usrp/mboard/Makefile.am
new file mode 100644
index 000000000..66fc4dd71
--- /dev/null
+++ b/include/usrp_uhd/usrp/mboard/Makefile.am
@@ -0,0 +1,7 @@
+#
+# Copyright 2010 Ettus Research LLC
+#
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS =
diff --git a/include/usrp_uhd/wax.hpp b/include/usrp_uhd/wax.hpp
new file mode 100644
index 000000000..9d32314f7
--- /dev/null
+++ b/include/usrp_uhd/wax.hpp
@@ -0,0 +1,129 @@
+//
+// Copyright 2010 Ettus Research LLC
+//
+
+#ifndef INCLUDED_WAX_HPP
+#define INCLUDED_WAX_HPP
+
+#include <boost/any.hpp>
+#include <boost/function.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <boost/pointer_cast.hpp>
+#include <iostream>
+
+/*!
+ * WAX - it's a metaphor!
+ *
+ * The WAX framework allows object to have generic/anytype properties.
+ * These properties can be addressed through generic/anytype identifiers.
+ * A property of a WAX object may even be another WAX object.
+ *
+ * When a property is a WAX object, the returned value must be an obj pointer.
+ * A WAX object provides two types of pointers: obj::ptr and obj::sptr.
+ * The choice of pointer vs smart pointer depends on the owner of the memory.
+ *
+ * Proprties may be referenced though the [] overloaded operator.
+ * The [] operator returns a special proxy that allows for assigment.
+ * Also, the [] operators may be chained as in the folowing examples:
+ * my_obj[prop1][prop2][prop3] = value
+ * value = my_obj[prop1][prop2][prop3]
+ *
+ * Any value returned from an access operation is of wax::type.
+ * To use this value, it must be cast with wax::cast<new_type>(value).
+ */
+
+namespace wax{
+
+ //general typedefs
+ typedef boost::any type;
+ typedef boost::bad_any_cast bad_cast;
+
+ //dummy class declarations
+ class obj; class proxy;
+
+ /*!
+ * WAX object base class:
+ * A wax object subclass should override the set and get methods.
+ * The magic of operator chaining is handled by the [] operator.
+ */
+ class obj{
+ public:
+ //obj pointer typedefs
+ typedef boost::shared_ptr<obj> sptr;
+ typedef obj* ptr;
+
+ //cast derived pointer to obj base class pointer
+ template <class T> static sptr cast(boost::shared_ptr<T> r){
+ return boost::static_pointer_cast<obj>(r);
+ }
+ template <class T> static ptr cast(T *r){
+ return dynamic_cast<ptr>(r);
+ }
+
+ //structors
+ obj(void);
+ virtual ~obj(void);
+
+ //public interface
+ proxy operator[](const type &key);
+
+ private:
+ //private interface
+ virtual void get(const type &key, type &val) = 0;
+ virtual void set(const type &key, const type &val) = 0;
+ };
+
+ /*!
+ * WAX proxy class:
+ * Allows the obj [] operator to return a proxy result.
+ * This result can be assigned to via the = operator.
+ * Or this result can be called again with the [] operator.
+ */
+ class proxy{
+ public:
+ //destructors
+ ~proxy(void);
+
+ //overloaded
+ type operator()(void);
+ proxy operator[](const type &key);
+ proxy operator=(const type &key);
+
+ private:
+ //typedefs for callables from the object that built this proxy
+ typedef boost::function<void(const type &)> setter_t;
+ typedef boost::function<void(type &)> getter_t;
+
+ //private contructor
+ proxy(getter_t, setter_t);
+ //access to private contructor
+ friend proxy obj::operator[](const type &key);
+
+ getter_t d_getter;
+ setter_t d_setter;
+ };
+
+ /*!
+ * Cast a wax::type into the desired type
+ * Usage wax::cast<new_type>(my_value).
+ *
+ * \param val the any type to cast
+ * \return data of the desired type
+ * \throw wax::bad_cast when the cast fails
+ */
+ template<typename T> T cast(const type & val){
+ //special case to handle the proxy
+ if (val.type() == typeid(proxy)){
+ return cast<T>(boost::any_cast<proxy>(val)());
+ }
+ //do the type cast
+ return boost::any_cast<T>(val);
+ }
+
+} //namespace wax
+
+//ability to use types with stream operators
+std::ostream& operator<<(std::ostream &os, const wax::type &x);
+
+#endif /* INCLUDED_WAX_HPP */