summaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
Diffstat (limited to 'host/include')
-rw-r--r--host/include/uhd/CMakeLists.txt1
-rw-r--r--host/include/uhd/device.hpp33
-rw-r--r--host/include/uhd/metadata.hpp47
-rw-r--r--host/include/uhd/transport/udp.hpp17
4 files changed, 91 insertions, 7 deletions
diff --git a/host/include/uhd/CMakeLists.txt b/host/include/uhd/CMakeLists.txt
index 006c54f22..e87f74291 100644
--- a/host/include/uhd/CMakeLists.txt
+++ b/host/include/uhd/CMakeLists.txt
@@ -24,6 +24,7 @@ INSTALL(FILES
device_addr.hpp
dict.hpp
gain_handler.hpp
+ metadata.hpp
props.hpp
shared_iovec.hpp
time_spec.hpp
diff --git a/host/include/uhd/device.hpp b/host/include/uhd/device.hpp
index dfbfbd7c0..da58d4f85 100644
--- a/host/include/uhd/device.hpp
+++ b/host/include/uhd/device.hpp
@@ -20,13 +20,12 @@
#include <uhd/device_addr.hpp>
#include <uhd/props.hpp>
+#include <uhd/metadata.hpp>
#include <uhd/wax.hpp>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/function.hpp>
#include <boost/asio/buffer.hpp>
-#include <uhd/shared_iovec.hpp>
-#include <vector>
namespace uhd{
@@ -72,9 +71,33 @@ public:
*/
device_addr_t get_device_addr(void);
- //the io interface
- virtual void send_raw(const std::vector<boost::asio::const_buffer> &) = 0;
- virtual uhd::shared_iovec recv_raw(void) = 0;
+ /*!
+ * Send a buffer containing IF data with its metadata.
+ *
+ * \param buff a buffer pointing to some read-only memory
+ * \param metadata data describing the buffer's contents
+ * \param the type of data loaded in the buffer (32fc, 16sc)
+ * \return the number of bytes sent
+ */
+ virtual size_t send(
+ const boost::asio::const_buffer &buff,
+ const metadata_t &metadata,
+ const std::string &type = "32fc"
+ ) = 0;
+
+ /*!
+ * Receive a buffer containing IF data and its metadata.
+ *
+ * \param buff the buffer to fill with IF data
+ * \param metadata data to fill describing the buffer
+ * \param the type of data to fill into the buffer (32fc, 16sc)
+ * \return the number of bytes received
+ */
+ virtual size_t recv(
+ const boost::asio::mutable_buffer &buff,
+ metadata_t &metadata,
+ const std::string &type = "32fc"
+ ) = 0;
};
} //namespace uhd
diff --git a/host/include/uhd/metadata.hpp b/host/include/uhd/metadata.hpp
new file mode 100644
index 000000000..43b91d1b0
--- /dev/null
+++ b/host/include/uhd/metadata.hpp
@@ -0,0 +1,47 @@
+//
+// 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_UHD_METADATA_HPP
+#define INCLUDED_UHD_METADATA_HPP
+
+#include <uhd/time_spec.hpp>
+
+namespace uhd{
+
+/*!
+ * Metadata structure for describing the IF data.
+ * Includes stream ID, time specification, and burst flags.
+ * The receive routines will convert IF data headers into metadata.
+ * The send routines will convert the metadata to IF data headers.
+ */
+struct metadata_t{
+ uint32_t stream_id;
+ time_spec_t time_spec;
+ bool start_of_burst;
+ bool end_of_burst;
+
+ metadata_t(void){
+ stream_id = 0;
+ time_spec = time_spec_t();
+ start_of_burst = false;
+ end_of_burst = false;
+ }
+};
+
+} //namespace uhd
+
+#endif /* INCLUDED_UHD_METADATA_HPP */
diff --git a/host/include/uhd/transport/udp.hpp b/host/include/uhd/transport/udp.hpp
index 554234b43..07d84e62a 100644
--- a/host/include/uhd/transport/udp.hpp
+++ b/host/include/uhd/transport/udp.hpp
@@ -41,18 +41,31 @@ public:
/*!
* Send a vector of buffer (like send_msg).
+ * Blocks until the data is sent.
* \param buffs a vector of asio buffers
+ * \return the number of bytes sent
*/
- virtual void send(const std::vector<boost::asio::const_buffer> &buffs) = 0;
+ virtual size_t send(const std::vector<boost::asio::const_buffer> &buffs) = 0;
/*!
* Send a single buffer.
+ * Blocks until the data is sent.
* \param buff single asio buffer
+ * \return the number of bytes sent
*/
- virtual void send(const boost::asio::const_buffer &buff) = 0;
+ virtual size_t send(const boost::asio::const_buffer &buff) = 0;
+
+ /*!
+ * Receive a buffer. Write into the memory provided.
+ * Returns empty when data is not available.
+ * \param buff a mutable buffer to receive into
+ * \return the number of bytes received.
+ */
+ virtual size_t recv(const boost::asio::mutable_buffer &buff) = 0;
/*!
* Receive a buffer. The memory is managed internally.
+ * Returns zero when data is not available.
* Calling recv will invalidate the buffer of the previous recv.
* \return a shared iovec with allocated memory
*/