#include <uhd/utils/chdr/chdr_packet.hpp>
A Generic class that represents a CHDR Packet
This class is not used by UHD, it is a helper class for writing tests or other types of utilities. The class has the capability of representing any CHDR packet, and serializing this class into a CHDR packet (or deserializing from a buffer to populate this class). It is not optimized for high performance. For example, this is used in UHD unit tests, and in the USRP simulator to provide an easy way to generate CHDR packets from Python.
Whether the packet has a specific type of payload is not specified, but of course the CHDR header can be set as desired, and a payload can be provided to the constructor.
Public Member Functions | |
| template<typename payload_t> | |
| chdr_packet (uhd::rfnoc::chdr_w_t chdr_w, uhd::rfnoc::chdr::chdr_header header, payload_t payload, std::optional< uint64_t > timestamp={}, std::vector< uint64_t > metadata={}) | |
| 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={}) | |
| uhd::rfnoc::chdr::chdr_header | get_header () const |
| void | set_header (uhd::rfnoc::chdr::chdr_header header) |
| std::optional< uint64_t > | get_timestamp () const |
| void | set_timestamp (std::optional< uint64_t > timestamp) |
| const std::vector< uint64_t > & | get_metadata () const |
| void | set_metadata (std::vector< uint64_t > metadata) |
| std::vector< uint8_t > | serialize_to_byte_vector (endianness_t endianness=uhd::ENDIANNESS_LITTLE) const |
| template<typename OutputIterator> | |
| void | serialize (OutputIterator first, OutputIterator last, endianness_t endianness=uhd::ENDIANNESS_LITTLE) const |
| size_t | get_packet_len () const |
| const std::vector< uint8_t > & | get_payload_bytes () const |
| void | set_payload_bytes (std::vector< uint8_t > bytes) |
| template<typename payload_t> | |
| payload_t | get_payload (uhd::endianness_t endianness=uhd::ENDIANNESS_LITTLE) const |
| template<typename payload_t> | |
| void | set_payload (payload_t payload, uhd::endianness_t endianness=uhd::ENDIANNESS_LITTLE) |
| std::string | to_string () const |
| Return a string representation of this object. | |
| template<typename payload_t> | |
| std::string | to_string_with_payload (uhd::endianness_t endianness=uhd::ENDIANNESS_LITTLE) const |
| Return a string representation of this object and deserialize its payload. | |
| template<typename OutputIterator> | |
| void | serialize (OutputIterator first, OutputIterator last, uhd::endianness_t endianness) const |
| template<typename InputIterator> | |
| chdr_packet | deserialize (uhd::rfnoc::chdr_w_t chdr_w, InputIterator first, InputIterator last, uhd::endianness_t endianness) |
Static Public Member Functions | |
| template<typename InputIterator> | |
| static chdr_packet | deserialize (uhd::rfnoc::chdr_w_t chdr_w, InputIterator first, InputIterator last, endianness_t endianness=uhd::ENDIANNESS_LITTLE) |
| uhd::utils::chdr::chdr_packet::chdr_packet | ( | uhd::rfnoc::chdr_w_t | chdr_w, |
| uhd::rfnoc::chdr::chdr_header | header, | ||
| payload_t | payload, | ||
| std::optional< uint64_t > | timestamp = {}, | ||
| std::vector< uint64_t > | metadata = {} ) |
Constructs a CHDR Packet from a header and a payload
This is commonly used to create a non-data packet (e.g., control, stream status, etc.).
| chdr_w | CHDR width |
| header | CHDR header |
| payload | The payload object (e.g., a chdr_rfnoc::ctrl_payload if that's the type of payload_t). |
| timestamp | Timestamp, defaults to no timestamp in the header. |
| metadata | Metadata, defaults to no metadata. |
| uhd::utils::chdr::chdr_packet::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 = {} ) |
Construct a CHDR Packet from a header and raw payload words
This is the typical way to construct data packets, or to manually construct non-data packets by bypassing the corresponding payload types.
| chdr_w | CHDR width |
| header | CHDR header |
| payload_data | The payload data as bytes, i.e., whatever follows the CHDR header. |
| timestamp | Timestamp, defaults to no timestamp in the header. |
| metadata | Metadata, defaults to no metadata. |
|
static |
Deserialize a CHDR Packet from a buffer of bytes
| chdr_w | the CHDR_W of the incoming packet |
| endianness | the endianness of the input buffer (link endianness) |
| first | the start of the input buffer |
| last | the end of the input buffer |
| chdr_packet uhd::utils::chdr::chdr_packet::deserialize | ( | uhd::rfnoc::chdr_w_t | chdr_w, |
| InputIterator | first, | ||
| InputIterator | last, | ||
| uhd::endianness_t | endianness ) |
| uhd::rfnoc::chdr::chdr_header uhd::utils::chdr::chdr_packet::get_header | ( | ) | const |
Returns the contents of the CHDR header
| const std::vector< uint64_t > & uhd::utils::chdr::chdr_packet::get_metadata | ( | ) | const |
Returns a const reference to the metadata
| size_t uhd::utils::chdr::chdr_packet::get_packet_len | ( | ) | const |
Get the total serialized length of the packet
| payload_t uhd::utils::chdr::chdr_packet::get_payload | ( | uhd::endianness_t | endianness = uhd::ENDIANNESS_LITTLE | ) | const |
Parses the data out of this objects payload field into a payload_t object
| endianness | The link endianness of the CHDR Link |
| const std::vector< uint8_t > & uhd::utils::chdr::chdr_packet::get_payload_bytes | ( | ) | const |
Returns a const reference to the payload bytes
| std::optional< uint64_t > uhd::utils::chdr::chdr_packet::get_timestamp | ( | ) | const |
Returns the timestamp in the packet as an optional value
| void uhd::utils::chdr::chdr_packet::serialize | ( | OutputIterator | first, |
| OutputIterator | last, | ||
| endianness_t | endianness = uhd::ENDIANNESS_LITTLE ) const |
Serialize a CHDR Packet into a buffer
| endianness | the endianness of the output buffer (link endianness) |
| first | the start of the output buffer |
| last | the end of the output buffer |
| void uhd::utils::chdr::chdr_packet::serialize | ( | OutputIterator | first, |
| OutputIterator | last, | ||
| uhd::endianness_t | endianness ) const |
| std::vector< uint8_t > uhd::utils::chdr::chdr_packet::serialize_to_byte_vector | ( | endianness_t | endianness = uhd::ENDIANNESS_LITTLE | ) | const |
Serialize a CHDR Packet into a vector of bytes
| endianness | the endianness of the returned vector (link endianness) |
| void uhd::utils::chdr::chdr_packet::set_header | ( | uhd::rfnoc::chdr::chdr_header | header | ) |
Change this object's header
| header | The new CHDR header |
| void uhd::utils::chdr::chdr_packet::set_metadata | ( | std::vector< uint64_t > | metadata | ) |
Sets the metadata for a CHDR packet and updates the headers
| metadata | A vector containing the new metadata |
| void uhd::utils::chdr::chdr_packet::set_payload | ( | payload_t | payload, |
| uhd::endianness_t | endianness = uhd::ENDIANNESS_LITTLE ) |
Serializes the payload object into bytes and stores it in this object's payload field
| payload | the payload object to store |
| endianness | The link endianness of the CHDR Link |
| void uhd::utils::chdr::chdr_packet::set_payload_bytes | ( | std::vector< uint8_t > | bytes | ) |
Sets the current payload
| bytes | the payload to store inside this object (It is moved from) |
| void uhd::utils::chdr::chdr_packet::set_timestamp | ( | std::optional< uint64_t > | timestamp | ) |
Sets the timestamp in the packet
| timestamp | the timestamp to set, or an empty optional for no timestamp |
| std::string uhd::utils::chdr::chdr_packet::to_string | ( | ) | const |
Return a string representation of this object.
| std::string uhd::utils::chdr::chdr_packet::to_string_with_payload | ( | uhd::endianness_t | endianness = uhd::ENDIANNESS_LITTLE | ) | const |
Return a string representation of this object and deserialize its payload.