diff options
| author | Ciro Nishiguchi <ciro.nishiguchi@ni.com> | 2019-08-12 11:59:16 -0500 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2019-11-26 11:49:35 -0800 | 
| commit | 35db8f741b4b6c0bccf04e68e81bc4ecb5018357 (patch) | |
| tree | 6677d2d24a6dcfd0535248ed8874b6d9f4228b5a /host/lib/include | |
| parent | 9f29b9a556634e41d13fa298f9634b67fdd0a749 (diff) | |
| download | uhd-35db8f741b4b6c0bccf04e68e81bc4ecb5018357.tar.gz uhd-35db8f741b4b6c0bccf04e68e81bc4ecb5018357.tar.bz2 uhd-35db8f741b4b6c0bccf04e68e81bc4ecb5018357.zip  | |
rfnoc: Add MTU property to TX streamer
Diffstat (limited to 'host/lib/include')
| -rw-r--r-- | host/lib/include/uhdlib/rfnoc/rfnoc_tx_streamer.hpp | 10 | ||||
| -rw-r--r-- | host/lib/include/uhdlib/transport/tx_streamer_impl.hpp | 29 | 
2 files changed, 34 insertions, 5 deletions
diff --git a/host/lib/include/uhdlib/rfnoc/rfnoc_tx_streamer.hpp b/host/lib/include/uhdlib/rfnoc/rfnoc_tx_streamer.hpp index 4acee45cc..3bfc9d05a 100644 --- a/host/lib/include/uhdlib/rfnoc/rfnoc_tx_streamer.hpp +++ b/host/lib/include/uhdlib/rfnoc/rfnoc_tx_streamer.hpp @@ -69,6 +69,15 @@ public:      bool check_topology(const std::vector<size_t>& connected_inputs,          const std::vector<size_t>& connected_outputs); +    /*! Connects a channel to the streamer port +     * +     * Overrides method in tx_streamer_impl. +     * +     * \param channel The streamer channel to which to connect +     * \param xport The transport for the specified channel +     */ +    void connect_channel(const size_t channel, chdr_tx_data_xport::uptr xport); +  private:      void _register_props(const size_t chan, const std::string& otw_format); @@ -77,6 +86,7 @@ private:      std::vector<property_t<double>> _samp_rate_out;      std::vector<property_t<double>> _tick_rate_out;      std::vector<property_t<std::string>> _type_out; +    std::vector<property_t<size_t>> _mtu_out;      // Streamer unique ID      const std::string _unique_id; diff --git a/host/lib/include/uhdlib/transport/tx_streamer_impl.hpp b/host/lib/include/uhdlib/transport/tx_streamer_impl.hpp index 60881dad2..819ed5558 100644 --- a/host/lib/include/uhdlib/transport/tx_streamer_impl.hpp +++ b/host/lib/include/uhdlib/transport/tx_streamer_impl.hpp @@ -79,14 +79,14 @@ public:          _spp = stream_args.args.cast<size_t>("spp", _spp);      } -    void connect_channel(const size_t channel, typename transport_t::uptr xport) +    virtual void connect_channel(const size_t channel, typename transport_t::uptr xport)      { -        const size_t max_pyld_size = xport->get_max_payload_size(); +        const size_t mtu = xport->get_max_payload_size();          _zero_copy_streamer.connect_channel(channel, std::move(xport)); -        // Set spp based on the transport frame size -        const size_t xport_spp = max_pyld_size / _convert_info.bytes_per_otw_item; -        _spp                   = std::min(_spp, xport_spp); +        if (mtu < _mtu) { +            set_mtu(mtu); +        }      }      size_t get_num_channels() const @@ -187,6 +187,22 @@ public:      }  protected: +    //! Returns the size in bytes of a sample in a packet +    size_t get_mtu() const +    { +        return _mtu; +    } + +    //! Sets the MTU and calculates spp +    void set_mtu(const size_t mtu) +    { +        _mtu = mtu; + +        // Check if spp needs to be lowered. SPP may already be lower than the +        // value allowed by mtu if the user specified it using stream_args. +        _spp = std::min(_spp, _mtu / _convert_info.bytes_per_otw_item); +    } +      //! Configures scaling factor for conversion      void set_scale_factor(const size_t chan, const double scale_factor)      { @@ -295,6 +311,9 @@ private:      // Sample rate used to calculate metadata time_spec_t      double _samp_rate = 1.0; +    // Maximum payload size +    size_t _mtu = std::numeric_limits<std::size_t>::max(); +      // Maximum number of samples per packet      size_t _spp = std::numeric_limits<std::size_t>::max();  | 
