USRP Hardware Driver and Device Manual  Version: 4.10.0.0-0-g2af4ddb9
UHD and USRP Manual
chdr_packet.hpp
Go to the documentation of this file.
1 //
2 // Copyright 2020 Ettus Research, a National Instruments Brand
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #pragma once
8 
9 #include <uhd/config.hpp>
10 #include <uhd/rfnoc/chdr_types.hpp>
12 #include <uhd/types/endianness.hpp>
13 #include <cstddef>
14 #include <cstdint>
15 #include <optional>
16 #include <string>
17 #include <vector>
18 
19 namespace uhd { namespace utils { namespace chdr {
20 
36 {
37 public:
50  template <typename payload_t>
53  payload_t payload,
54  std::optional<uint64_t> timestamp = {},
55  std::vector<uint64_t> metadata = {});
56 
71  std::vector<uint8_t> payload_data,
72  std::optional<uint64_t> timestamp = {},
73  std::vector<uint64_t> metadata = {});
74 
80 
86 
91  std::optional<uint64_t> get_timestamp() const;
92 
98  void set_timestamp(std::optional<uint64_t> timestamp);
99 
104  const std::vector<uint64_t>& get_metadata() const;
105 
110  void set_metadata(std::vector<uint64_t> metadata);
111 
117  std::vector<uint8_t> serialize_to_byte_vector(
118  endianness_t endianness = uhd::ENDIANNESS_LITTLE) const;
119 
126  template <typename OutputIterator>
127  void serialize(OutputIterator first,
128  OutputIterator last,
129  endianness_t endianness = uhd::ENDIANNESS_LITTLE) const;
130 
139  template <typename InputIterator>
141  InputIterator first,
142  InputIterator last,
143  endianness_t endianness = uhd::ENDIANNESS_LITTLE);
144 
149  size_t get_packet_len() const;
150 
155  const std::vector<uint8_t>& get_payload_bytes() const;
156 
161  void set_payload_bytes(std::vector<uint8_t> bytes);
162 
168  template <typename payload_t>
169  payload_t get_payload(uhd::endianness_t endianness = uhd::ENDIANNESS_LITTLE) const;
170 
177  template <typename payload_t>
178  void set_payload(
179  payload_t payload, uhd::endianness_t endianness = uhd::ENDIANNESS_LITTLE);
180 
182  std::string to_string() const;
183 
185  template <typename payload_t>
186  std::string to_string_with_payload(
187  uhd::endianness_t endianness = uhd::ENDIANNESS_LITTLE) const;
188 
189 private:
190  void serialize_ptr(endianness_t endianness, void* start, void* end) const;
191 
192  static chdr_packet deserialize_ptr(uhd::rfnoc::chdr_w_t chdr_w,
193  endianness_t endianness,
194  const void* start,
195  const void* end);
196 
197  inline void set_header_lengths()
198  {
199  _header.set_num_mdata(_mdata.size() / (uhd::rfnoc::chdr_w_to_bits(_chdr_w) / 64));
200  _header.set_length(get_packet_len());
201  }
202 
203  uhd::rfnoc::chdr_w_t _chdr_w;
205  std::vector<uint8_t> _payload;
206  std::optional<uint64_t> _timestamp;
207  std::vector<uint64_t> _mdata;
208 };
209 
210 }}} // namespace uhd::utils::chdr
211 
Definition: chdr_types.hpp:37
Definition: chdr_packet.hpp:36
std::optional< uint64_t > get_timestamp() const
uhd::rfnoc::chdr::chdr_header get_header() const
static chdr_packet deserialize(uhd::rfnoc::chdr_w_t chdr_w, InputIterator first, InputIterator last, endianness_t endianness=uhd::ENDIANNESS_LITTLE)
chdr_packet(uhd::rfnoc::chdr_w_t chdr_w, uhd::rfnoc::chdr::chdr_header header, std::vector< uint8_t > payload_data, std::optional< uint64_t > timestamp={}, std::vector< uint64_t > metadata={})
void set_timestamp(std::optional< uint64_t > timestamp)
const std::vector< uint64_t > & get_metadata() const
const std::vector< uint8_t > & get_payload_bytes() const
std::vector< uint8_t > serialize_to_byte_vector(endianness_t endianness=uhd::ENDIANNESS_LITTLE) const
void set_metadata(std::vector< uint64_t > metadata)
void set_header(uhd::rfnoc::chdr::chdr_header header)
std::string to_string() const
Return a string representation of this object.
void set_payload_bytes(std::vector< uint8_t > bytes)
void serialize(OutputIterator first, OutputIterator last, endianness_t endianness=uhd::ENDIANNESS_LITTLE) const
#define UHD_API
Definition: config.h:87
chdr_w_t
Type that indicates the CHDR Width in bits.
Definition: rfnoc_types.hpp:19
constexpr size_t chdr_w_to_bits(chdr_w_t chdr_w)
Conversion from chdr_w_t to a number of bits.
Definition: rfnoc_types.hpp:22
Definition: build_info.hpp:12