diff options
Diffstat (limited to 'host/include')
| -rw-r--r-- | host/include/uhd/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | host/include/uhd/device.hpp | 33 | ||||
| -rw-r--r-- | host/include/uhd/metadata.hpp | 47 | ||||
| -rw-r--r-- | host/include/uhd/transport/udp.hpp | 17 | 
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       */ | 
