aboutsummaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-02-22 18:47:05 -0800
committerJosh Blum <josh@joshknows.com>2010-02-22 18:47:05 -0800
commit6b7c53985c09a8d74e9bfd9c6b37948d458b2c44 (patch)
treeb2a5fda7c44229ba210e95424e813b63c2545f85 /host/include
parent5200303517f4941fa60e2db713411f36116634a7 (diff)
downloaduhd-6b7c53985c09a8d74e9bfd9c6b37948d458b2c44.tar.gz
uhd-6b7c53985c09a8d74e9bfd9c6b37948d458b2c44.tar.bz2
uhd-6b7c53985c09a8d74e9bfd9c6b37948d458b2c44.zip
Work on the io interface for a device (and some implementation work in usrp2).
Modified the udp transport to reflect some of these changes. Got the fw compiling again, and it will not set data to true for small payloads (configuration ones).
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
*/